Hacker News new | past | comments | ask | show | jobs | submit login
I was a 10x engineer and I’m sorry (networkingnerd.net)
179 points by zdw on July 18, 2019 | hide | past | favorite | 186 comments



I'm not sure I understand why people are so eager to conflate the term "10x engineer" with "an arrogant engineer who is only seemingly productive because of either obfuscation or generation of technical debt".

It seems blindingly obvious that there are people out there who are just... dramatically more effective programmers, in a holistic net-value-to-organization/world sense. Fabrice Bellard and John Carmack, to name two that jump to mind.

And while I've definitely never worked with programmers of their caliber, I have worked with people who truly were an order of magnitude more productive than me, either in sheer quantity of quality output or by dint of their efficacy at creating tooling/abstractions/apis that made other programmers more effective.


There is also a very thin difference between “technical debt” and “genius programmer”. If I invented half the programming concepts Carmack did and wrote it at the company I work for, it would be considered technical debt immediately. No one else would be able to understand it and no one would be able to fix it when it broke. But for various reasons (mostly since Carmack is actually a programming genius), people stopped what they were doing to learn from him and adopt some of his techniques. Fast inverse square root is genius but it would just be way-too-clever technical debt if Carmack hadn’t written it and others didn’t learn from him.

No one would take the time to learn from my way-too-clever code. They’d throw it away for more obvious code in a heartbeat. Because I’m not famous, I don’t work with other geniuses, and of course I’m not a genius so my way-too-clever code would just be annoying and uncharacteristic.


"Fast inverse square root is genius but it would just be way-too-clever technical debt if Carmack hadn’t written it and others didn’t learn from him."

I think the difference here is that Carmack was working in a space where fast inverse square root was the difference between the program working and it not working. At that point, it doesn't really how matter "clever" in any bad sense of the term the code is.

Carmack works in 3D engines, which even today is a space where people are trying to wring every last cycle out of them. It's perfectly appropriate when programming in a space where every last cycle counts to program as if you're in a space where every last cycle counts.

I don't work in such a space, so I don't program that way. But while I haven't got anything as "clever" as FISR, I have got some things like non-obvious database schemas for certain performance reasons that if my successors don't find and read the comments I've left about why the schemas are that way, they could well get themselves into some trouble if they try to "fix" it.


> was working in a space where fast inverse square root was the difference between the program working and it not working

Pentium 3 released in January 1999. That CPU, along with all newer ones, support SSE which has RSQRTPS instruction, faster, also much more precise approximation.

AMD had it before, PFRSQIT1 / PFRCPIT2 in 3DNow from 1998.

Quake 3 Arena released in December 1999. The point of using that approximation is running on older hardware, like Pentium and Pentium 2.


So, basically a difference between the program working and not working for most users.


agreed, you still see clever c hacks today in the embedded world, because resources are still constrained for many devices


> Fast inverse square root is genius but it would just be way-too-clever technical debt if Carmack hadn’t written it and others didn’t learn from him.

FISR is a beautiful hack, but it hardly technical debt. This is the original code. Note how the trick has been hidden behind a normal API such as `Q_rsqrt`:

   float Q_rsqrt( float number ) {
        long i;
        float x2, y;
        const float threehalfs = 1.5F;

        x2 = number * 0.5F;
        y  = number;
        i  = * ( long * ) &y;                       // evil floating point bit level hacking
        i  = 0x5f3759df - ( i >> 1 );               // what the fuck? 
        y  = * ( float * ) &i;
        y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration


        return y;
  }
This is how you walk the fine line between technical debt and useful hack.


Not really.

If the comment "what the fuck" were instead "estimate floating-point exponent with bit-wise arithmetic" and "SingleStep forward with Newton's Method", then the code would be better documented

The comment "what the fuck" and "evil floating point bit level hacking" don't help anybody. And "1st iteration" is only helpful if you knew it was an iteration of Newton's method.


Agreed, this is really far from technical debt. It's self-contained, the purpose of the function is clear. Add a comment or two, a unit test, and this is perfect.

What I would call technical debt is if he had inlined those tricks all over his code, making it very hard to debug a wrong result or move away from this technique.


"Fast inverse square root is genius but it would just be way-too-clever technical debt if Carmack hadn’t written it and others didn’t learn from him."

Carmack didn't come up with that: https://en.wikipedia.org/wiki/Fast_inverse_square_root#Histo...


Maybe the real secret to being a 10x programmer is being so charismatic that people attribute the work of 10 other programmers to you!


I think there's a real truth there - the most lauded 10x programmers are typically the "face" of a group of talented and productive people. As their legend grows, more and more work of the group gets attributed to them.

I think Elon Musk is another good example of this phenomenon.

Certainly, there are programmers vastly more productive than the average, but I think when you think of any legendary programmer (Linus, Carmack, Knuth), you're also likely impressed by their significant supporting cast.


I'd exempt Knuth from that, as he's practically a monk in his loner ways, but I also think of him as "genius", rather than "10x".


Knuth is famously a slow worker, but he "gets to the bottom" of any problem. He's basically a turtle (from the Tortoise vs Hare story). A giant "juggernaut" turtle. You can't stop his analysis, but it takes a long time to get anywhere.

Its been over 40 years and he's still writing "Art of Computer Programming" books, and fixing errors in the text. Its an exceptionally well-crafted piece of writing. His solutions to various programming problems are excellent too, great analysis and deep thought applied to them.

Definitely not the "10x programmer" of today's lore. Knuth is an older, gentler kind of genius that I have a huge amount of respect for.

---------

For those who haven't read Knuth's works yet, I suggest starting with Knuth's analysis into Alpha Beta pruning: https://pdfs.semanticscholar.org/dce2/6118156e5bc287bca2465a...

Knuth's writing style is just so much deeper and thorough than pretty much everything else. You have to give the guy mad respect.

Of course, I also recommend reading "The Art of Computer Programming", but that's far more material to read through. The ~34 pages on Alpha-Beta pruning are a quicker introduction to Knuth's writing style. Even if you think you know how Alpha-Beta pruning works, Knuth goes far deeper into the subject than you might imagine.

EDIT: In particular, the F -> F1 -> F2 algorithm (F being Minimax, F2 being Alpha-Beta, and F1 being an in-between algorithm to help describe F2) is brilliant writing. Only Knuth would spend so much effort describing F1. But all that effort into F1 helps both his analysis, as well as better describes what is going on in Alpha-Beta pruning (aka F2).


Fast inverse square root delivered business value that couldn't be obtained any other way, which means that it wasn't technical debt. It was a technical price. What's bad is when programmers make the system complicated purely to entertain themselves.


I'll bet that sort of 10x programming has gotten rarer simply because hardware constraints have relaxed so much. Tricks that once would have made a program possible now just make it a headache to read.

An awful lot of game-development history was spent actively looking for 'clever' hacks that would verge on fireable offenses today. Pokemon Red was made barely-possible via the sorts of magic-number tricks most of us don't even like to think about, but at this point that sort hand-optimization is basically just code golf for its own sake.


It moves generationally, as new platforms are invented and people seek to capitalize on the platform before the performance is really all there. When you're doing anything at the bleeding edge, you really need to know the details of the platform and squeeze every ounce of performance out of it, because there's probably not enough performance to go around. When the edge moves to the center, stops bleeding, and the platform gets optimized, those sorts of hacks become silly anachronisms.

