It is often said that a 10x engineer is as productive as an entire team of engineers, but for the 100x engineer, 10x is only a small fraction of their full power. These freakishly productive individuals are more powerful than an entire _army_ of engineers. Think one coder, one Macbook, and more engineering capability than the entire staffs of Google, Facebook, and Amazon combined. Much, much more.
Now, you might be thinking "What--100x?! There's no way that can be right! Can it?" but you would be wrong. I have seen the power and capability of these 100x engineers. I have trained alongside them in the Hyperbolic Engineering Chamber, where an hour of engineering work is squeezed into every second that passes. Those who survive this mentally taxing and severely dangerous process transcend all known levels of engineering to attain the fabled Super Engineer Level 3 Ultimate.
If you work for Google, Amazon, or Facebook you should be very afraid. Because the 100x engineers are coming for your jerbs!
But in all seriousness, there is a wide range of productivity levels. That includes some people who even have negative productivity. Ever been unfortunate enough to be on a team with one of those sorts?
The "best" engineers are constantly on greenfield projects. They are quite talented, but they have it easier in a lot of ways.
- Working on projects with the most perceived value, so they have strong reasons to be motivated by their work.
- Using the newest technologies, so they don't get bogged down in technical debt. This can also be motivating for engineers.
- They have more autonomy because the product hasn't built any bureaucracy around it yet.
Most engineers hired in the past few years are maintaining the projects those engineers created 2 or 3 years ago.
The projects are never documented well. Technologies haven't been upgraded, so versions are out of date. Tooling was poorer years ago, so engineers have to fight that. Needs of the products have shifted and architecture hasn't. Refactoring is always on the back burner, so the problems persist and multiply as new features forced in.
The people who got to build the original projects years ago keep looking better as they build new projects today. Everyone hired since is mired in trying to keep the product running while adding new features. The result is a growing gap between the "good" engineers and the "bad" engineers.
The worst part of it is that if you point any of this out, you're essentially calling out the "best" engineers in the company.
As far as I'm concerned, a big part of my job is fighting my urge to do just that, and try to write code in a way that my coworkers appear to have a better time understanding.
It’s understated and I think it’s the most important thing any developer should have. I personally don’t care about any other trait other than that at this point in my career.
I love to see it, and inspires me to up my developer altruism game. I’d love to see more interviews where people just hand someone not-so-perfect code and have them describe what could go through the mind of a variety of team members as they read it, and what could have gone through the mind of the person that wrote it, and finally what is forgivable.
Then if you can figure out that it's all 'our code', you can work from there.
Also, your preferred libraries, and the level of abstraction you are most comfortable with.
Often, when I read code written by "green fielders", I question their competence, and question myself why I'm still working at this place. I admit this says more about my ignorance than anything else. I'm just saying what I feel at the moment.
All projects that I have been part of in my current company don't have automated tests (at least initially before I joined). Instead we rely on QA. Since I read a lot about things like DDD / well architected code I often dream working on a codebase where implementing features and fixing bugs isn't frustrating and deploying to production isn't nerve wracking.
Since the first step of refactoring is to have tests, in my first project I endeavoured to have unit/integration/e2e tests. They're a bit subpar for my taste, and can be a bit slow to run at times. However, these tests allowed me to sleep better at night after each deployment.
In the last few days, since joining a new (EDIT: non-greenfield, as a maintainer) project, all I've done is write unit/integration tests. (EDIT: I'm writing unit tests to what I currently consider very sloppy code, e.g., not using dependency injection, leaky abstractions like calling request() inside a model class (project uses laravel framework))
I like to think that what I have done and what I'm doing right now will enable me to write better architected code. As an extremely simple example, I find it harder to test `new FooClass` than its dependency injected counterpart. I hope I'll remember that next time I write code.
On the rare occasions when I start on the green field, logging and unit tests are literally the first things I set up. It only takes a moment, and the time investment is paid back the first moment you investigate a bug.
Doesn't mean I do unit tests religiously, but at least I do them sometimes.
I agree that maintenance work is more likely to be instructive in creating well architected code. It has been a joy when it's possible to take a poorly build module, write tests, and refactor it into something simpler and more effective.
What's so good about newest technologies?
Every single time I tried to use them, I had to waste lots of time reporting and working around bugs in these technologies, and bugs in the surrounding ecosystem triggered by these technologies.
Generally, I prefer technologies at least 1-2 years old.
In other words, new projects don't start with any dependencies on tools that are no longer considered the best for the job at hand.
The best technologies can be chosen, new or old.
The ones working on greenfield projects have been the ones used as the bar to measure other engineers by, in my experience. This works both to glorify the greenfield engineers and hold back the engineers stuck in maintenance.
Motivation is very personal. Some people are motivated in everything they do. A lot of engineers are motivated by working on high quality code or new technologies. Others are motivated by perceived fairness in how work and rewards are assigned.
For those latter two sets of people, being stuck in maintenance and having greenfield engineers used as examples of how to be better can be demotivating.
This doesn't prevent them from keeping up with the latest stuff either BTW.
I have worked with some extremely productive software engineers. They tended to know the domain and codebase they were working in well, worked long hours and had either the enthusiasm, motivation or mental practice to maintain focus, and I believe those factors explained the majority of their advantage, which was large but not superhuman.
But like the author of this article, I've also seen a lot of situations where an apparently huge multiplier was best explained in some other way. For example, some apparently 10x engineers were only so because they were allowed to only work on interesting, relatively easy early stage work. The difficult, fiddly work of mopping up the awkward corners was left to other engineers, who were considered 'slow'.
Incidentally a lot of people will be a lot more productive if you let them work on only projects that interest them. I know some people who were considered 'problem' engineers because they spent most of their time doing stuff other than what they were asked to do, but they made a lot of interesting and useful stuff and with only a slight change in perspective or luck, they could have been considered 10x developers.
For maximum impact, having the wisdom and opportunity to work on the right thing is much more important than working 10x as hard.
I am someone who loves mopping up the awkward corner cases. For me, this is the most fun part of coding. I think the early design and infrastructure work is actually pretty challenging work. The decisions made at this stage pay dividends later on, in ease of debugging, api goodness, future expendability, etc. I prefer collaborating with senior engineers who are strong and relatively fast with that, and then I help clean-up to facilitate their speed. If everyone is on-board, I am not sure what is wrong with this arrangement.
I think that insufficient attention is paid in hiring to building a team of people whose interests compliment each other.
The situation you describe is fantastic. Problems would arise only if you and the senior were compared on speed for what are actually two very different kinds of work.
I have seen people happy when the database guy was allowed to design the database, the back-end guy was allowed to write back end, the front-end guy was allowed to write front end, and the CSS guy wrote the CSS. Then management intervened and said no, the highest priority task must be done immediately, by the first person available. Afterwards both the happiness levels and the code quality returned to the mean.
This is interesting to me. Of course from a business perspective you want to prefer developers who are willing to put in big amounts of OT.
But when it comes to judging their productivity, is it really fair to compare them to your devs who don't put in OT? As far as their performance review, maybe sure. As far as their actual skill and effectiveness? It seems unreasonable.
A dev dev who works twice as much as an average dev is not suddenly equivalent to an average dev because the work they are producing is probably not that great.
I've also seen multiple times when '10x' engineers did a crazy hack working late into the night, which was lauded by managers, but actually had to be entirely rewritten over much longer by less lauded engineers.
Lack of sleep probably impedes coding ability as much as alcohol (and that's another factor I've seen create big chunks of code that needed to be rewritten).
There are some truly remarkable people in this line of work and there exist 10x engineers that are just extremely smart, extremely hardworking, and it doesn't come at the expense of others. You'll recognize it when you see it -- if you're lucky enough. I feel blessed to have run into 10x people, because I really needed to be humbled. You have to work hard.
The one implied aspect of the 10x engineer that the article doesn’t address explicitly is productivity. I sincerely believe most 10x engineers arise from a situation where they wrote all of the initial code. This is an advantage that can make it difficult for any other engineer to appear within reach of the ‘10x’ engineer, especially if the initial architecture was convoluted.
These ‘10x’ engineers usually compensate by being highly available and protective of the architecture. How the latter manifests (guardianship of the codebase) can be related to where they are on the anti-social spectrum. Hiring juniors that can’t assess the true nature of the codebase is common.
To the article’s point, some of the symptoms the ‘10x’ engineers exhibit are negative. The question is, why? The root cause of it simply can’t be ‘secret genius that has character flaws, like all other secret geniuses’ - that’s a caricature. I would hammer home that the symptoms are by-products of a process that allowed such a situation to occur.
Word to the wise, don’t create a ‘10x’ engineer in your company by propping them up and giving full ownership, and consequently, the subsequent task of maintaining the defense of the shoddy situation. It’s unhealthy for everyone involved.
Refactoring is a retention program for engineers that provides almost no customer value.
Engineers might not have any say on features that the product manager wants but impacts performance negatively.
Et tu, scrumfall.
Simply beating up your entire team and hospitalizing them and boasting about your superior productivity compared to them won't make you a 10x'er even if it makes you relatively productive.
I do think there is a lot of skill variance in developers. If we consider the theoretical best developer in the world vs the average developer, do you think there would be a truly 10x productivity difference?
Maybe from the theoretical best developer in the world to the theoretical worst, but that's kind of a silly and useless comparison anyways.
Call me biased, but I don't believe the average developer is very good.
That lead to a couple awkward situations where I discovered the adoration of what were even obviously poor behaviors such as treating other devs poorly ... was sadly serious.
You don't see people talking about 10x doctors, 10x engineers or 10x musicians.