Tech leads, software architects and engineering managers - oh my!software engineering
The line between a technical lead and architect (and product manager and engineering manager) is fuzzy and subjective. The best articulation of difference I’ve found is below copied from Quora. In this classification I like to run a team small enough that I have time to be both an engineering manager and software architect.
The four software leadership roles
A software organization needs to fill 4 leadership roles. These roles are often “physically implemented” by various degrees in different team members.
The tech lead: The person who leads the team that actually builds it.
The architect: The person who translates a ideas that a product manager wants into ideas that can be implemented.
The product manager: The person who figures out what to build to satisfy customers.
The engineering manager: The person who makes sure the organization is getting the most out of the team and filling any gaps.
The Tech Lead vs the Architect
The architect’s primary value is they design a cohesively implementable system in the face of many competing demands.
They focus on the big picture, and a large part of their job is to both have and drive the vision of what needs to be done.
The tech lead’s primary value is ensuring that things get built with high quality on time.
They focus on delivering projects, and a large part of their job is executing and overseeing the planning, design, and implementation of the project.
The 3 skills
The lead engineer needs to be highly detail oriented, has to be able to write high quality code, review the code of engineers and is in general ultimately responsible for shipping code. They spend part of their time coding, and the rest of their time guiding other engineers to write code.
An architect, on a day to day basis, will typically neither write or debug code. However, they must have an intimate understanding of software to do their job. Having an architect who isn’t technically strong will result in sub optimal solutions which will result in a loss of trust from the engineers working on the implementation.
Both architects and tech leads lead, though in slightly different ways.
The lead engineer leads by inspiring and setting the bar for code quality for the engineering team, and cracking the hard problems.
The architect leads by building consensus, particularly in the face of competing design requirements. It is typically up to the architect to make good solid judgment calls around figuring out things like “Okay, these 4 code paths are really the ones to typically optimize around and must run in constant time, and everything else isn’t something we need to worry about too much.”, and so on.
In general the architect needs to be an excellent communicator given their primary role of bringing otherwise sound though perhaps disjoint ideas together. The same isn’t necessarily true of lead engineers. You can be a relatively good lead engineer despite having average communication skills.
At the end of the day what really matters is the architect and tech lead are technically sound and work on tasks that they are good at. I’ve seen individuals who are exceptionally good at one role who would be underutilized in the other role.
Many organizations don’t formalize the distinction between tech lead and architect through title and let the individuals gravitate towards what they do best.
I’ve also seen engineering managers take on all of the aforementioned roles depending on the gaps in the team.
The hard to handle cases
(Thanks to my wise colleagues for bringing up these questions, looking forward to getting folks opinions on the answers)
- People are filling the same role, and keep stepping on each others toes
- People think they are filling a role but they are not, or can not
- The power imbalance between manager and other roles due to positional authority.