I remember doing Javascript games in 2007 (before V8 introduced a JIT to JS) and very carefully optimizing loops, avoiding DOM calls, eschewing JQuery, etc. to get acceptable performance. As late as 2009 we were counting bytes on the Google search results page (like literally; we'd do things like "for(var i=0,e; e=c[i++];)" to save a byte in a foreach loop). Solidity programmers on the Ethereum VM today use tricks like switching out opcodes and moving functionality into library contracts, sometimes at the expense of locking tens of millions of dollars worth of ETH forever.

Nobody counts bytes or manually moves common subexpressions out of loops in JS today; you just use Babel. But as computing matures, the bottleneck moves, and people seek out new domains that are just becoming possible, and then have to develop a new bag of tricks.


Agree, I will also add that technical debt != complexity.

As an example everybody uses an OS to code. An OS is incredibly complex. Maybe one of the most complex piece of software. But it doesn't mean that you should care about it. With the proper and clean interface it will have an abstraction of this complexity to its user (in your company or not) and they will be able to continue to code and never have to care about it.

So of course an OS - or like OP said anything creating value - doesn't mean that it creates technical debt only because it's complex.


Exactly: you may not be able to fully understand the OS you're working with, but you can abstract it away and use it anyway. This isn't "technical debt", it's something you need to actually get your job done: without the OS, you simply would not be able to actually create the thing you're making.

Similarly, whatever you're building likely uses a microprocessor somewhere. You probably don't really understand how that works, and would not be able to build one from scratch. But without that CPU, you wouldn't be doing your job at all.

The phrase "standing on the shoulders of giants" comes to mind here.


"The Thirty Million Line Problem" by Casey Muratori might change your mind.


Thank you! Most people I've worked with end up so afraid of complexity that they create tech debt through crazy simplifications that require constant work arounds.


It's not even that complex. Arguably it is simpler than the way that you would otherwise do inverse square root, you could write a 5-line comment that anyone who's understood high school calculus could decipher, it's drop-in/drop-out, and doesn't need to be maintained.


Highlight this and pin it to the top of this comment thread.


"The algorithm was originally attributed to John Carmack, but an investigation showed that the code had deeper roots in both the hardware and software side of computer graphics.". I would suggest this mis attribution help us further understand the 10x programmer conundrum.


The difference is largely money. Doom was revolutionary when it came out; id software made a whole lot of money from it. The rest of the industry took note, and, wanting to make a lot of money too, decided to emulate what they saw.

If you want people to accept and learn from your clever programming techniques, try to find ways to turn them into products that only you can make that lots of people will pay money for. Even if you don't succeed in convincing the rest of the industry, at least you'll have lots of money.


It's not about the money.

Doom would have been revolutionary even if it and all of the other games it inspired were free.


The first part of Doom was shareware and free btw


There was a point in Carmack's career where he was not famous, and he (and his work output) wasn't given the benefit of the doubt of being a genius.


There was no point in Carmack's career where he wasn't the focus of the company.


Similarly, there was no point in Carmack's career where his work and his views were accepted totally uncritically.


When he wrote Keen for those guys in Shreveport I doubt he was the straw that stirred the drink


I think that has a lot more to do with Carmack being at a small company where there was no-one to say no to him. If you were the CTO of a three-person startup you most definitely could do whatever weird, esoteric programming you liked.


Coming up with good abstractions can be very difficult, but those abstractions aren't necessarily difficult to understand.

Similar to idea that it's hard to write simple, clear code, but easy to understand it.


But it was that genius coding ability that made him famous in the first place. You could do it if you worked at a company that needed those types of "hacks" like he did.


>Fast inverse square root is genius but it would just be way-too-clever technical debt if Carmack hadn’t written it and others didn’t learn from him.

Carmack didnt write it, 0x5f3759df constant landed at iD from 3Dfx/Silicon Graphics

https://medium.com/hard-mode/the-legendary-fast-inverse-squa...


"The algorithm was originally attributed to John Carmack, but an investigation showed that the code had deeper roots in both the hardware and software side of computer graphics."


I think the problem is largely that "10x programmer" is ambiguous between "10x more valuable" and "consistently produces code 10x faster". I think people accept the idea because of the first meaning, but efforts to hire 10x engineers frequently look for the second.

There are certainly lots of programmers who produce 10x more value than others, and some who produce 10x more than average. They create good project plans that don't need reworking midstream, build tooling pipelines that save work for their whole team, catch obscure-but-expensive bugs in advance, and make sound design/infrastructure choices which save huge amounts of renovation down the line. And yeah, for sufficiently-hard problems they sometimes come up with clever technical solutions other people wouldn't.

I suspect there are engineers who can frequently output quality code 10x faster than most of us would, but that's reserved for incredibly specific tasks. Most code-writing genuinely can't (or shouldn't) be accelerated like that, so it's limited to arcane problems like rendering or codec work where brilliant optimization can trump general diligence. John Carmack might be an example, or Dennis Richie, or Gary Tarolli (who apparently first authored Fast InvSqrt). The Microsoft gurus who hand-edited the EQNEDT32 binary for a bug-fix, too. But there are maybe a few thousand programmers in the world doing that sort of work, in a very specific set of fields.

Meanwhile there are a lot of companies trying to hire "10x engineers", often for "make our website and backend" tasks that can't possibly be solved with a brilliant coding trick. And a lot of those companies aren't looking for someone who will do the architecture and task-analysis and tool-building that makes 10x-value engineering possible, they're looking for someone who will solve simple problems inhumanly fast. In practice, that mostly means cutting corners, hard-coding values, and skipping on documentation.


We used to all hand-edit binaries in the 90s when we were cracking copy protection by passing around text files indicating which hex codes to swap between JE/JZ and JNE/JNZ...


So the specific story I was referring to was an obscure security fix to their equation editor in binary, rather than source. The impressive bit wasn't just editing a binary but patching a bunch of security holes without altering any other instructions: https://blog.0patch.com/2017/11/did-microsoft-just-manually-...

That said, I'll bet this kind of 10x programming is genuinely rarer these days. Not because programmers have gotten worse, but because new tools and relaxing hardware constraints make this sort of near-metal optimization less necessary and less valuable. The sort of data-reuse hacks that made e.g. Pokemon Red/Blue possible would just be a pointless headache today, so those same skills are getting spent on code golf instead.


The context is this thread https://twitter.com/skirani/status/1149302828420067328?s=21

in which a VC once again proves that what passes for "wisdom" in Silicon Valley is often indistinguishable from what others would assume was satire.


This seems to be really common thinking, too.

It seems to go like this. A lot of programmers are weird. They don’t get along well with people. They keep weird hours. They dislike social norms. This part is true, although far from universal. The problem is the next step: since programmerness is associated with all this weird behavior, the most extreme and therefore best programmers will be the ones who behave the weirdest.

This is reinforced by a simple selective process: mediocre programmers who behave badly tend to get fired, while genius ones are often kept around because their abilities outweigh their flaws (or at least management thins they do). Thus, when you see a really weird programmer on the job, chances are that they’re also really good.

It’s all bullshit as far as I can tell. Plenty of great programmers have fine social skills, work 9-5, enjoy teaching new people, etc. Plenty of crappy programmers are also weirdos. But the perception is definitely there.

This discussion of 10x programmers and sometimes denial that they exist is really people pushing back against the notion that weird or bad behavior is a signal of greatness, or that productivity means you can treat people like shit.


>is really people pushing back against the notion that weird or bad behavior is a signal of greatness, or that productivity means you can treat people like shit.

Exactly. No one sensible disputes that, given the right circumstances, some engineers (or business leaders, etc.) can bring more value to an organization or culture broadly than ten or more people who are just OK.

But pretty much everyone I know who I consider exceptionally valuable is also good at working with others and enabling teams to be successful.


I am honestly unable to decide whether the original tweets by @skirani were said in seriousness or as sarcasm!


I was unsure as well. Given this later tweet, all indications are that he was serious:

https://twitter.com/skirani/status/1150019060467240960?s=20

"I am surprised by extreme views on 10x engineers. They are great individual contributors. They may not be good with teamwork. So what? They can be phenomenal in the early stage of the product cycle.

Find the best in each & get the best out of them. That's what good managers do."


What is wrong with what he said? I admit some parts were kind of silly, like the "worn out keys", but the overall theme was that he was basically just describing a somewhat romanticized version of a "Commando" from Atwood's "Commandos, Infantry, and Police". This is reinforced by his reply saying "They can be phenomenal in the early stage of the product cycle."

The overall picture is of someone who is technically competent but "moves fast and breaks things". The person who coined that phrase perfectly embodies the upsides and downsides of this type of person: Zuckerberg quickly threw together a PHP app, is a gigantic jerk, and he is a billionaire because his product was phenomenally successful. Then other, kinder, gentler and more team-oriented people came later to make the product performant and legible. If the team-oriented people had been involved from the beginning you would have gotten Google Plus.

It stands to reason that such a person would be more likely, on balance, to be abrasive and dislike meetings. I guess the only problem I see with his formulation is that a "10x" engineer is implied to be better than other engineers. Atwood's "you need all kinds" formulation is better.


I completely disagree with this notion that there is this tension between being good at getting a project off the ground and being kind, gentle, and good at teamwork.

That’s what all this pushback over “10x engineers” is about. It’s not pushback against the notion that some people are really good at what they do. It’s against the notion that those people are necessarily asshole loners.

It’s a common broken syllogism that goes like, Zuck built Facebook into an empire with his bare hands, Zuck is an asshole, therefore Zuck was successful because he’s an asshole, therefore if we want to succeed we need to hire an asshole.

Alternately: our guy is an asshole but that’s ok because that’s what you get with a 10x engineer. We need that 10x so we need an asshole and therefore if you want them to stop being an asshole then you want this company to fail.

Alternately: there’s no excuse for being a jerk and people are tired of it being justified on the basis that it’s a necessary component of being great.

In my experience there is little correlation between programmer productivity as an individual and things like kindness and ability to work in a team. Plenty of geniuses are friendly people who work great with others. If you hire one of those for your early stage startup, you’ll not only do fine, but you’ll be in a much better position once you reach a point where you need a team.


If the premise is that being a nice, team-oriented person and being a good programmer are not mutually exclusive, then of course I agree. And "Zuck was successful because he's an asshole" is something that seems like an obvious fallacy but the more I thought about it, the more I realized it isn't really. "Zuck was successful solely because he's an asshole" would be.

A distinction should be drawn between a "good programmer" and "person good at startups and greenfield projects". I would maintain that the latter requires a certain amount of assholery.

Really good products are not made by committee, at least not in the beginning stages. Committees and large groups of people also tend to slow things down, a lot. You have to be willing to be opinionated and self-assured to maintain a cohesive vision of where you want to go, and that necessarily means pissing people off. Steve Jobs, Linus Torvalds, and possibly Elon Musk are other examples.

So while 10xers in terms of pure programming skill will not be enriched in assholes, the famous ones will generally be, because they got in on the ground floor. The ground floor is where it helps to be an asshole. Most of us here are not dealing with such situations though, so I would agree to the extent that for 99% of employers in 99% of situations, considering assholery to be a positive trait is very unwise.


You can be confident and self assured without being an asshole.

You mention Steve Jobs. What about Woz? Without Woz, Apple never would have gotten off the ground. I suspect most of us would agree that Woz is not only a 10x engineer, but probably a 100x. At least, he was in the early days of Apple, before the plane crash. And he’s a super nice fellow.

One thing being an asshole helps with is becoming famous. Everybody knows who Steve Jobs was. Approximately nobody outside the tech community knows about Woz. So naturally, if you go looking for examples, you’ll find lots of assholes. That doesn’t mean assholery correlates with (let alone causes) success.


You don’t even need to go to the level of a Bellard or Carmack to recognize the existence of 10x engineers. This pushback seems to derive from the egocentric assumption that 10x means “Ten times better than me.”

If we flip this around, does anyone doubt the existence of 1/10x engineers? I’m not referring to low end outliers who clearly can’t code. But I f you think through all the engineers you have known who have actually been employed and worked in the field, is there a 10x spread between the best and the mediocre-at-best?

Lots of folks are familiar with the Dunning-Krueger effect for what it says about the perspective of those with less experience/skill. However, it also postulates that people with more experience/skill also see the world incorrectly — from the other direction. They are prone to assume that most people are at least as skilled as they are.

This pushback against the notion of a 10x engineer seems like the perfect union of Impostor Syndrome meets Dunning-Krueger. We worry that we’re near the bottom of the curve due to our own insecurities while being partly blinded to the deltas in skill both above us and below us.

Edit: Clarified that I was interpreting 10x as highest to low-average, not highest to lowest outlier.


On the other hand, Olympians are not even close to "10x runners".

Ten percent of Usain Bolt's top speed (27 mph) is a leisurely walking pace that almost any healthy adult can maintain for 100 meters. Ten percent of a world record marathon is a bit harder, but high school students still routinely under 10 minutes for 2 miles.


The problem is that we haven’t defined what we’re measuring.

E.g. Usain bolt makes far more than 10x money from running than the average healthy adult.


I would argue there are a (thankfully small) number of engineers that could be characterized as -2x. At least the 1/10x ones are making forward progress.


> why people are so eager to conflate...

Because identifying, hiring, and keeping 10x programmers is difficult and expensive. Companies fail at it and assume the problem is the concept of a 10x programmer, rather than own inability to handle this difficult objective.

There a lot of hiring managers, who think the process has one step: post a job 'looking for 10x engineer' and then judge the results. Rather than consider that their approach might be flawed, they attack the concept of a 10x engineer.

There absolutely are 10x people out there in many fields, and many of them are humble about their methods/approach. Software engineering might even have 100x people.


As someone who has reasonable experience founding a company, hiring, training, motivating and managing developers and teams, I feel I can tell you what I really believe:

Forget 10x developers. Forget berating developers for checking in code that doesn’t compile.

If you are planning to build a real growing company, You need to progressively put more stress on your SYSTEM. That is your job.

Have a kickass onboarding set of tutorials and documentation for everyone. Have a culture that anyone can assign an issue to anyone, instead of interrupting them. They can get feedback via updates on issues.

Use pre-commit and post-commit hooks to catch as many mistakes as possible, and clean up team formatting standards for your code.

Hire developers who are super familiar with whatever technology (language, platform, techniques) that you need them to work on. But NO ONE SHOULD BE A HERO, everyone’s code should be easily understandable, use only the simplest language features to get the job done (but no simpler), and be documented. Accrue no code code debt.

Each developer’s work should be documented and tested, preferably by someone other than themselves.

Each developer should be replaceable. That extra 30% cost spent on fully documenting and testing their code means months saved onboarding someone to take over.

Working remotely is actually GOOD. Working asynchronously 90% of the time is even BETTER. Everything in your system should assume people don’t share time or space.

People live lives. Companies build products. That is our motto. It means exactly this... ask yourself whether you are building a product, and if so, do not give responsibility to PEOPLE, but to the system. If they take a day off to spend with their kids, or work 3 hours a day, it shouldn’t have a major effect on the product.

And our compensation model reflects this, too. Instead of full-time employees, feel free to take anything from this:

https://qbix.com/blog/2016/11/17/properly-valuing-contributi...


> Each developer should be replaceable.

This attitude makes perfect sense from a managerial perspective. If workers are easily replaceable, they don't have negotiating leverage and you can pay them less, and you don't have to worry about risk to your company if one of them gets hit by a bus.

Conversely, it is in an employee's interest to be hard to replace if they can be. It gives job security and negotiating leverage. A "good" 10x engineer, the ideal stereotype, would be hard to replace because by definition, you'd have to hire 10 people to replace them, and even then, the 10 might not be able to accomplish certain hard tasks.

The bad stereotype of a 10x engineer is that they wrote a business-critical monstrosity only they can understand.

What they both have in common is that they are hard to replace. That is why, I think, that when big companies hire well-known 10x engineers, they put them on non-business-critical research type roles. And smaller companies would presumably be wise to avoid them altogether.


Agree. Entirely too much misplaced focus on finding better/more technical talent when commonly the bottleneck for a companies growth is not limited by engineering brilliance. It's much more common for the limiting factors to be logistical than technical. Or the 'system' as you describe it.

However the compensation model you describe seems a little wild. I'm not sure it's that easy to tie projects to specific performance numbers.


> Fabrice Bellard

I googled him just now knowing nothing about him. Holy cow. How can this person even be real? Are we sure he's not a superintelligent alien?

>In 2005, he designed a system that could act as an Analog or DVB-T Digital TV transmitter by directly generating a VHF signal from a standard PC and VGA card.

WTF! How??

> On 31 December 2009 he claimed the world record for calculations of pi, having calculated it to nearly 2.7 trillion places in 90 days. Slashdot wrote: "While the improvement may seem small, it is an outstanding achievement because only a single desktop PC, costing less than US$3,000, was used—instead of a multi-million dollar supercomputer as in the previous records."

This guy is more like 1000x than 10x.


I was working in embedded, on an LTE base station and remote radio head, mind you, on a set of teams that comprised about 30-40 engineers in total, when Fabrice released details about his software LTE/NR base station [0]. It was absolutely mind blowing to me. It is still absolutely mind blowing to me. The level of specialized knowledge that we had in-house to accomplish this work... We're talking about dozens of people who held advanced degrees, had decades of experience in the industry individually, let alone what we had combined, all of our knowledge of the standards, the various pieces of project/product management behind the work, all of these very talented software and hardware engineers... It's just truly something else to behold when you realize this one person exists who can do the highly specialized work of so many.

IMHO, he stands alone where he exists in terms of his productivity and his immense knowledge. I hold a small smattering of engineers in high regard but he is leaps and bounds ahead of that pack.

[0]: https://bellard.org/lte/


> I'm not sure I understand why people are so eager to conflate the term "10x engineer" with "an arrogant engineer who is only seemingly productive because of either obfuscation or generation of technical debt".

I think it's pretty clearly because those are almost always the people who will call themselves "10x engineers," and obsess about the idea of being better than everyone else. Good programmers don't do that for the same reason that "any man who must say 'I am king' is no true king."


But why let the definition of the term "10x" be hijacked by the kind of people you describe? We still need a way to succinctly describe engineers who are an order of magnitude more effective than average. Can't we let "10x" continue to mean what it's always meant, and agree on a new term for toxic team members?


I'm not sure that we do need such a term. Ability is a continuous function, and there's nothing magic that happens once you reach 10 times the average[1] that justifies such fixation. I never hear anyone talk about recruiting 5x engineers, even though it would be more viable as a business strategy. Besides, we can't even measure engineering ability to the precision at which specifying "10x" even makes much sense. When would "10x" actually be a more useful descriptor than "very good"? Also, where are all the "10x artists" or "10x mechanics"?

[1] Although I read here just a few days ago that a 10x engineer is only ten times as good as a bad engineer, not 10 times the average. So maybe it hasn't always meant the same thing?


Yup, some even created a website dedicated for denying 10x engineers: http://10x.engineer/

But there are people like Linus Torvalds, Satoshi Nakamoto (if they were one person), and those two programmers you mentioned. I doubt I could beat any one of them even if I replicated myself 20x.

I think, part of it caused by the wrong stereotypes of 10x engineers (for example, perpetuated by a VC in a recent Twitter storm) and it became a myth that people accepted. Another part is some people are new to programming and have not "encountered" these god-level programmers yet.


I question the inclusion of Nakamoto in that list. Is there anything to suggest that they have 10X engineering abilities? Nobody says Einstein was a 10Xer even if his Annus Mirabilis had orders of magnitude more positive effect on humanity. We can respect different forms of ability and achievement without conflating them.


You brought an interesting point. Maybe we should differentiate 10x engineers (if we should keep this term alive) into two camps:

1. Super hardcore engineers like Fabrice Bellard, John Carmack or Linus Torvalds, 2. Engineers who bring insane amount of value to society, like Satoshi Nakamoto (if they were one person), and Markus Persson (founder of Minecraft).


> there are people out there who are just... dramatically more effective programmers

So... At the start of this week I was trying to solve a bug that only occurred when someone had multiple browser windows open. I usually have just one browser window open.

The person who reported the bug did not mention that they had multiple windows open (and why would they). I got lucky when trying to reproduce it: my testing routine included giving it a try in Private Browsing, which meant opening another window.

If I had not done that, I would not have been able to reproduce the bug. How would such a dramatically more effective programmer have been able to reproduce that bug more quickly?

(Also note that the symptoms did not indicate anything relating to multiple windows. The report was simply: nothing happens when I try to run it.)


Aren't you answering your own question here?

| my testing routine included giving it a try in Private Browsing

The 10X programmer (or in this case the 10X bug fixer) has a testing routine that sufficiently covers enough logical scenarios such that they're able to converge on the truth at a 10X speed.

It's basically the same reason why Guess Who is a game. Some people ask better questions that allow them to eliminate irrelevant details at a faster rate.


Well, yeah - in this case, trying Private Browsing helped to find the issue, but only because it opened another Window. That was good enough for me to find it - and I'm probably not a 10x engineer.

Had that not been the case, though, there would have been no indication to try using it with multiple windows open, as the error was a general "nothing loads", which is the result of an error condition anywhere in the code.


I don't think any amazing programmer is immune to every bug. Just imagine a programmer who, when confronted with a bug, is always like "oh, that must be X or Y, we can test that real quick!" (And is right.) What a crazy world that would be.

What I do know is that my programming style is to really dig into every new project I have to work with. Maybe not every part of an application, but everything relevant to the feature I care about. I'm an incredibly judgemental reader (this is sad for personal reasons) and as such, I come up with long lists of "I don't think this would handle that scenario." I don't have time to dig into them, but that list stays there in the back of my mind -- a vague sense that a loop wasn't accounting for a particular kind of array value, etc, etc.

Inevitably, months down the line, some of those bugs surface as actual things. I keep an eye out on tickets, or listen during stand-ups, and I only have to remember just enough of that problem to cut out the investigative time. Eventually I become the person everyone goes to to get them up to speed on any problems within any of the features I've worked in, over people with much more seniority on the team, or often even the people who are responsible for that project. This is also how people seem to always think I've been around twice as long as I have.

I'm not a 10x engineer -- I find it incredibly difficult to stay "on task" and that massively kills my productivity. But the way I approach codebases, outlined above, is just one of many tactics that can, in the right environment, make a programmer far more productive/useful than they would otherwise be.


That's a good point: keeping potential problems in the back of my mind for months is definitely an area in which I have potential for improvement.

I guess that's also an additional argument for not being the only person working on a codebase - it's far harder to read it judgmentally if you wrote it.


A 10x programmer would read the description of the bug, and from their knowledge of the codebase think "hmm, that should only happen when you have X loaded multiple times at once making Y happen..." then go on to immediately test and repro with two windows open.

UI dev/QA is a bit different but this is how things typically go in sysadmin-land. A good engineer can hear a description of an issue and immediately pinpoint one or a few seemingly unrelated potential underlying issues to test. This is just a combination of experience and a deep knowledge of the underlying systems and processes that make things happen. The tough part is that this isn't something that's "teachable" -- some guys just "get it", others, while having superficial knowledge of the infrastructure, just can't seem to be able to mentally walk though a system or process and identify where the trouble might be originating from.


> A 10x programmer would read the description of the bug, and from their knowledge of the codebase think "hmm, that should only happen when you have X loaded multiple times at once making Y happen..." then go on to immediately test and repro with two windows open.

I don't think that would be possible, because there are literally hundreds of potential errors that could have the described behaviour as a result.


You do it by ruling out classes of errors, rather than one at a time, and drilling down from the ones you can't rule out. For example:

* Application code error should result in an error message somewhere.

* Application server configuration issue should occur for multiple users.

* Something happening to only one user should be caused by either their configuration or what exactly they were doing.

(And I'm sure there's more cases, but this is what's coming to mind offhand)

From another comment, it sounds like this landed in the third bucket - and better, nothing loading meant it wasn't something they were actively doing.

So it's some configuration specific to that user: Something user-specific from the database on page load, browser choice, add-ons, or - as you found - unusual (to the devs) browser usage, like zoom or multiple windows.

Obviously this isn't thorough and could be wrong depending on the situation (note I said "should" in the bullet points, not "will"), but it should help a bit. Even knowing possibilities like zoom or multiple windows is something you get from experience - now that you know it can be a problem and one of the ways it manifests, you'll know to check it next time you see something similar.


You're right, it was the third bucket. I guess you're right that experience teaches you about the potential sources of problems; it's just that I can already think of many, many such potential problem sources, and the only strategy I have is trying them out in order of likeliness.

But 10x engineer or not, there's always he risk of running into the least likely problem - or, more likely, running into one of the problems in the long tail of individually very unlikely problems. It'd be nice if one could learn to lessen the impact of those worst cases, but I guess the primary thing one can grow in is making them less frequent.


A single anecdote doesn't disprove his hypothesis - in this case a more effective engineer might have sent it back saying "can't repro, needs more info".

They also might have looked at the code and said "oh hey, that won't work with multiple windows, I'll just change that".


I wasn't aiming to disprove the hypothesis, merely looking for strategies better than my own.

In this case, I was also the person dealing with the person reporting it. Having had to close it with "cannot reproduce, won't fix" would have been a pretty disappointing outcome, and would make it really hard to discern between a 10x engineer and someone who's just bad at debugging...


When I'm addressing bugs in the project I'm working on, especially when the bugs are described vaguely by outsiders, I start by confirming what I know to work. Take the most likely path I can conceptualize them reaching some sort of issue that's similar to their reported issue. While confirming what I know to work, if I'm not encountering anything that indicates that I'm on the right path, I switch over instead to what potential edge cases could be the issue. Focusing on the expectations, assumptions, and behavior I expect to see given what the options are provided (do they have the option to switch between two screens over and over).


Yeah that's mostly what I do, and it generally works well. Sometimes there are cases like this, however, where the observed effect has hundreds of possible edge cases causing it, and I just lucked into observing the right one on my own machine.


Are you saying there are no dramatically more effective programmers because you encountered a bug that would be difficult for everyone to reproduce? Even if task X takes the same time for 2 people, one is more effective in the end than the other if they can do task Y in less time/more efficiently/some other performance metric.


No, I was wondering whether this task was of category X, or if it was of category Y and there's some strategy better engineers than me employ that I can learn from.


>How would such a dramatically more effective programmer have been able to reproduce that bug more quickly?

I'm not quite sure I understand your point.

"Dramatically more effective" does not mean "dramatically more effective in every single scenario you can think of."


I'm not really making a point, more wondering whether this is a scenario that has room for a more effective approach. Like most programmers, I'm sure, I approach most errors I encounter relatively confidently, and they usually don't have me struggling for hours.

This one had me baffled for a bit, though, and I was fearing having to spend a couple of days on tracking it down - or having to give up. Sometimes those happen, and it'd be great if there are ways to have that happen less often.


A 10x programmer would learn from this bug, think through why their current architecture could produce such bugs, write a test suite to ensure that they wont happen again and alter their testing procedures for finding reported bugs in the future.


Alright, so in this case, the bug was produced by querying open tabs for a tab with the property `active: true` (not our API). Apparently, that produces not only the currently focused tab, but the tab that's in focus in every open window - another search param was required to narrow it down to the focused window as well.

What lessons about our architecture could we draw from this? What kind of test suite should we write?


Uh, they don’t. They also don’t turn on their computer faster than you. But a 10x programmer, while fixing that bug, might eliminate 3x as many bugs in 1/3 the time (so maybe they’re a 9x programmer).


I'll bet part of why they're conflated is because every company that tries to hire 10X engineers, does it wrong and ends up hiring arrogant engineers.

Not to mention, to the much more numerous ranks of "1X" engineers, a 10X engineer, even a real one, is kind of a pain in the ass and hard to distinguish from an arrogant engineer.


It's like that in every industry, every sphere of human activity, really. I'm not sure where this weird obsession with "10x" came from and how programming is different in terms of talent and productivity from any other industry.


For me the question is not "do not-assholes 10x engineers exist", but "are 10x engineers the role model and the narrative this community need to highlight if it wants to move forward?"


I feel like the term has quickly / maybe always lost meaning.


It never had meaning other than as a feel-good expression of "some programmers are much better than others."

The original "scientific" basis was a paper in the 60s (ish?) that found a 10x difference between the time taken by the best and worst programmers to complete a task. It excluded people who didn't finish the task at all.

The actual focus of the study was to study productivity differences between off-line (punch-card) programming and on-line (at a terminal) programming. Remember, this was the 60s.

The 10x finding was a side effect of a small study that has no applicability today. I'm not aware of any serious attempt to replicate the findings, probably because they're not very meaningful:

1) The 10x difference was between best and worst. This is a lousy metric. A better metric might be difference between best and median.

2) Productivity was defined as time for an individual to complete a small program to run on a single timeshare computing system. This doesn't tell us anything about modern real-world productivity, which involves working in teams, on distributed systems, with vastly larger development ecosystems.

In order for "10x" to be scientifically meaningful—to be anything more than another one of the stupid tribal wars programmers like to engage in—we would need to: Determine how to measure real-world productivity [1]. Use a better metric than best-to-worst. Pay for and conduct a non-trivial study.

Ain't nobody got time for that.

[1] https://www.martinfowler.com/bliki/CannotMeasureProductivity...


> we would need to: Determine how to measure real-world productivity [1]

I submit to you that we would be having the same arguments no matter what study was done, because it could always be argued that whatever small-scale thing would be measured, and whatever metric was used, doesn't reflect the full complexity of reality.

We all know that some programmers are better than others. But actually quantifying that would not be in anyone's interests. For programmers, it would mean hard metrics to rate our performance, and people would be paid differently based on these metrics. "Bad" programmers, as defined by this hypothetical metric, would lose money and career opportunities. "Good" programmers would earn the wrath and envy of their colleagues. From a manager's perspective, hard metrics would encourage gaming the system and would generally not encourage team play.

So it is better off where it is. People who write code slowly can argue that they are really more productive because they take time for testing and collaboration and making documentation and making things legible, and that people who write code quickly are making unmaintainable messes. And people who write quickly have a prima facie case.


Humans are resourceful. Any metric can / will be gamed.


> It seems blindingly obvious that there are people out there who are just... dramatically more effective programmers, in a holistic net-value-to-organization/world sense. Fabrice Bellard and John Carmack, to name two that jump to mind.

Or Salvatore Sanfilippo (antirez)

Or Guido Van Rossum

All also known to be very nice people. And that would deny they are 10x :)


