Skip to content

Author: Emmanuel Goossaert

Six Patterns to Optimize Your Monolithic Codebase

Migrating to microservices isn’t always needed: first, you must fix your monolith.

The tech industry, and software engineers, are wired for the new and the flashy. That’s also why we see dozens of new javascript frameworks getting created every year, the majority of which end up burning into oblivion as they re-enter the Earth’s atmosphere—well, except for jQuery, which somehow keeps surviving.

The same can be said of architecture: almost every time I hear or read someone mention monolithic architecture, there’s almost always a negative connotation associated with it, because it has this feeling of old and outdated.

But simply because monolithic architectures are older doesn’t mean they’re bad, or that they’re less, compared to service-oriented architecture or to serverless.

This reputation comes from the fact that most monolithic architectures end up turning into giant spaghetti monsters of code, difficult to build, deploy, and evolve. I agree with that, that has also been my experience.

What I disagree with is the speed with which many engineers are ready to discard monolithic architectures entirely and switch to something else, say microservices, which they understand even less, instead of trying to fix what’s already there. There’s a lot of hype involved with such pushes, because it entails using new cool frameworks, new programming languages, and so on.

In addition to that, there’s often a lack of understanding from engineers that the decision of choosing an architecture must never depend only on technical considerations. In fact, it should be the other way around: picking an architecture should always be done by putting most weight on what will best serve the business needs and growth of the company over time, and take technical considerations only as a second-order concern.

And before discarding an entire architecture or codebase, one should always strive to fix it with what’s already there.

In this article, I want to share techniques I’ve seen deployed in production and which have helped make monolithic codebases easier to work with. I’ve seen first-hand that they were successful in improving build times and consequently deployment times.

The six patterns for optimizing your monolithic architecture are:

  1. Remove build bottlenecks
  2. Extract frequently updated code areas into their own modules
  3. Clean up unneeded dependencies
  4. Clean up unused code
  5. Enable server-side caching in your CI/CD
  6. Use subviews to mock dependencies

In the rest of this article, I will share more details about those techniques, and how to go about using them

I’ll be using the term “microservices,” as if I’m taking the perspective of a backend system. But this article also applies to frontend applications and to microfrontend architectures. Also, I’m going to stay very generic in my statements, and that’s intentional: I want to focus on the big picture ideas without being specific to a particular language or toolchain.

How to Get Your Silent 1-on-1s Back on Track

During 1-on-1 meetings, I’ve often had a direct report who says “I have nothing to share” or “nothing from my side this week.”

When I was still an inexperienced manager, I would reply “okay great, let’s end the meeting and go back to work then!” However, after more years of running 1-on-1’s with dozens of different personalities, I’ve learned that ending the meeting is always the wrong thing to do.

Over time, I’ve developed a list of questions that I keep readily available in a corner of my mind in case those situations arise, as a way to unblock them and generate more insightful discussions. In this article, I’m sharing my approach.

The Most Important Step Of Every Great Conversation

If you’re like me, chances are you walked into many high-stakes conversations without even realizing what was at stake, and without having either a goal or a game plan on how to achieve that goal.

And then, you walked out without understanding what the heck just happened and why everything turned out so wrong.

Having good conversations is a skill. You need to keep track of all of your interlocutors’ signals including values, beliefs, arguments, body language, logical fallacies, and so on, while keeping track of your own presence and communication.

So if on top of that you realize mid-flight that you didn’t plan exactly what preferred outcome you wanted from the interaction, then it’s game over.

Entering a conversation with a goal can be the deal-breaker that will make the conversation a success for both parties, or a drag and the beginning of a conflict.

Most shortcomings can be avoided by preparing and practicing the art of conversation, and by taking care of the most important step of all.

Making Teams Effective At Remote Work

On my quest to make my teams effective at remote work, I went through a boatload of content. Articles, podcasts, courses, videos, everything that was relevant, I consumed and annotated.

I reviewed 40+ resources about effective remote teams so you don’t have to. Here’s my takeaway.

Unsurprisingly, all the content offered by GitLab is brilliant. They really know what they’re doing, and the quality of what they put out there has been top-notch so far. I also didn’t want to use only them as an example, so I went out of my way to find other companies, and other examples of success to form an opinion that would be as objective and as realistic as possible.

After reviewing 40+ resources, spending hours absorbing and summarizing them, and boring my friends and colleagues about it, I thought I’d put everything into a nice little package to share what I’ve learned with others. This is what his article is.

The article is geared towards managers on how to adapt teams and organizations to become effective at remote work, and not so much on how to be a more productive individual within a remote setup.

If you’re an individual contributor, you will find interesting ideas in this article nonetheless, and also ideas on how to convince your manager to help your team and organization be effective at remote work, so read on!

To create the right environment for organizations and teams to be effective and successful, the topics you must cover are the following:

  1. Be explicit about which ‘remote’ you pick
  2. Set a culture of remote work from the top
  3. Embrace an async-first mentality
  4. Adopt management by objectives
  5. Don’t let individuals choose their WFH days
  6. Recognize the need for meaning and bonding
  7. Organize for physical and mental health recovery
  8. Adapt all the supporting organizational processes

The rest of this article dives into the details for each of those topics, and at the very end, I am sharing all the useful resources which I’ve come across.

