visit
Before I founded
Knowing when to scale is half the battle. Typically, a team will begin to feel shorthanded as the software’s complexity rises and it takes longer to make changes. With a bigger team, you can split the work between smaller units that handle different parts of the project and work in tandem to improve application delivery.
While leaders are under pressure to hire more engineers to get more done, this tack can backfire. You might end up with a bigger, busier team who is actually not producing more of the results the business needs.
This is because delivery velocity does not grow linearly as you expand your team. In many cases, larger teams may move more slowly than smaller ones, or as
points out:
It takes one woman nine months to make a baby, but you can’t make nine women make a baby in one month.
Think about how many parallel tracks you really have for your developers. Two devs can’t work on the exact same line of code (unless they’re pairing), so when you expand your team, you have to factor in the loss in productivity that comes when more people need to communicate to complete the project.
The first way is to
The
There are a few different ways to structure teams and responsibilities. One is, of course, to let them specialize in a domain. This is very useful for areas like security, infrastructure, data warehousing, and other shared services which are necessary across teams.
For your business-critical initiatives, consider a more cross-functional setup. Jimmy Paul, Co-Founder at
An emphasis on product management and user benefit makes your teams self-sufficient while naturally ensuring everyone in your company is pulling together and pulling in the right direction.
Griffin Caprio, Founder at
According to Josh Holat, CTO, team members at ____use a range of documentation to stay aligned:
“One way to help other engineers is creating READMEs within the codebase itself to outline how to get up and running with it. High-level overviews of the data model or business logic in a system like is also helpful. We make heavy use of RFCs when building larger features. This can serve as a self-documenting write-up for other engineers.”
As backend teams grow, it gets harder and harder to keep documentation up to date and maintain communication pathways between teams. It helps to use third-party tools to automate some of this.
When someone new joins your team, there are two ways to keep them on track. Option one is documentation, but even with extensive documentation, something will inevitably go wrong. A bunch of different people are likely working on the code, so there are bound to be discrepancies. The only surefire way to catch these discrepancies is through
Initially, the cost of maintaining code with manual tests or no tests is a lot lower than that of writing automated tests. However, as the diagram below illustrates, it soon becomes prohibitively expensive to scale your application without automated testing.
The big thing to think about with hiring software engineers is their existing skills and how they want to grow. For example, if your backend is written in PHP, a diehard Ruby engineer is probably not a good fit for you. You want somebody who wants to work in the language and framework that you’re using.
Beyond that, all the basics for organizational hiring such as culture fit and value-alignment matter. This is good to keep in mind especially if your teams are amalgams of developers and non-developers who need to work together. New hires will need to — should want to — communicate effectively with non-technical people.
This tends to be one of the biggest
But, only do this when there are willing and viable candidates available. I’ve made the mistake of taking a great individual contributor and putting them into a management role only to lose the employee when they realized leadership wasn’t a good fit.
When scaling from one to many teams, it’s easy to overlook the complexity this adds to your communication and deployment workflows. As you’re growing, look for ways to improve collaboration and measure velocity changes across your teams.
“Teams have a tendency to throw new technologies at problems that are actually focus and communication issues. As a result, they get mired in rewriting/reinventing/rehashing solutions to known problems in different, often immature, technologies. Bottlenecks are typically the biggest slow downs in terms of independent contributions and a lot of that comes from tribal knowledge.”
There’s a lot of merit in using simpler technologies for improved teamwork. This is a big reason why shared codebases, for instance, are making such a comeback.
Valentin Vasilyev, Co-Founder at
“We like to break down the application into services, but store the code as a monorepo to reuse code and move faster. Each team runs a service that plugs into a common event stream. Shared, cross-cutting responsibilities are maintained by the team that is considered to be the most skilled or mature, because they own parts of the monorepo that will be reused by all teams.”
One of the biggest problems you’ll face while scaling a backend organization is that you likely have to work in systems that weren’t designed to accommodate multiple teams. Future-proofing is nearly impossible.
For instance, if your application is designed so that the codebases for your user profiles and shopping carts are tightly-coupled, a change in one will likely impact the other. This means that every time a team changes something with the shopping cart, the team handling the user base would have to make a corresponding change to their code to prevent merge conflicts down the line.
This limits productivity and defeats the whole purpose of having multiple teams. Well-planned systems that allow teams to work independently and reduce the need for cross-collaboration are key to successful scaling.
My advice is to spend time planning for the future early in your development journey. While slightly less “agile,” I’ve found that having a long-term architectural vision can help make choices clearer and prevent corner-cutting that leads to poorly decoupled code.
At its heart, scaling a team — any team — is about matching skills to problems. Sometimes the challenge is finding engineers with skills to solve the problems you have, and other times, the challenge is figuring out what your most pressing engineering problems really are.
If you’ve found these insights useful or have some of your own you’d like to share, I’d love to hear from you. Leave a comment below or
Photo by on