> I'm not sure I understand why people are so eager to conflate the term "10x engineer" with "an arrogant engineer who is only seemingly productive because of either obfuscation or generation of technical debt".

Part of it is defensive posturing. I have encountered corporate developers who are hardly, or not, literate in their primary programming language yet see their capabilities as average or the norm. A productive person popping their delusional dunning-Kruger bubble may very well seem arrogant to them.


Is John Carmack a '10x programmer'?

Carmack didn't exactly create Commander Keen all by himself. John Romero did some programming, and the level editors and other tools like the installer. Adrian Carmack did the art, Tom Hall came up withe gameplay ideas and level designs. Besides, Keen wasn't anything amazing in terms of a game, other than the fact that it was one fo the first popular side-scrollers on the PC.

In the end, Keen was a basic side-scroller. Of which plenty existed over the years. Shareware, hobbyist, and professional game developers were not in short supply.

Wolfenstein 3D and Doom. Again, Carmack wasn't the only programmer. Again, Romero wrote the level tools. Dave Taylor also had programming duties. Heck, id even farmed out the sound code! Wouldn't a true 10x developer bang out a sound library in his sleep?

Quake rolls around. This time Carmack has brought in re-inforcements. Mike Abrash for his vast knowledge of graphics coding and optimization, and John Cash for the networking side. Dave Taylor wrote the sound engine and some other things. Zoid ended up taking QuakeWorld.

