Should Software Engineering Managers Code?
Ah, that age old question. When you Google it, you’ll see a range of answers from yes, to no, to it depends.
So with the hodgepodge of answers all over the web, why is there a need for another one like this? It’s because addressing the question requires one to first unpack a foggy definition often thrown around in the tech organization: the role of the Engineering Manager.
This of course can only be addressed if one first understands enough of the role that comes before it: the Staff Software Engineer.
The Staff Software Engineer
What is a Staff Software Engineer? While the origin of the role is unclear, the definition is fairly consistent: it’s the level above Senior Software Engineer.¹ A staff engineer is able to handle a wide range of problems under his domain of expertise (and sometimes beyond it) with minimal supervision and details. All the Engineering Manager has to do is to give the Staff Engineer a vague direction and he can piece the puzzle together with his line of questioning, his own fact finding process, and everything else in between. Unlike the Senior Engineer who knows the ins and outs of his platform, the Staff Engineer goes one meta higher and thinks about the contextual framework by which the problem is posited.
The Staff Engineer is therefore often the Tech Lead, a role also often circulated in the industry.² From there, the Staff Engineer can progress into various roles.
Beyond Staff Engineer
The staff engineer can become one of these as he progress:
- A Senior Staff Engineer. When the engineer goes this route, he is likely to end up in a primarily IC path. A Senior Staff can either be focused on a very specific niche or play the role of an architect, both of which has little to no direct reports.³
- An Engineering Manager (EM). The primary responsibility of the engineering manager is in his job title: managing engineers. Unlike the tech lead, which is primarily concerned with leading the team around a specific technology (yes it’s in the job title), the northstar of the manager is to ensure that the team is executing in the highest productivity possible. More on this later.
- A Tech Lead Manager (TLM). In certain organizational structure, especially one that is “halfway there”, the Staff Engineer becomes both the tech lead and the engineering manager. This role must be eventually split into two as the company scales because the mental capacity required to do both gets cognitively infeasible over time. This is because the TLM needs to sustain his learning on both the tech (which usually moves really fast) and also develop his people management skills (which are usually learned on the job). Staying too long as a TLM forces him to become at best, average on both. A more likely scenario is that the TLM will sacrifice one in favor of the other. Either way, the company suffers and so does the engineer.
The primary responsibility of the engineering manager is in his job title: managing engineers.
The Coding to Management Scale
One of the best way to see the balance between coding⁴ and management is that they are at the two ends of the scale. This is because being an expert on both verticals is cognitively infeasible. It is therefore a myth that the Software Engineer career track is only forked between an IC (Individual Contributor) and a People Management track. In reality it’s an optimality condition, not a boolean state, as what you’ll see below.
- A Software Engineer does 100% coding and 0% management.
- A Senior Software Engineer may do around 5% of management, which leaves 95% for coding.
- A Staff Engineer may end up doing 15% management and 85% coding. He can also be a Tech Lead which does around 60% coding and 40% management. Other Staff Engineers stay at 0–5% management work and the rest is in coding.
- A TLM does 25% coding and 75% management.
- An EM does 100% management and needs to code only to fill in the gaps. (For example, debugging a production issue when his staff is on leave)
So, Does My Company Need a Tech Lead Manager or an Engineering Manager?
Good question. Most companies conflate the TLM and the EM role, to no one’s fault. Until recently, not much analyses is done to nuance this seeming anomaly. If the company is looking for a manager who codes, it’s actually trying to fill the role of a TLM, not an EM. A quick survey of engineering manager job posting shows that most companies actually require the EM to code while managing a team of eight. I submit that any organization with such a requirement is asking for sub-optimal performance. Here’s the key. If you really need the manager to code, look for a Tech Lead Manager. If coding is a good to have, look for an Engineering Manager. However, do not let the TLM handle more than four reports. Anything more than that, get an EM and assign someone internally to be the tech lead.
Now one might argue about the condition by which the manager can win the respect of his direct reports. This is often the reason why EMs are interviewed and “required to code” as part of the job description. In this situation, interview them for problem solving skills, debugging, and framing the problem statements correctly, including edge cases. This is what the EMs do. The only time they need to dive into the code itself is if the direct report needs to bounce idea with the EM, resolve a high priority production issue when the direct report(s) are not available, or addressing a question by another department when the EM wants to protect the IC’s time.
The Path to Director of Engineering (DirE)
The path to DirE is only through the EM route. A TLM has to become an EM before he can become a DirE. Of course, various companies shortcut this process, often to their peril. A Director of Engineering, like the EM, should not code as a rule of thumb. The job description of a DirE is exactly in its title: to set the direction of engineering. He is the one who puts various engineering managers together and charts the course.
A DirE should come from a perspective of an EM who for a time, has been thinking about not just putting people in the right role but also how to enable them to be more productive by opening up new windows of resource optimization. In other words, the EM must see himself evolving from ensuring productivity by managing the team to multiplying productivity by charting the course. An EM who still codes is not afforded the mental real estate to think strategically.
Should An Engineering Manager Code Then?
Again, no they should not. If the organization think they should, the organization is actually looking for a TLM, not an EM. Only when the person stops coding does he become an EM. Clearing up this cloud of confusion helps the industry understand which is which. The long term value of this is to ensure we’re putting the right people in the right position (and of course, advertising the right job openings).
Here’s one final tip. If you are a new EM, do not overestimate your management skills. Everyone is susceptible to the Dunning-Kruger effect.
Happy leading!
If you enjoyed this article, I’d be happy to connect with you on LinkedIn. I also run a non-profit organization called Big O(n) Development.
___
¹ While an entire book has recently been written about it, its exact definition will also continue to be debated in the years to come. I must note that the book’s range of Staff Engineer roles differ from mine. Since everyone is a protagonist of his own story… you know how things go from there. 😄
² Although of course, the staff engineer can also play the architect role, which is different from a tech lead.
³ By little, I mean two or less.
⁴ By coding I am subsuming coding related activities such as attending meetings, debugging production issues, and so forth.