Hey, Luca here! This is a new article from our brand new guest author program, where some of the best engineering writers in the world contribute to Refactoring with original pieces!
Todayโs article is from Charity Majors, CTO of Honeycomb, and one of my favorite authors! Also check out her blog and her books.
With Charity we are going through what it means to create 10x engineering teams, and why this is a better strategy than fixating over 10x engineers.
Here is the agenda:
๐ The problem with 10x engineers โ why this concept is slippery and problematic.
๐งโโ๏ธ In praise of โnormalโ engineers โ the best engineering orgs are the ones where 1x engineers can do great work.
๐ฝ Turning normal engineers into 10x teams โ how to create top-performing teams that mint 10x engineers like nobody's business.
๐ Hiring the right people instead of the best โ how to focus on our individual strengths, instead of our lack of weaknesses.
Letโs dive in!
Most of us have encountered a few engineers who seem practically magician-like, a class apart from the rest of us in their ability to reason about complex mental models, leap to non-obvious yet elegant solutions, or emit waves of high quality code at unreal velocity.
I have run into a number of these incredible beings over the course of my career.
I think this is what explains the curious durability of the 10x engineer meme. It may be based on flimsy, shoddy research, and the claims people have made to defend it have often been risible (e.g. โ10x engineers have dark backgrounds, are rarely seen doing UI work, are poor mentors and interviewersโ), or blatantly double down on stereotypes (โwe look for young dudes in hoodies that remind us of Mark Zuckerbergโ). But damn if it doesnโt resonate with experience. It just feels true.
The problem is not the idea that there are engineers who are 10x as productive as other engineers. I donโt have a problem with this statement; in fact, that much seems self-evidently true. The problems I do have are twofold:
๐ Measuring productivity is fraught and imperfect
๐ฝ Engineers donโt own software โ teams own software
Letโs look at both:
๐ Measuring productivity is fraught and imperfect
First: how are you measuring productivity? I have a problem with the implication that there is One True Metric of productivity that you can standardize and sort people by.
Consider, for a moment, the sheer combinatorial magnitude of the skills and experiences at play:
Are you working on microprocessors, IoT, database internals, web services, user experience, mobile apps, embedded systems, cryptography, gen AIโฆ what?
Are you using GoLang, Python, COBOL, Lisp, React, or Brainfuck? What version, which libraries, which frameworks?
What adjacent skills, market segments, or product subject matter expertise are you drawing uponโฆdesign, security, data viz, marketing, finance, etc?
What stage of development? What scale of usage? What matters most โ prototyping rapidly to find product-market fit, or writing code that is maintainable and performant over many years?
Also: people and their skills and abilities are not static. At one point, I was a pretty good DBRE (I even co-wrote the book on it). Maybe I was even a 10x DB engineer then, but certainly not now. I havenโt debugged a query plan in years.
โ10x engineerโ makes it sound like 10x productivity is an immutable characteristic of a person.
โ10x engineerโ makes it sound like 10x productivity is an immutable characteristic of a person โ but someone who is a 10x engineer in a particular skill set is still going to have infinitely more areas where they are normal or average (or less).
I know a lot of world class engineers, but Iโve never met anyone who is 10x better than everyone else across the board, in every situation.
๐ฝ Engineers donโt own software โ teams own software
Second, and even more importantly: so what? It doesnโt matter.
Individual engineers donโt own software, teams own software. It doesnโt matter how fast an individual engineer can write software, what matters is how fast the team can collectively write, test, review, ship, maintain, refactor, extend, architect, and revise the software that they own.
The smallest unit of software ownership and delivery is the engineering team.
Everyone uses the same software delivery pipeline. If it takes the slowest engineer at your company five hours to ship a single line of code, itโs going to take the fastest engineer at your company five hours to ship a single line of code. The time spent writing code is typically dwarfed by the time spent on every other part of the software development lifecycle.
If you have services or software components that are owned by a single engineer, that person is a single point of failure.
Iโm not saying this should never happen. Itโs quite normal at startups to have individuals owning software, because the biggest existential risk that you face is not moving fast enough, not finding product market fit, and going out of business. But as you start to grow up as a company, as users start to demand more from you, and you start planning for the survival of the company to extend years into the futureโฆ ownership needs to get handed over to a team. Individual engineers get sick, go on vacation, and leave the company, and the business has got to be resilient to that.
If teams own software, then the key job of any engineering leader is to craft high-performing engineering teams. If you must 10x something, 10x this.
Build 10x engineering teams.
Which leads to my next point ๐
๐โโ๏ธ Make normal engineers do great work
When people talk about world-class engineering orgs, they often have in mind teams that are top-heavy with staff and principal engineers, or recruiting heavily from the ranks of ex-FAANG employees or top universities.
But I would argue that a truly great engineering org is one where you don't HAVE to be one of the โbestโ or most pedigreed engineers in the world to get shit done and have a lot of impact on the business.
I think itโs actually the other way around.
A truly great engineering organization is one where perfectly normal, workaday software engineers, with decent software engineering skills and an ordinary amount of expertise, can consistently move fast, ship code, respond to users, understand the systems they've built, and move the business forward a little bit more, day by day, week by week.
Any asshole can build an org where the most experienced, brilliant engineers in the world can build product and make progress. That is not hard. And putting all the spotlight on individual ability has a way of letting your leaders off the hook for doing their jobs.
The best engineering orgs are the ones where normal engineers can do great work
It is a huge competitive advantage if you can build sociotechnical systems where less experienced engineers can convert their effort and energy into product and business momentum.
A truly great engineering org also happens to be one that mints world-class software engineers. But weโre getting ahead of ourselves, here.
๐โโ๏ธ Letโs talk about โnormalโ for a moment
A lot of technical people got really attached to our identities as smart kids.