Around the Quake 2/3 time, Carmack started to come into his own. They brought Brian Hook in help do 3D graphics, but Carmack created a level editor as his 'first win32 program', even though he eventually passed it on to Robert Duffy. Carmack was really doing a lot of things with 3D graphics and hardware at the time.

Let's not forget his side projects like graphics drivers and porting id games to things like the iPhone and SNES.

I'll end this by saying at the very least he had a huge hand in getting PC gaming going in the right direction. I also love his willingness to release the source code to their products. But was he a '10x programmer'? Maybe he was just really good.


I often wonder if Jason Jones [0] (of Mac 3D shooters "Pathways Into Darkness" [1] & "Marathon" [2]) was at the time at about an equal level as John Carmack. I believe the release dates of PiD and Marathon weren't much different from Wolfenstein and Doom, so they've must have been developed at more or less the same time.

Personally I feel PiD was a much better game than Wolfenstein, partly because of the adventure/RPG elements, partly because of the horror atmosphere. The UI was less immersive however. But the game certainly had very interesting elements. For example there was a level that was randomly generated every time. Some monsters could only be killed when frozen (using a special "blue crystal") otherwise they'd be invisible and be impossible to kill. It was possible to talk with dead human corpses using a "yellow crystal", etc… There was a special room that would drain the oxygen and only by speeding up the time somehow (perhaps using another crystal?) one could survive the room.