Finally, note that this article explores all the main ideas and concepts for effective remote teams and organizations. However, it doesn’t cover how you would plan a transition and then execute this transition. I will cover this aspect in a future article. Join my email list to be notified when it comes out.

The Skills Map of Senior Tech Career Progression

Peter Drucker—the founder of modern management—said in his 1999 article “Managing Oneself” that knowledge workers should plan their second career well ahead of time.

That’s admirable advice.

Except that for the rest of us, planning our first career is already a major life struggle. 

And I can talk at length from my own experience. A little more than ten years ago, back when I was still a naive junior engineer, career progression was a very nebulous concept.

Now that I’m at a point where I’m managing other tech managers, I’ve gained enough perspective on the topic that I can share valuable insights that my younger self would have loved to hear and learn.

In a previous article, I covered why soft skills matter and how they can make your career stagnate if you don’t address them. I also shared what the next job roles are from the senior developer role.

I wanted to create a simple representation to enable anyone with a career in tech to grasp how career progression looks like and what it requires.

In the rest of this article, I’m presenting a skills map of career progression, starting all the way from the senior developer role. This map covers both the individual contributor and managerial career paths.

Unlock Your Soft Skills To Win The Career Game

Have you ever received feedback from your manager that you should improve your communication skills? Or that you should create more visibility for your work? And another one, that you should work on your influencing skills? These are all related to soft skills, and it can be confusing what they mean and how to improve on them.

As a tech manager, I find myself giving that feedback regularly to engineers. About 50% of them get it, however, the other 50% roll their eyes and reply “Soft skills? Pffft, I’m an engineer, I don’t need that. All I gotta do is code harder and learn technologies A and B and I’ll keep on going.”

And that’s where they’re wrong, as sadly, I’ve seen such neglecting of soft skills ending up costing many of them years of stagnation for their tech career. The same could happen to you, or might already be happening to you without you realizing.

I wanted to follow up on my article about career progression for senior developers, by addressing the topic of how to map and learn the skills needed for tech jobs.

Soft skills and teamwork
skills are what’s gluing
hard skills together.

So in this series of three articles, I’ll first be covering what is the difference between hard skills and soft skills, and why soft skills matter even if a great part of your job is purely technical.

Another difficult problem is how to prioritize those skills so you can improve predictably. To address that, in the second article I’ll share a map that I’ve created and which shows how different types of skills relate to different career paths.

Finally, in the third and last article, I’ll cover the top skills you should focus on as a senior engineer or as an engineering manager if you want to see fast progress in your personal growth.

Let’s get started with defining the types of skills and why they matter.

Remote Work Stole Our Foundation

I’ve been thinking a lot about my personal remote work setup lately, and also about the organizational setup that my tech teams are using to work together.

When most of us still worked in collocated office spaces, there were many organizational features that we didn’t even realize were there and that we took for granted.

And it doesn’t matter that the pandemic started more than a year ago. It’s never too late to reflect on what can still be improved, and apply changes for the better.

I distilled it down to the following features.

Becoming a Manager of Managers

After I shared my article about the next career moves as a senior developer, someone asked me the following question over the weekend:

“I’m a senior engineer who recently switched to leading a team of engineers. How do I grow in the managerial career path and become a manager of managers?”

It’s a great question, and not a trivial one. Becoming an engineering manager is often straightforward, but the next step, becoming a manager of managers, ends up being a career blocker for many.

If you’ve been wondering the same thing, then the first step is to look at your current workplace by addressing the following questions:

  1. Did you see any colleagues becoming a manager of managers via an internal process over the past year?
  2. What type of projects did these colleagues work on, with who, and in which department? Can this be reproduced?
  3. Is your department or a nearby department growing, and will a position of manager of managers open soon?
  4. Do you see yourself staying at your current company for the coming two to three years?

If you could answer YES to all of the above, it means there is a chance you could grow internally. From there, you have to start planning to position yourself so you get the job when it opens.

If you answered NO to any of the above, then you’re in the wrong company, and it’s time to plan a move. Selecting the right next job and company, so it’s aligned with your career aspirations, is going to be a crucial step.

In this article, I’ll be diving into both cases by providing a guide on how you can plan this career move, and if you’re lucky enough to get a shot at it, how to handle your transition into your new role.

In addition, as I’ve run dozens of leadership interviews and selection processes, and as a manager of managers myself, I’ll be sharing insider information on how managers will evaluate you and will decide whether you get the job or not.

Career Growth: What Paths After Senior Engineer

“I don’t know what’s next in my career” is a sentence I hear frequently from senior engineers.

In fact, I hear this question so frequently that I decided to write this series of articles to address it.

When I ask those senior engineers how they have approached their career planning until now, what I hear is “I thought if I just worked harder and wrote more code, eventually someone would notice and I’d get promoted to staff engineer.” 

Unfortunately for so many senior developers, this type of thinking is a major misconception on so many levels. Just writing more code isn’t going to get anyone promoted. Just waiting to be noticed isn’t going to get anyone promoted. Also, there is more than just the individual contributor or managerial path as possible career paths for engineers. And finally, getting promoted—like other forms of external validation—shouldn’t be the ultimate goal in anyone’s career, because it’s not fulfilling.

In this article, I am making a recap of the most realistic career moves from the senior engineer position. I’m dividing the possible moves into the four categories from the diagram. For each category, I will cover what it’s all about what it would require to get there.