Split Your Overwhelmed Teams
queue.acm.org
queue.acm.org
I would not even wait for problems to emerge. Just split big teams on principle. Minimum size of 3. Maximum size of 7. One eight person team then becomes two teams of 3,4,or 5 people. Make sure each team has a tech lead that knows what they are doing.
Don't over-staff teams with managers/minders/scrum masters/whatever label you slap on junior management. This causes a big problem: managers like to hoard people to inflate their importance. You deflate their team and you deflate their ego and they'll be forever whining to "fix it" with more "resources".
Simple solution: give them more than 1 team to manage and direct them to keep their teams small. Now they count teams instead of people. Or teams and people. And you can measure their success as a function of how well their teams are performing.
Then if those teams get overloaded, you have a conversation about which new teams are going to be needed and who is going to manage them. Any new team should be bootstrapped with mostly existing people: you move people around and promote them. New people start out in existing teams. This accomplishes two important things: people have a perspective of getting promoted sideways and new people learn the ropes in a small well functioning team rather than being dumped in an overstretched team.
When during a job interview they ask me what was the size of my team, I invariably say something between 2 and 5, and comment that a larger team cannot be efficient. At least, in my practice a larger team was never efficient as a team, and I helped split teams as they grew past this threshold.
3 is risky. One person has a baby and goes on leave, or gets long Covid, or is poached by a FAANG. Until a substitute can be found, the team of 3 turns into a rather overwhelmed team of 2, each spending 50% time on call. And if either of them goes on vacation to recharge, the remaining one is left with an unbearable workload.
We have 33-50% on call and noone complains because not a lot is happening.
You certainly want more than one of those teams to be able to support each piece of your software. You also want to be able to move people quickly from a team to a close one, so from the training point of view you also want them to know both codebases.
If you draw a dot for each member of a team and then a line from each dot to each other dot, you can see the "lines of communication".
With 3 members, there are 3 lines of communication (loc)
4 members, 6 loc
6 members, 15 loc
10 members, 45 loc
14 members, 91 loc
Communication breaks down as more people are involved.
https://en.wikipedia.org/wiki/Metcalfe%27s_law
As you get more and more lines of communication you end up having to break them and create a hierarchy.
This is the same as the number of undirected edges in a N clique graph with no self edges.
Shared on-call is a section I strongly disagree with. Shared on-call erodes the very same boundaries that provided value in the first place. You could say it's a lesser and necessary evil, but you should at least be open about it.
Procedure book is a naive "sounds good, doesn't work" solution. Why don't you "solve" the on-call problem completely by outsourcing it to a $15/hour worker if you have these amazing playbooks?
This approach naturally leads to bloated playbooks. It's very similar to trying to solve all of the architectural issues by "writing good documentation". Never works.
On-call is typically a company-wide policy, and those are at odds with smaller independent teams.
The right answer is giving those teams more independence: they figure out how to solve their on-call themselves. Maybe playbooks is the answer for them. Or they have people who are still online after work hours and they don't mind being semi-oncall. Or maybe all their issues are not critical and 24/7 on-call is not necessary.
Smaller teams benefit from independence, don't ruin it via company-wide policies.
It's like the s shaped progression, but it constantly reset as I switched to the next thing.
Compared to just doing 1-2 things. Was always amazed at the cool new things I learnt and implemented.
- Quantify and measure the overwhelmedness and productivity of the teams.
- Time spent on where you’d like to get to within the next 1-3-5 years with the teams and the services they vend out is time well spent.
- Evangelize the re-organizational plan to stakeholders and leadership and hopefully they are onboard and can provide air cover while teams lose velocity during the change.
- There will be bumps along the way but coming back to being able to quantify and re-measure overwhelmedness and productivity of the teams will help define success or not.
And because two means if there is a reason one person isn't around loses the benefits two people gives you then I'd argue three is the minimum size you should aim for.
A team of one has zero coordination overhead.
A team of one also cannot have multiple experts gathering to solve a particular problem, where their combined set of expert knowledge matches the problem best. The one person must be a jack of all trades, and necessary a master of only a few, due to humans' limited lifespan.
(I'd say it's a bit like a multi-threaded program: very often one thread is not enough, but only a few threads can do varied but coordinated tasks. Massive multiprocessing only works when coordination between peer threads is not required, and usually they do the same embarrassingly parallelizable thing anyway.)
For business critical things, you generally want 3 guys who can replace each other competently. Three, because one is none if the one guy gets sick, and two is also one if the other is on vacation and thus none.
Proof by induction that it's not worth having anybody work on anything. Three is two if one is on jury duty, and two is none as shown.
Five people need a lead that keeps track of everything, maintains the goal and resolves conflicts. Of course, two leads are always better than one because they can discuss ideas..
A lot of the inefficiencies of bigger companies come from the redundant people needed to fill out the bus factor. Having a DBA on hand for emergencies might be overkill for a startup, but when you have revenue of 100 million per day depending on the database always being up it is much cheaper to have a spare person sitting around (even if they're not doing much most of the time).
From what I have seen single person can deliver more and quicker than 2-5 people and having to seek approval from their peers keeps quality in check too.
Also, they can't ever switch jobs.
I think the issue is that first people introduce 24/7 on-call, then they split into teams and this policy no longer makes sense, but noone has the balls to roll it back because it's optics are bad. But you should.
I didn't have the word-count to go into this (that could be the topic of an entire book... or at least a chapter of The Practice of Cloud System Administration [https://the-cloud-book.com/]).
That said, my personal rule of thumb is: 6 is the minimum for an oncall roster; 5 if there is another team doing follow-the-sun coverage. YMMV of course.
Tom