And some things Marathon certainly did better than Doom. For example it was possible to look up and down, the lightning effects were more impressive, there were some physics, etc ...

Of course the guy that wrote the Build engine (of Duke Nukem 3D fame) was probably at a more-or-less equal skill level as well.

---

[0]: https://en.wikipedia.org/wiki/Jason_Jones_(programmer)

[1]: https://en.wikipedia.org/wiki/Pathways_into_Darkness

[2]: https://en.wikipedia.org/wiki/Marathon_(video_game)


I'd love to hear an opinion on someone like Ken Silverman or Tim Sweeney, as they were Carmacks contemporaries.

There's probably legendary but unknown programmers at place like EA or Sony.


I personally have a huge amount of respect for all 3 as engineers.

There are plenty of legendary gamedev engineers who are somewhat known, most of them hang out on Twitter (Carmack has a great Twitter account IMO)

I've only worked in the industry for a little over a year now, but I've heard some great stories from the senior engineers.


What you are saying is that he wasn't a solo developer? I don't think that is really a requirement for the term. From everything I've read about his work habits, what he created, etc, him being a 10x programmer would be an understatement for the common usage of the term.


> Is John Carmack a '10x programmer'?

Yes. In fact, he is probably a 100x programmer.


> Because I had special skills it meant that I was being relied upon more to do work that no one else could do.

This is a textbook example of a bad system with a single failure point/bottleneck. One way to be considered "10x" is to be the only person with the know-how to keep a critical function afloat.

We really don't learn from history. Eli Goldratt wrote about this in his book The Goal--publication date 1984. Context was manufacturing but it's easy to see the principles at work and consider them in other contexts.

Gene Kim, George Spafford, and Kevin Behr wrote about this in a DevOps context in The Phoenix Project--publication date 2013.

These are just two examples of individuals who wrote books with mass market appeal that read like novels to illustrate their points. Many, many other people have thought and written about how to avoid building bad systems. And yet still, in 2019, as this 10x discussion flares up again, it's a myopic view of the individual without a scent or sight of talking about bottlenecks or systems.

Sometimes I'm in awe of Startupland and Tech World's accomplishments. Other times I'm in awe of what it doesn't even know it doesn't know.

https://en.wikipedia.org/wiki/The_Goal_(novel)

https://www.goodreads.com/book/show/17255186-the-phoenix-pro...


> This is a textbook example of a bad system with a single failure point/bottleneck. One way to be considered "10x" is to be the only person with the know-how to keep a critical function afloat.

I think often (and in this article) an organization has zero people with the know-how, and then someone struggles and figures things out, and now they have one person. That one person might be someone who has figured out how to deal with a difficult stack, or might be the person who has built that stack themselves – either way, they've done something valuable because they are handling something that is critical.

The next step – spreading that knowledge, or making the knowledge more accessible, or making the system more usable – is important, but it's not wrong that the organization has ended up this position. It's part of a maturing process. And we shouldn't shit on the person who brought the organization from zero to one, just because they aren't the person fully equipped to bring the organization from one to many.


> And we shouldn't shit on the person who brought the organization from zero to one

Very good point.

There's an underlying principle here that I didn't say. Management is responsible for the system.

Dead simple when written out, yet infrequently shown through managerial actions.


if no one else at a company knows how to do a task, and you are doing it, you're not a 10x dev, but an 'infinite-x' dev, no?


And you should also start looking for a new job. It means you're 100% utilized, you have no free-time, no real opportunity for growth, and no chance to improve the situation. You have one job (or one set of jobs). You take a single day off, a week, you come back to a fire. You spend a day or a week fixing that fire and you're back in the same grind. It may be fun, but you can't be promoted without killing that business line. You can't work on new projects/products without killing something.

If you have decent management, they'll set up firewalls between you and the people requesting work. Trainees or people of some experience but perhaps not as quick under pressure. Reduce the burden, start automating what can be automated. But if that's absent, if the pressure remains. Enjoy the glory, but look for an exit. You're one vacation away from returning to a layoff.


> You take a single day off, a week, you come back to a fire

Enforced vacation time is a great way to figure these things out prima facie.

As employees, we all know that 'unlimited vacation time' is just a code for 'no vacation time' (with rare exceptions). But companies get into that trap too. When they red-line their employees that hard, they expose themselves to unncessary risks. People get sick, they have tooth aches that need mending, they get jury duty notices during a crunch, their folks go into the hospital, etc. Let alone actual in-house issues of burnout, server issues, internet connectivity.

I worked with a shop that was dog-friendly once. They had to get fumigated every year or so, as the pooches would invariably bring in ticks and bugs. That was four days they just could not work at the office each year, with a pretty nasty decline in work enviroment quality in the lead up to each fumigation.

Enforcing vacations causes the firms to deal with these issues ahead of time. Vacations have been well studied and, especially with knowledge workers, improve employee productivity (generally). But they also act as vaccinations towards unseen workplace issues and black-swan events.


Tangent:

This is related to the idea of JIT and low-inventory in Lean. By reducing inventory, it allows problems in production to be revealed so they can be addressed. Consider a simple 2 stage process. The first stage is down 50% of the time on average:

  A -> B
When A is running, perhaps it can produce inventory faster than B can process it. So we run A at full-capacity and build up massive inventories in front of B. A happens to be down for a week straight, we exhaust that buffer and can't produce any more products. Because the inventory is usually allowed to go so high, the problems with A aren't addressed (they aren't pain points for the business). By the time A is down for a week and it becomes a pain point, it may be too late to save this business.

In Lean, you pull inventory into B only when needed (realistically you'd have some lead time, of course). You maintain a modest buffer to accommodate that lead time. If A can't produce in time, instead of growing that buffer permanently, you address the issues with A. Identify the failing components in A and find a more reliable replacement. Maybe there's not enough people trained to operate A so you cross-train people. Maybe you buy a second system (cheaper, lower capacity?) that can do what A does to shift the burden, or you find another machine that can be conscripted and used to make the same things that's only rarely needed for its primary purpose.

People who operate at 100% capacity and are your "heros" are similar to A. Everything seems great as long as they're there, but once they're gone (even for a day) they're noticed. By capping overtime (or eliminating it), by encouraging vacation time, you can find out who is critical to your business processes, and start shifting the burden (because it's an obvious pain point).

Anecdote: We had a guy who wasn't officially IT, but had been doing IT for our build and other dev systems, it wasn't his main job. He was gone for a vacation or business trip for a week, on Monday the systems went down. Nothing was accomplished until he returned and fixed the problems because no one else knew how to do that work. He was a liability for the team and business. This happened on more than one occasion. Management loved him because they didn't recognize the causal relationship between his leaving and things being in a failing state (didn't happen everytime, he wasn't causing the failures, but his absence meant the failures were noticed and not addressed quickly).

Control your "WIP" (work-in-progress or work-in-process) better, and you'll see work piling up in specific places. Just track it on a board or create a helpdesk ticket system that people have to interface with. It'll make all these pain points obvious so they can be addressed.


For people who haven’t seen the twitter thread, context is needed here.

The thread was written by a VC on what he thought a “10x Engineer” to him was, and he grossly summarized pretty much the opposite of that. https://twitter.com/skirani/status/1149302828420067328?s=21


Wtf . how did this guy beocme a VC ? His entire twitter feed is so mundane -- except for the 10X post -- that shit was hilarious. Even funnier were desperate founders who liked his post.


The only requirement to be a VC is to end up in control of a huge bag of money and a checkbook.


I have no idea what it takes to be a VC, but having looked at the tweet author's linkedin profile, he has a Master's in CS from one of the top schools in India and a PhD in CS from a US university, also has a solid work experience. People usually do not magically reach positions of power in an industry.


A mundane person in charge of allocating investments? Well I never.


> he grossly summarized pretty much the opposite of that.

Here's an actual quote from the thread: "10x engineers don't hack things. They write quality code and know exactly how the code has to evolve, and have a mental model of overall code structure. They write at most one design document, and the rest is in the code."

The thread wasn't particularly crazy as far as Twitter takes go. I think it only went viral because of tweet #3, the one about background colors and keycaps.

The whole meme about 10x programmers writing terrible code very fast must have come from somewhere else.


This is a some next level bullshit

> 3. 10x engineers laptop screen background color is typically black (they always change defaults). Their keyboard keys such as i, f, x are usually worn out than of a, s, and e (email senders).


That was cringe inducing. I want it to be satire.


I thought it was satire for most of the thread. I can't imagine celebrating someone being a poor mentor and disagreeable.


Kind of interesting most of the people agreeing with him are Indian.


On top of that, in terms of VC's he's an utterly unremarkable one. Poor guy had no idea he was he stepped in with that thread. He was just trying to virtue signal and play thought-leader.


No, that is not being a 10x engineer; maybe he managed the 10x part relative to his colleagues but nothing about his tale (keeping info to himself, letting himself become a single point of failure, etc.) says he behaved like an engineering professional. If I had to label it, it would be "rockstar", with all the positives but also negatives it implies.


I agree with the other comments that say that this is not really what people mean by "10x". 10x means you make the problem ten times simpler. 10x means you build tools to make the rest of your team more productive. 10x means you sit down with users and make sure that every bit of work you're doing on the project matters to them.

It doesn't mean doing 400 hours of work a week, which isn't actually even possible. It just means using your time so much more effectively than others that it just seems like you're doing the job of 10 people.


exactly, none of what he does describes 10x. he's just a guy who learned some specific skills.


It's widely accepted that olympic swimmers are more talented a person you'd randomly find at your community pool, but for some reason there's strong resistance to the idea that across a large distribution of software engineers, some outliers may indeed be much more productive than the mean.


Of course there are far more productive engineers, but this man, while good at his job, and the description of a "10x" engineer in the cited twitter thread, are nothing like actual 10x engineers.

The ultimate "10x" engineer, to me, is Peter Norvig. (Maybe a 100x engineer?)

For fun, he knocks out a spell checker on a plane ride:

https://norvig.com/spell-correct.html

In very concise, well documented, easy to read and understand code, with good performance.

This isn't because Peter doesn't have to look at documentation or has a black desktop background. It's because he can look at a problem and come up with elegant and creative solutions other engineers wouldn't even think of.


Thank you for explaining so succinctly what a 10x engineer is. In fact, that's a 10x for many professions that lend to high creativity and experience.

This out of the way reply to a comment on a post that's a reply to a twitter storm.

This here, this is a major issue I have with 'news'. We are many times busy discussing crap, which is well defined and easy to understand. But the mundane, easy explanation fails to be bait worthy.

Instead what gets picked up is the most extreme, strident and far out explanations. And these seem to dominate public commentary.

jimbokun summarized what a 10x engineer is, in an off hand comment, better than all the fuss that started his comment.


"[A] large distribution of software engineers" is a group that has already been, to some degree, filtered by aptitude and interest. "[A] person you'd randomly find at your community pool" is essentially the same as randomly drawing a person from the population at large.

Also, "more talented" is a much milder statement than "much more productive", which in turn is a much milder statement than "10x". (The first two, as well, are not saying the same thing. Talent != productivity.) Nobody disputes that there is a distribution of talent or productivity among software engineers. People dispute the magnitude of the standard deviation of that distribution.

Going to your Olympic swimmer example, the number of people who qualify for the Olympics in swimming is a small portion of those who try out, which in turn is a small portion of those who are involved in competitive swimming at all levels. Thus, the number of Olympic-level swimmers relative to the overall swimming talent pool is tiny. I don't think anyone disputes that there are a few dozen, maybe even several dozen, people who are several standard deviations better than the average software engineer. What they dispute is that there are companies full of them, or that trying to hire them is a viable strategy.


I don't think it's fair to compare random people in a community pool (even though some can be really good) with engineers with work experience.


Is Michael Phelps ten times faster than your average competitive swimmer, though?


No but he wins 10 times more often.


A software development team probably shouldn't be a "one person wins, everyone else loses" scenario, though.


The ideal "10x engineer" in my mind is one that helps their team win significantly more often. Competitive swimming is maybe not the best analogy (although I have worked with engineers like that before too). If you want sports, maybe basketball. You've got a good team, but you've got a stellar player that makes them all better.


well to simplify it: if 2 competing companies with 1 programmer each were trying to create $popular_app_or_website then the company with the more productive developer would "win" more often


no, businesses win or lose based on sales & marketing, not how productive their engineers are.


Does Michael Phelps deliver 10x more value than the slowest guy on the US team? The multiplier is for value to the organization.


Switch Michael Phelps with Tom Brady.


Okay, but one of these is a massively distributed team and organizational sport, and one of these is an individual sport. One is highly based on hyper-focused physical dexterity and the other is an interdisciplinary form of cooperative knowledge labor to achieve business goals. There's some overlap in so far as technique exists in both, but there exist such vast differences between the failure, passing, and mastery criterion, the process of learning and teaching, and even the actual act of execution that the analogy doesn't really work effectively as a vehicle of language.

This isn't to say I fully disagree with your point, by the way. I'd rather use the analogy of a TV producer, or a movie production, or a band. It's creative output, there's tons of variation in the level of natural and practiced talent, it's highly team based, and the work product is very much a knowledge product. But, even there, differences remain between something you have to use and something you can consume for pleasure.

How about industrial design firms and elite designers? Well, now we're cooking with gas -- when it comes down to it, engineers are still ultimately designing systems that either are dependencies of other systems that people directly use, or are those systems themselves. What makes someone 10x more productive? Is it that they individually produce 10x more output, or that they understand the nuances of the constraints 10x better, or that they're able to make the engineering lifecycle 10x more effective, or some combination of all of the above? I'd say the latter. In that way, there are almost certainly outliers that are more productive than the mean.

And, in my experience, that comes from a combination of individual competence and team/organizational based leadership ability. It's a far cry from the savant 10x individual contributor that the 10x meme originally came from and which many folks across the industry now (rightfully, in my opinion) critique.

I've been a "10x engineer" and I'm not sorry. The difference is, it's not the 10x savant individual contributor. I've made entire organizations 10x more effective, but fundamentally, that was because I learned how to be a good multiplier: how to help people out, help them grow, unblock procedural bottlenecks in a lasting way, resolve misalignment between different divisions in an org, refine a product that was missing the forest for the trees, and so many other things. But that did not come from me being some kind of natural genius, or more "talented" -- it came from me being persistent, and never really being satisfied if I thought things could be improved. It came from me doing that over a long enough period of time that my cumulative output and multipliers ended up indeed 10x-ing things. This is the kind of "10x" engineer that I believe most engineers can become -- not easily, but doably. I've built teams and orgs consisting of these kinds of engineers. And, they'll eat your 10x savant contributors for breakfast.

How does the old saying go? Culture eats strategy for breakfast? It seems trite, but it's always rung true in my experience.


> I learned how to be a good multiplier: how to help people out, help them grow, unblock procedural bottlenecks in a lasting way...

So, here you perfectly describe a 10x middle manager. Or just a "good" middle manager, because I agree this 10x business is kind of silly.

I will never understand why people take all these soft skills unrelated to programming and say they are more important to a programmer than skill at programming. It's not that these skills are undesirable. It's just that, to continue the sports analogies, it is like saying that it is more important for a basketball player to be fast and be a good team player rather than be skilled at shooting and blocking.

If anything it is the other way around, people with good soft skills and bad technical skills are an absolute menace and plague if they try to get involved in anything technical. They have no idea how much they screw up everything they touch.

If you aren't a programmer, and you're a manager of programmers, then fine. A coach needs a totally different skillset than a player and you can be a fine coach even if you are a mediocre player.


EDIT: Have you worked in the industry as an engineer? The following is drawn upon my combined experience as an engineer and as a leader.

Who said I was a manager as I was developing and applying these skills? I was doing this as I was still top of the pack as an engineer. I will never understand why people take all these soft skills that are completely required to do the job of engineering and say they are not part of the job of engineering. What is it with the sports analogies? They're fundamentally inappropriate and imply a deeply reductive conception of the craft of software engineering. You're doing something with a goal far more complicated than "the team with the most points wins".

Moreover, you're drawing a false dichotomy. People with the technical skills to really be highly productive engineers always have the soft skills too. They are both required to sustain high productivity.

But please, don't tell me I'm not a programmer. I'm an excellent engineer, and I've always been near or at the top as an IC. But, that's not in spite of my soft skills. It's because the two create a feedback loop that helped me level up and run things more effectively than engineers that overspecialized on one or the other. And again, the best ones I've worked with have been the same.

If you've seen such engineers, then that's one thing. But if you haven't, implying that you even need to choose, or that the best engineers don't have both -- it's specious. It's something you think must be the case because you don't have a more exhaustive set of data and experiences to draw from. And that's okay! But then, one would hope you'd at least be curious about it rather than dismissing it.

These engineers are not unicorns or mythical creatures. They're competent professionals that take every part of their job seriously. They're the kind I prefer to work alongside and hire.


This person did not shut out his colleagues and work in a bubble because of personal shortcomings. This person was forced to work alone because his company needed very specialized skills and relied on a single person for them. No budget for hiring another person, no time allocated for training someone else. What, is he supposed to make an executive decision to stop doing his work and pull another engineer off their work so he can train them? He was an IT tech, a leaf in the org chart, and management had made the calculation that they saved $X/month by relying solely on him, at the expense of some short-term disruption when he inevitably left, and $X was big enough to win out. The big ego he blames himself for was part of the solution they engineered. The more important he felt, the harder he worked, the more money he saved them.

Also, I think it's in poor taste to make this kind of "confession" or "apology" because sincere apologies can have weight and meaning, and this cheapens them. By arrogating the responsibility and the apology to themselves, this person is protecting the people who created the situation. By blaming his own personal deficiencies, he is obscuring the fact that the business chose (probably intentionally) to benefit financially by relying on a single overworked engineer instead of a team.

Yeah, yeah, I know we're all supposed to claim ownership and responsibility for everything at all times, but sometimes it's appropriate to blame somebody else.


Makes me think of something I wrote a while back...

https://hackernoon.com/10x-rockstar-ninja-wizard-vampires-f5...

"Ninjas are nameless, faceless mercenaries. The ninja’s job is to create mayhem for the highest bidder. The ninja shows up in the dark of night, uses mysterious powers and ruthless violence to create disaster, then disappears in a puff of smoke.

Ninjas are nameless, faceless, heartless, merciless enemies.

Are you sure you want to hire them to work on your code?"

"what makes a wizard a wizard is that they use magic. And unless you’re born with it (Harry Potter), or study ancient and mysterious tomes, you will not be a wizard. Only wizards can understand what other wizards do. Unless your whole team is wizards, you might want to reconsider the idea of using magic rather than proven tech in your code."


I was certainly 10x engineer. Probably closer to 20x at my last job.

My ex-employer was an abusive(msp) employer who couldn't hold onto senior staff. The organization became so tremendously bottom heavy with people just out of school; I would literally have people lined up in my office waiting to talk to me to get help.

I was practically the only person who wrote documentation. I was literally the only person who wrote how-tos. MYself and only 1 other person was the only people to even push positivity. The place was so toxic that everyone was looking for reasons to complain. I'd have people come into my office to hide from dispatch/work.

Long story short, I reported harassment and got fired the next day. Over the next 6 months that place shed over 20 people out of 30 staff.

The workload I took on doing 60 hour weeks and 24x7 on-call had to be given to others. Everyone else said that was enough and found new jobs.


I can kind of relate to you. Not sure about the 10x but on the previous job I ended up working as team lead, pm, janitor, process developer, architecture guy, partially managing the infra, teaching the stuff to others etc. We had quite good team spirit and the people were generally awesome but there were management issues which broke our focus into pieces and we didn't get any real progress on the important stuff. In the end I didn't even realise how burnt-out I was (just trying to help and fix all the things for other devs so somebody could get something meaningful done) until some headhunter tried to recruit me and I started going through pros and cons. Switching to a job with a real focus has helped a lot and I learned a lot from that experience but happy to be somewhere else.

That company kind of imploded as there was about ten working when I left and now there's three guys left trying to get the work done. Luckily their focus has finally changed and tightened and there may be some good stuff brewing up so I'm cheering for them. Still missing working with those guys, though.


Basically the same idea, I was the team lead, DBA, PM, network admin, sysadmin, linux admin, hardware, customer relations, all emergency work.

I had to babysit coworkers who were impossible to work with and had been banned from multiple customers because they had temper tantrums toward the client.

I got so tremendously burnt out and when I started realizing it and analyzed what's going on, I had a guy harassing me, I wrote up an email detailing the shit the guy was doing to me and the day after i report the harassment I got fired.


I don’t think the author understands what a 10x engineer is. It’s not down to tons of research and work. It’s a matter of having a knack for it.


Often “having a knack for it” amounts to simply having spent more time and effort on the subject.

Like in university, I could 10x nearly any other student at programming... almost a direct result of the fact that I actually read man pages, documentation and the longer stack overflow posts.

And people would assume I was just somehow inherently good at programming.. but no, I’m awful at it; I just learned to read.

And no one will believe it


> letting himself become a single point of failure

Will always happen if the problem is complex and the org small enough.

If you do it voluntarily, you are probably not that a great engineer. But even the good ones fail at some point.

Finding someone who can replace you is very difficult in average mid-sized cities. And most problems aren't even restricted to the extremely pluralistic software environments we have and additionally need experience in specific domains.


I strongly disagree. What you perceive as a "knack" was often developed by putting in lots of dedicated effort over a long period of time, under the right conditions.


The author was responding to a specific (and ridiculous) definition of 10x engineer provided by a VC on Twitter. He makes this clear in the first paragraph of the article.

Take more time to understand the context before assuming a lack of understanding.


> As I reminisced I realized that I was, in fact, a 10x Engineer.

He doesn't understand what a 10x is. Not even from the tweets.


I am more concerned about the 1/10x engineer. There are a lot more of these, 1/10 as effective as any average engineer.


10x engineer = quiet working environment absent of distractions 2.6x * 2x the number of productive hours by removing and shortening meetings * 2x engineering ability and company culture with no obstacles to productivity


I don't believe for a second that actual 10x developers behave this way, because there's nothing 10x about this behaviour. A real 10x developer would be someone who enables their fellow team members to be 2x developers. Or who creates a solution which is twice as X, twice as Y and 2.5x more Z — for any useful metrics X, Y and Z — than an acceptable solution. Basically their impact is 10x, not in terms of code or features, but in terms of value created in aggregate.


One lesson we can all learn from this: You don't hire a x10 engineer, you nuture it. Year by year, as an engineer develops more and more of the skills required, their productivity increases. A lot of engineers doing hiring, think they can just get one of these engineers off the shelf by paying some recruiter 50 grand to make one materialize. It doesn't work that way. x10 engineers are born of years of company specific specialized labor.


Acquiring knowledge that nobody else has in more than one critical system isn't necessarily a 10x engineer, more like an engineer who is critical to the business in (up to) 10 different systems or intersections of system. Management should try to minimize situations where only one person knows how to operate critical systems (see the character Brent in "The Phoenix Project") but that's not what I understand 10x to be. To me (as a developer), a 10x is someone who eats, breathes, and sleeps nothing but the job and can literally crank out 10x the lines of code. Whether other can maintain or understand that code is one problem with having a single person outperform their peers by so much; it also means that if management doesn't recognize this as an aberration then when that person hits the lottery/gets a better offer/gets bored and quits/is hit by a bus you're in a position of trying to explain to senior management why you're going to need to hire five people to replace the one 10x person.

This isn't to crap on the raw ability and talent of a 10x -- I'm massively envious of that ability! -- only to point out that with disproportionate output comes consequences.


Excerpt:

"I wasn’t just the most important cog in the machine – I was the machine. Nothing went forward unless I was doing it. And that’s not scalable at all."

10x'er vs. Scalability of 10x'er (when/where/how 10x scales, when/where/how 10x does NOT scale, etc.)...

An interesting subject for future business thought leaders, is it not?


It's a fine line.

I've moved up to Network Architect and I'm working hard to replicate my knowledge out to small network team so I don't have to work tickets anymore.

One of the reasons for the promotion is the understanding I have across categories- firewall, voice, VPN, APIs, Proxy, MPLS, layer 2, and so forth. Unfortunately, that really does make me more effective troubleshooting than the specialists on the team, even fairly experienced ones. But it also makes me most valuable at an architectural level. So I'm working hard to make sure that everything is documented and their is 2 deep understanding of the things I worked on so that I can be free to build up the future.

The irreplaceable man/woman can't ever get a real promotion because they'll be stuck at whatever they are doing today. Being valuable and a 'bargain' at almost any price is much better.


Letting one engineer obtain so much domain knowledge that they become a single point of failure in an organization strikes me as strictly a management failure. His manager ignored the bus factor and then when he/she realized it was an issue they just... did nothing? Because it'd be hard?


I say this every time the mythical 10x engineer thing shows up.

I've _never_ heard of a 10x salary difference for engineers. If you are a 10x engineer, that strongly suggests you're giving away free productivity to your boss.

If you own your own company, great! Even better would be to give 2x of your productivity to your boss, which is probably more than you're being compensated for, and use the 8x leftover for your own enrichment.

But there is almost literally no way that you are being fairly compensated if you really are 10 times as productive as your average engineer.


> I've _never_ heard of a 10x salary difference for engineers.

A Netflix engineer was on HN the other day claiming they make 800k and work from home.

> But there is almost literally no way that you are being fairly compensated if you really are 10 times as productive as your average engineer.

(Assuming they exist, of course) I'd wager if a 10x engineer was involved in a mundane business, they would be 10x without giving 100% of their time. Or rather, they'd give 100% of their time sometimes, and 20% of their time more often.


What is the term for being a bit too eager junior making some systems that become business critical and then getting some second hand shame for making something the existing team can't support.


This does not look like the description of "10x engineer" at all. An "immature engineer"? Yes. But "10x engineer? No.

A true "10x engineer" would also care a great deal about documenting stuff, communicating that to the team, and be wise to ensure that a good technology system should not have a single point of failure (either technical or human). The fact this so-called 10x engineer made himself a single point of failure goes against the basic principles of engineering.


So, once I had a inspiration talk to a soon to be new grads. When I was preparing a presentation, I realized, that 10x engineer is not necessarily the one who does 10x more work, but the one who can empower /inspire others to do much more work.

So, I put a funny slide - if any of you get inspired by my talk and do something great, then you are looking right now on this unicorn 10x or maybe 100x eng.

The bottom line, helping others will make you 10x, not putting yourself as a bottleneck everywhere.


Are we, as HN-ers, really going to accept self-certification of the 10X moniker? What exactly makes this person a 10X engineer, leave alone a good engineer.

He claims to have not been liked while a 10X-er, but pivots successfully into founding an inter-personal-relationship heavy company, whose U.S.P. is decidedly not engineering, and we're all to believe his self certification of the 10X moniker, if such a thing even exists.


I don't know about the actual "10x" label or how to even measure that objectively. And I am not even gonna go discussing the weekend tweet storm.

But, programmers can tremendously improve their own efficiency/output by building their own collection of libraries and toolkits.

Pretty much by now, we all have seen more or less the same things. So if we have a vast archive of tools, our productivity can be crazy high.


When I started reading this, I thought, it may be a boast in disguise. But this article is very well written and seems utmost sincere.

I almost feel like sending this to a "10x Engineer" in my team. (Its in quotes, because I do believe in the 10x concept, minus the negative baggage which it is associated with, and as the article shows, also can be true.


10x engineering is, for the most part, knowing how to avoid 90% of useless efforts due to over-engineering solutions. It has nothing to do with being a dick to work more or alike. I think that what makes all of us 10x sometimes in our programming career is what we do when we are not writing code, but thinking at how to design it.


overengineering, sure, but also underengineering


Back in 2000 we used the term 10x Engineer primarily to mean Full Stack Engineer.

In other words, you needed to hire 10 people with individual skill sets to match one Generalist who understood the entire stack.

The term appears have morphed and skewed over the years. Regression toward the mean has shifted the expectations for "average" programmers.


Back then, a "10x engineer" was something like what the OP described here: technical skill several standard deviations from the mean in a variety of areas.

Today, a "10x engineer" to me is someone that is very technically competent but is _also_ competent with people and business needs.

The latter is much harder to find than the former, IMO.


This! Ten times this! Single dependencies like this are absolutely a risk management issue.

I say this as someone who's both been a single point of failure at times (and learned my lesson) and someone who's had to clean up after piles of "clever" code that someone left behind when they got hired out somewhere else.


Linus brought us Linux and Git. To me, he's probably the greatest programmer of our time.

James Strachan brought us Camel and Groovy. That's pretty good.

Gavin King had Hibernate and Seam. Not too shabby, either.

There are definitely people who are very good. To me, having more than one runaway hit is a good indicator.

But there are a very few of them.


Having a runaway hit isn't just about creating it, but also successfully maintaining it. Strachan abandoned Apache Groovy only 2 years after creating it so he doesn't really count. Unfortunately he let in someone without any programming aptitude into the Codehaus despotry, and was eventually eased out with stirred up conflicts like the one over builder syntax in Dec 2005. He even had his commit privileges stripped from him afterwards.


> But there are very few of them

On the contrary, I think, there are quite a few of them still. Just look at people who created Python, Emacs, Vi, Sublime Text, Charles Proxy, Nginx, Apache Httpd. And this is just scraping the surface of the useful software in the OSS.

May be percentage wise, they are less. But even a .1% of millions, still makes it in the 1000s. And lot of others who perhaps have the potential, but sadly never realize it.


This guy can't be a 10x engineer, because the first thing you learn when being admitted in "Rule #1: you do not talk about 10x engineers" (I can, because I wasn't invited myself and heard it via someone they dumped).


In order to truly become an insufferable 10x Engineering talent...

Neither the author nor the toot thread that inspired the author seem to have the first clue what the term means. And it would take, what, six words to define it?


This article does not represent the same concept of 10x that Brooks proposed in Mythical Man Month. The present article is about an arrogant jerk who was managed exceptionally badly.


wow, that site’s ads are so invasive I can barely read the content


You've forgotten to install uBlock Origin, or you're using the default browser on Android which doesn't allow you to block ads/trackers, in which case you could install Firefox and then uBlock Origin.


Sorry about that. Free Wordpress installations have a lot of ads. I need to do something about that...


You've got everyone's favorite "This One Vegetable Destroys You From The Inside" and "No Diet Or Gym - Try This" advertising variety. They make your site look much lower quality than it probably is.

When I opened it in IE to see it without my adblocker I also got an alert about trying to download or run a javascript file. Probably incompetence on the ad network's part (it doesn't look any more malicious than your average ad network tracker), but prompting people to download random 3rd party js files isn't a good look either.

https://i.imgur.com/gIoJY7v.png


I used to run a PHP CMS then ditched it for Ghost CMS, I won't post the link but I would recommend you try it out. You can also migrate your content/posts from WP --> Ghost


Your ad blocker is probably misconfigured.


"A 10x engineer is usually levitating, and farting out 1's and 0's as they whiteboard a proof that P=NP. They stopped sleeping before they were born. They are usually typing on two keyboards simultaneously."


10x at one job - developed huge hunks of the infrastructure, not quite at Jeff Dean level but extremely valuable, nice friendly colleague, well commented clean code.


I was a 20x engineer. I apologize as well.


I've never understood the fake shame one is supposed to feel at being productive, resourceful, and seeking to work with passion while removing speed limits. I'm reminded of this article about three personalities and different stages of a startup: https://blog.codinghorror.com/commandos-infantry-and-police/

There's no shame in being a Commando, or even a Rick. (https://www.freecodecamp.org/news/we-fired-our-top-talent-be...) And a business can certainly continue to get high value out of these personality types.

If you are one, though, there are many practical things you need to learn. First, you need to remove temper and emotions from your work personality. I really recommend regular meditation for this. Also take vacations even when you don't think you need it (stress is a sneaky beast). You need to let go of some work you did that you hold dear, and realize that you will need to hand off to people who will not do things as perfectly or with such attention to detail, and may need structure and guardrails and speed limits that will frustrate you to no end. (E.g. Scrum, story points, more rigidity around testing, mandatory code review around trivial commits, security reviews.) The commandos need to make way for those who are able to march in step.

My second piece of advice is, as a company grows you need to narrow your scope to a point where you can still be the most productive version of yourself, but you aren't carrying such a burden that you burn out. (Also my advice for managers who find themselves with a Rick kind character.) The main skills you need to learn for this are communication and diplomacy. If the company wants to get into a new area, full of unblazed trails, with a very high amount of risk and technical difficulty, as a commando this is perfect for you.

TLDR if you are a tiger, better to find an area where you thrive vs pretending to be a mediocre wolf.


A 10x shouldn't be ashamed of their talent or try to be something else; the biggest problem with 10x talent is that they are mismanaged in a way that doesn't treat them as the benevolent freak that they are. In some cases other folks are berated for not keeping up with the 10x; in others they drown in trying to manage the technical debt being created by someone who produces an order of magnitude more than them. When mismanaged, these effects on the rest of the team lead to a drop in morale and turnover... which will likely lead to management coaxing the 10x to deliver even more which only makes the problem worse.


Being a 10X engineer at a small company I would say is both true and somewhat different at the same time. In the author's case it sounds like these were smaller companies? At every small company, there are people that are "super important", but similarly many people in different non-engineering roles are also "super important". My thinking at least on the 10X engineer concept was more like somebody who shows up at a larger company like Google or Apple and proceeds to make everybody there look like they are standing still while he/she produces far more / greater quality stuff than the average person there. In that case, if they left, sure the company would still keeping going, but you are outside of the 1-2 quantization question around where somebody is truly substantially more skilled than their peers. Big fish in a small pond vs. Big fish in a bigg-ish pond on the engineering side. It doesn't mean that you aren't necessarily a 10X engineer at a small company, but it just means the frame of reference is super unclear whether you are talking about somebody who is really hard to replace and super important to the company vs. somebody who truly is just knocking it out of the park left and right.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: