The 10x programmer is a silly myth. The idea that someone can produce in 1 day what another competent, hard working, similarly experienced programmer can produce in 2 weeks is silly.
You know, 10x is an optimistic number here. Some programmers will do in 1 day what you wont achieve in a life time. And not understanding that makes you a bad programmer by my book simply because this is the foundation of the job.
So let me give one advice: you are not producing code, you are engineering code. Some will find solutions that the others will not find. Thats where the 10x programmer thing come from. The guy who wrote bittorrent said something like the following: "I've written bittorrent in a way you would never have thought about".
You think John Carmack was the only one trying to make 3d games when Doom came out? Thousands of programmers where trying to. Does that make him a 10x programmer in your opinion? Or more like a 1000x?
Agreed, I don't know why the industry (or people?) in general have a problem with accepting this abilities gap.
It's as if the notion of people being arbitrarily born more or less with a knack for something is evil.
Let me tell you the story of when I realized I was (at best), a "not-mediocre" dev:
1. I've been programming for fun even as a kid. That's what got me into it: If you count kid-programming as "programming", I've been programming for ~14-15 years.
2. There was a girl who used to work with me at $DAYJOB, who is fairly well-known on The Orange Website, and has written some "thought leader" papers in certain niches. A real einstein.
I asked her in DM at work about her background and how long she's been coding -- both in general and the language she's well-known for. The answer was:
"A couple of years -- and a few of those were writing another language. This is my first real job writing $LANGUAGE_WELL_KNOWN_FOR."
Well, fuck me.
This is called "innate ability". Humans aren't created equal, nobody said they had to be, and it's not a crime to acknowledge it. Folks ought to get over it IMO, it's not a big deal.
I will never understand CS and programming-language theory concepts at that caliber or that intuitively, but who cares?
I'm also short as fuck so I doubt I'll be playing in the NBA anytime soon either. Life goes on.
There was some tweet recently that went "Saying 10x engineers don't exist is as true as saying 10x basketball players don't exist or that all writers are basically the same." It's self-evidently not true.
No. It's like saying that a good mechanic can fix a car 10 times faster than another. Even if a good mechanic manages to find the problem in less time than a non experienced one, he still has to do the repair.
That is similar to programming: even if you have everything clear in your head, you know how to do every single thing that is written in the requirements of the program, you still have to type it out.
A lot of time I thought, well this is fairly easy, and then spent I month just typing out code.
The only situation where really a more experienced programmer can be more or less 10 times faster than a non experienced one is in debugging/troubleshooting problems, because with more experience he tends to know by experience where it's most likely that the problem is and thus test in that direction.
You are misunderstanding the definition. A 10x developer does not write code ten times faster than average. They have ten times higher impact on the results of an organization than average. And that's not far-fetched at all. This does not magically happen. There are individuals behind it, often a surprisingly small number doing the critical work that visibly brings the world forward.
It's not about writing a regular boring CRUD app that no one cares about as fast as 10 regular developers. It's about choosing the right problems to solve on their own initiative, building the foundation of a technology organization that can sustainably & quickly grow in scope and users, being the first to solve a problem no one else has understood such that the organization crushes their competition and so on.
Leading the development of web software that scales to 100 million users in 2003. Planning novel computer vision algorithms to a vehicle fleet of millions of vehicles, running on custom hardware they've also made contributions towards. Realizing that consumer VR headsets are now _just barely possible_ if you do everything right, and bringing it to market. Etc.
This is the difference between a small organization being capable of solving a difficult business problem and achieving profitability, and not.
F1 mechanics changes tires in 2 seconds. For my local workshop it takes an hour. That's like 1000x.
Bad analogies aside, as others already pointed out, the biggest gain is usually on more creative and architectural tasks with amplified impact, where the requirements given are not as clear as code. Not how fast you change a bolt or type 100LOC. Instead, for example choosing the right tools instead of reinventing your own, or writing a composable interface that enables integration with other tools instead of of an unmaintainable spaghetti monstrosity.
I'm not sure that fixing something that is broken is a good allegory for what programmers do, because a lot of us (most of us?) create new things.
The impact that creating something new can have can range from changing the course of history, to literally nothing (like most everything I've written).
Programmers and mechanics have a vastly different impact potential than one another.
No: One developer probably cannot _type_ x10 as fast as another. But they might be able to write code that can cure cancer -- while you/I can only regurgitate the same CRUD app over and over.
IMO having a fancier keyboard that does more clickety-clack will not make you a better programmer. If anything, your co-workers cannot work as good and will have to put more energy to focus.
Experience and the skill to remember or recall well, help a lot with engineering.
A fancy keyboard on its own is probably not a good indicator.
But I would switch this around and definitely say with my few years of experience, those that were “the best” were also those that were interested the most in their tools of the trade.
And whether that is a mechanical keyboard or a better screen or better performance or better IDE setups. Doesn’t really matter. Sadly many companies don’t seem to encourage this enough imho
> Agreed, I don't know why the industry (or people?) in general have a problem with accepting this abilities gap.
I don’t think it’s that people have a problem admitting that there are significant outliers. It’s that there’s a backlash to the fetishization of “hiring 10x programmers” and most people claiming to be one really aren’t.
I know I’m good at it, but I am not and will probably never get to 10x on just writing code. I’ve worked with people who have a better claim to being a 10x. And having seen that, I have also never encountered any company that claims to hire 10x engineers that actually has a process to consistently hire even 1-2x engineers.
If there are 10x engineers, it's a right place, right time situation. Very good engineers with the right experience, luck, a good idea, and the relentless desire to execute. Miss any of those things, and you can still be a a multiplier, just probably not 10x.
Even so at my companies the difference between between good engineers and bad is massive (a lot of the difference is talent and motivation). Imagine you had a company full of shitty engineers, a motivated good engineer in the right could deliver 10x the value of some shit engineer
There's honestly quite a few developers that produce zero or negative value (e.g. by implementing the wrong things, introducing lots of bugs or significant complexity etc). 10x:ing them is not difficult.
Totally agree with you. I’m in the same category and have had to accept my fate to some degree. I keep improving relative to myself, but that’s all I can reasonably do.
What gets me is when I meet many of these “innate talent” coders I get to hear phrases like:
“I just want to work with the best possible team…”
And then from their behaviour, you see how they get irritated with the regular folks and try and convince everyone that if we all just “be more like them” it’ll all work better.
Many of them are blind to how much their talents make what is easy for them, very hard for the rest of us.
Regarding this issue of "innate" talent, I want to ask, how do you know?
there are just so many variables that go into human cognition. Belief. Drive. Focus. Grit. Exposure to ideas. Social support. Physical resources. Exercise. Health.
Each of these contribute, in some way, to every moment we spend learning. They are always changing. Each moment we learn affects the outcome of the next. It's Conway's game of life in n-dimensions.
My second question, and this is perhaps more important; what is the effect of a belief in innate talent? What don't you do or try because you believed it wouldn't work? Because you believed you couldn't? What do you beliefs cost you?
I realize my questions are pointed, and for that I apologize. They are, however, genuine.
They've done some pretty extensive studies on ability / achievement. The big driver being parents wanting to ensure their kids turn out great, or to make their kids smart.
Turns out environment can only really have _detrimental_ effects on outcomes for kids. You can't increase what they don't have, but you definitely can fuck them up. I thought it was pretty interesting.
So basically, the advice most parents get now is, don't drop them on their head :) Of course, that also means provide them with the opportunities to learn / use their ability.
Think of it like folks being born at a certain IQ, and you can really only maintain it (exercise, love, healthy eating, sleep, etc.) You can't bolster it beyond what is innate. However, you (and your environment, typically our parents) can definitely cause decreases in your IQ (poor sleep, anxiety, poor nutrition, toxins like lead, etc.)
I found it pretty interesting, but also kind of obvious in hindsight. I would love to be able to increase my IQ, as would many others, but we all gotta just work the best to maximize what we got. Maybe tech / gene manipulation will make it possible in the future though.
So, there are a ton of resources out there on how unreliable IQ is, and whether it's a valid indicator of general cognitive ability. Instead of linking them, I'll just link to the place that has the most good links:
https://en.wikipedia.org/wiki/Intelligence_quotient#Reliabil...
My understanding is that save for general statistical measures of a large aggregate, IQ is a poor measure for an individual (as it has been shown to change quite a bit for individuals over the course of a lifetime).
It’s probably not important whether the talent is encoded in someone’s DNA or whether it was formed during their childhood and early education they got. But by the time people are teenagers, there can be large differences in learning ability that are impossible to level anymore. You can push through those differences through “belief, drive, focus, grit,” etc, but the baselines are different.
You can learn a new foreign language when you’re 20. But it’s way easier when you’re 10 or 5. Same goes for learning to play chess, to code, and more broadly, for learning to learn.
I'm 35. I started learning to code 5 years ago. I have a job in the industry, and I advance my understanding of the space daily - I'm sorry, but that just doesn't gel with the actual, firsthand experience I have with this stuff.
You're never past expanding your understanding of the world.
Isn't this because everything is new to you when you have close to no life experience? Aside from our default programming mode of eat, sleep, walk the bucket we call brain is practically empty of experiences and theories when we are 5.
> Agreed, I don't know why the industry (or people?) in general have a problem with accepting this abilities gap.
Bias and poor processes. When people become reliant upon a technique or process to attain viability that means of execution becomes more important than the thing you are producing. As a result people will defend slow unproductive means of execution to the death. This is also a socially reinforced phenomenon.
It is completely realistic to achieve 10x (or even much greater) productivity and it isn’t challenging, but it requires abandonment of closely held ideas that are socially reinforced.
> It is completely realistic to achieve 10x (or even much greater) productivity and it isn’t challenging, but it requires abandonment of closely held ideas that are socially reinforced.
1) Less code. The less there is the less there is to debug and maintain. This applies to all code including dependencies, frameworks, abstractions, and decoration in your own code. If abandoning OOP means substantially less code then do it without question.
2) Iterate faster. If you have a build that takes 10 minutes and the next guy has a build that takes less than a minute they can fail 10x more frequently and achieve the same level of productivity.
3) Know your foundations with confidence. Things you rely upon become more of a barrier than a help given a long enough time line (shorter time line that could otherwise imagine).
4) The point of software is automation. If you find you are doing manual curation in the code you are likely wasting your productivity. An investment in better automation returns interest on the initial investment.
More opinionated personal preferences:
1) Unless you are writing in a language where you manage access to memory, such as C++ or Rust, abandon OOP. In garbage collected languages like Java, JavaScript, C# it only provides composition. It is a tremendous increase in code that does more harm in troubleshooting.
2) Prefer a statically typed language. As a JavaScript developer I have fallen in love with TypeScript. There are performance benefits to ensuring all primitives are strongly typed, but the developer performance benefits come from typing complex types. This is a quick win for defining execution of microservices and functional programming.
3) Prefer functional programming techniques and code portability. Code is less defective when it is highly predictable and explicit.
4) Save composition for last. Don't worry about how to put things together. Complete each micro-task in isolation, which forces a separation of concerns. Once everything is written putting things together becomes natural and typically works itself out.
5) Avoid pronouns in the code. The pronoun of JavaScript is the keyword this. Don't use it. You don't need it. I have been writing in this language full time for 13 years both at work and for personal projects. In that time I have really needed this only twice. The problem with pronouns is that they aren't clear (in either value or intention) by just reading the code, which takes substantially more time to interpret as a human.
6) Think in writing. You can save some refactoring effort by having a solid execution plan. The best way to plan is write things down as if to explain it to somebody who has no idea. If you cannot even explain it to yourself you won't be able to do in code.
> 2) Iterate faster. If you have a build that takes 10 minutes and the next guy has a build that takes less than a minute they can fail 10x more frequently and achieve the same level of productivity.
I think this is very under rated. There are so many things that can reduce developer latency (time between making a change to the code and seeing if it works, or deploying to production) is one of the most under rated aspects of software engineering productivity.
The reason people struggle with the idea of 10x programmers is that people are very bad at evaluating the impact of others. Obviously we can all agree on a select few but for those who are just "regular" workers there is often not enough context.
I think it's also because we have a lot of ego. Let's admit it. There are some people who have a rare insight or mobilize people and code in a way that provides 10x value to the company and people.
Think about all the kickass Python libraries people have wrote. Those provide 10x value across the board to entire industries.
> I don't know why the industry (or people?) in general have a problem with accepting this abilities gap.
Because it's not in their interest to accept it openly.
What would be the point of a employer to tell their employees that they are mediocre at best and no matter how hard they try they will never shine? That is the exact opposite of the carrot dangling ever slightly out of reach.
Why would someone blessed by luck tell their employees he didn't get there by working himself to death?
McDonalds is a money printing machine despite not using world class chefs. Telling everybody they can code depending on effort and hiring them for relatively cheap is a solid business plan.
I figure there are a lot of aspects to the job and I'm exceptional at some of the ones most people suck at, and I dont know much about some common things and can find that embarrassing at times. The rest I'm average. So I try to find work where I can bring those less common skills, and I try to fill my gaps too sometimes. Everyone is different, find a place that needs what you have to offer.
I accepted this long ago. I don't have the right brain to be an über-dev, I'm not technically gifted, I just have a high enough IQ to brute-force my way through technical challenges.
I'm great at writing, simplifying technical concepts, and strategizing on larger projects, so I try to work to those strengths, which usually means making my PM's life a hell of a lot easier.
> It's as if the notion of people being arbitrarily born more or less with a knack for something is evil.
The stretch from person A is a better programmer / SW engineer than B to 'thus, person A is innately better' is unnecessary.
In my experience, the programmer that spends more time programming is almost always better than the one who does not. You can hate side projects, open-source work, whatever as much as you want, but IME, the programmers that engage in that (and thus have multiple times more actual experience than one who works 9-5) are universally the 10x people.
In other words, it's not innate intelligence... it's simple effort and working towards improvement.
Now... there are some people that are truly just stellar, and I can attribute perhaps some of this to innate ability, but the difference between mediocre programmer and 10x is typically one of hard work. Between 10x and the extremely rare 100x... well maybe we can talk brain differences. Those programmers are so rare though, it's futile to expect you'd be able to hire them, since there's not enough supply. 10x is good enough.
> You can hate side projects, open-source work, whatever as much as you want, but IME, the programmers that engage in that (and thus have multiple times more actual experience than one who works 9-5) are universally the 10x people.
The usual correlation-vs-causation disclaimer goes here. How many open source developers spend time on it because they produce good code?
I spent quite a bit of time on side projects and helping (as I thought) others with projects that I like. After many years of doing this I have come to the conclusion that I simply cannot produce really good code. So rather than being a drain on already overworked maintainers I decided not to bother them anymore. Seeing a few others starting 5-10 years later and quickly outrunning me is quite discouraging, but such is life.
> "I spent quite a bit of time on side projects and helping (as I thought) others with projects that I like. After many years of doing this I have come to the conclusion that I simply cannot produce really good code."
I have essentially no hobbies outside of programming, and a ton of side projects + OSS contributions in free time (check my GitHub) and I'm still no x10 dev.
Who cares if it's "GOOD" code -- did you have fun/did you enjoy it? It surely couldn't have been SHIT code, because you cared even the slightest degree.
Statistically, I figure most people writing code don't give a rat's ass and are there to pay rent.
"GOOD" is just skewed by the fact that you can also write code so brilliant it changes the course of humanity -- that's quite an upper bound to place on "great" or "10/10" code.
-------
On the topic of "x10 Developer/Engineer" and terminology:
You know "that 1 genius kid in the grade/school" who is just on a completely different level -- that's been my experience with these "x10" programmers.
There's a 17 year old in the Scala Discord (christ, she's legally a CHILD!) that I thought was a 30-something with some higher degree and was teaching me a bunch of stuff. I about spit out my drink when it casually came up in conversation from some older regular that she was 17.
Half of what she says I can't understand.
That's the sort of thing that comes to mind, for me anyways. Even though I live and breathe code, I think I'd have to be delusional to think I'd ever be as competent as her.
I could maybe memorize the amount of KNOWLEDGE she has currently, but there's a depth of understanding that I can't begin to comprehend.
I’m not sure if you described 10x people or one-track minds.
I love programming, I’m good at it, but what I do with my free time isn’t necessarily related to programming but is still definitely productive. I read up on economics, politics, maybe write a few essays or short stories, work out, pick up a new skill or something. Somehow being a holistic person is now considered mediocre?
Those with one track minds tend to excel specifically at the one track they dedicate themselves to while failing at other things. There are also those who are good at many things. Both have valuable skills (and both are actually well compensated and highly necessary for companies, IME). But if you want to be that guy who can just crank out code for any problem, then I believe this ability is based on the amount of time you've spent coding, which, for those who have one-track minds, is naturally going to be a lot more than the average programmer. It takes all types. There is no value judgement in my descriptions.
> You think John Carmack was the only one trying to make 3d games when Doom came out? Thousands of programmers where trying to. Does that make him a 10x programmer in your opinion? Or more like a 1000x?
I think the idea of 10x programmers gets so much pushback because it's often bundled with this kind of toxic hero worship. There's a difference between acknowledging the impressive ability of outliers, and idolizing heroic one-man efforts as the pinnacle of what we should all aspire to as software developers.
Incidentally, Carmack was not the only programmer on early id Software games, and Doom was far from the first 3d first-person game made. Arguably, it wasn't even that ambitious compared to, say, Ultima Underworld, but the programmers working on that get much less immediate recognition.
As a matter of fact, these discussions often remind me of that famous IGN quote of Warren Spector. Except we really should know better on HN.
Theres also this insane idea that people are just come out of the womb as 10x devs, as though they are literally different breeds and there is no amount of studying or effort that could bridge the gap. Its like a bunch of people who still believe their dad is magical & best and haven't discovered that we're all made of mostly the same stuff.
This is the opposite of how you should want any knowledge worker to think. If you believe that there’s some innate ability that makes people 10x better at a skill than you rather than hours of practice and study then you are much less likely to acquire that skill or learn those skills efficiently. You need to have a growth mindset to be an effective knowledge worker not a fixed mindset.
This is discussed in the book Make It Stick on learning science, in chapter 7 they discuss how your own views on whether skill is innate vs the result of practice affects your own ability to learn and grow.
> This is the opposite of how you should want any knowledge worker to think.
Some of us don't choose our beliefs based on what is most convenient or most beneficial to us. Instead, we try to see the world for what it is, truthfully (or as close to a true representation of the world as it's possible to get, anyway). If having a realistic worldview hinders my ability to learn, then so be it. Not everything is about maximizing productivity.
> If having a realistic worldview hinders my ability to learn, then so be it.
I think the point is that the worldview you described is not realistic.
Many people are successful because of hard work and dedication. Sometimes having talent in a tangential field (design, reading, being a good listener) is enough to make you an excellent engineer or team member. Success is complicated and often depends more on the world than on your particular attributes. Example: Maxwell was a true genius, but he had Faraday's life's work to read through. Faraday was a hard worker and a meticulous note taker who didn't really know math, but without his work Maxwell would not have been able to write his equations. Can you imagine if Faraday gave up science because he wasn't good at math?
I feel the core idea is that hard work and deliberate practice will move both those with talent and those without forward and fretting over things you cannot change is an exercise in futility, and you're rather focus on things that you can change.
I fully you agree with you here. But that's not the core idea in the post you're referring to. The core idea in that post was that beliefs should be chosen based on utility, as opposed to truthfulness. I disagree with that idea, because I think truth has inherent value in and of itself. I want to believe things that are true, even if those beliefs are harmful to me.
Furthermore, the poster has very clearly expressed in subsequent posts that they don't believe talent ("innate ability") exists. I strongly disagree with this idea as well, and there is a mountain of evidence to support my position.
Nope. Just because it says so in a book doesn't make it true. When you make a statement of the form "X does not exist", a single counter-example is sufficient to prove you wrong. Lucky for me, many such counter-examples exist, and many have even been discussed in this thread. I'll add one to the list: tourist (Gennady Korotkevich). He's a competitive coder that's several orders of magnitude (e.g. 1000x) better at coding competitions than the average competitor. And the average competitor is a few orders of magnitude better than the average professional programmer who doesn't have algorithm experience. All of this is measurable (at most we can quibble about whether the skill differences are 100x or 10000x or infinite). If you don't believe me, please go and take a simulated Codeforces competition right now and see how long it will take you to solve some set of problems that tourist solved in under 2 hours (or if you will be able to solve them at all - I certainly won't be able to solve the hardest Codeforces div1 problems no matter how much time I put in).
I have a feeling this mountain of empirical evidence was insufficient to change your mind about this. I would appreciate if you could take the time to explain why? Why is this evidence not enough?
I think you’re missing the point or I was unclear. The point is not that masters at a skill don't exist. The point is that attributing their skill mostly to something innate rather than practice, study, etc is not supported by the body of research they review in the book (the book is written for a general audience, their academic research supports the arguments in the book).
There is a mountain of evidence to the contrary. No matter how much you or I would practice, study, etc. we would never become as good as tourist. Most people reach their plateau in competitive coding within 1 year.
is it at all possible that practice and study are insufficient to create further growth? What I think faizshah is talking about is that there is enormous complexity that goes into creating skill.
what sort of community do you leverage for their knowledge? how frequently do you expose yourself to new ideas? do you practice abstraction in places other than code? do you practice effectively and take notes that you review? keep a journal? meditate? are you in good cardiovascular shape?
all of these are the tip of the iceberg when it comes to contributing factors. a plateau is a sign of stagnant processes.
I apologize in advance for what I'm sure is a frustrating tone. I'm sympathetic to your situation.
> is it at all possible that practice and study are insufficient to create further growth? What I think faizshah is talking about is that there is enormous complexity that goes into creating skill.
Sure there is enormous complexity and many factors that go into creating skill, but that's a generic claim, whereas faizsah was making some specific claims. In particular, they were claiming that talent does not exist (or "innate ability" is not a significant contributor to creation of skill, if you want to phrase it more softly). There is a mountain of evidence to show that innate ability is one of the largest differentiating factors between "masters" at a skill compared to "normal people" who practice that skill.
> a plateau is a sign of stagnant processes.
Nope, there are limits to achievable skill. If I practice height jumping, I'm going to plateau pretty quickly and make only incremental improvements even with the best of processes. Same goes for mental pursuits like competitive programming as well.
... And the limits are personal, and can vary immensely, unfair as it might be. Some people high jump 2.45 meter, or design a spaceship that flies to the moon, whilst most people couldn't do this in a thousand lifetimes
Usually, though, people don't do something for long enough to get close to their limits, so, generally in life, all this doesn't matter that much, does it.
And to keep trying and doing what one enjoy is good advice :-)
As your sports coach always said "You don't need talent to practice!"
I'm not a huge believer of some mystical "innate ability" that people sometimes use to explain talent. Imagine a great concert pianist who plays flawlessly. After the concert, someone says, "Oh, you were born with such a wonderful gift of talent!" If I were that pianist, I'd be kind of offended--it totally ignores the decades of daily practice it took to get that good. Or a chess grandmaster. You're such a natural! Oh yea? STFU, this took years of grinding!
Talent is used as a label by someone who doesn't understand the practice involved in the given craft.
No one wakes up and paints a masterpiece. It takes years and years of hard work and studying to get to a point before you can even get close to masterpiece level.
The 2 aren’t mutually exclusive. You need talent and hard work to be “the best” in any given field. It doesn’t matter how hard I practice, I’m not going to be a world class sprinter or a world famous singer, my body isn’t built for it.
For some reason when it comes to physical limitations we accept it. But we reject it when it comes to mental capabilities. There are naturally smarter people, at least in specific areas.
People understand things they can see, like, someone is short, then, how good s/he can get at basketball is a bit limited (right). Or, someone having a body shape good for running, but won't lift much weights.
But mental capabilities are invisible, and then it's harder for many people to see that there are different and personal limits.
The capacity to practice is itself partially innate. Take a person with ADHD - they will naturally have a harder time practicing piano. I myself was unable to practice piano as a child, but for different reasons.
You can be both. I can get better at programming and enjoy beating my personal best but acknowledge some people may be genetically disposed to be better at it even when not trying.
Same reason there is a gaggle of personal trainers at the park near me every morning but none of those working out are thinking they’ll compete in the Olympics
There is an innate ability that drives it to a large extent: inherited intelligence. Recognizing this might not be helpful to the individual's motivation but that doesn't make it untrue. Not everyone can be a 10x (or 100x) Ramanujan-level genius, you really need to win the genetic lottery, in addition to working very hard, for elite level cognitive performance in STEM domains.
When you say "[s]ome programmers will do in 1 day what you wont achieve in a life time" you are no longer talking about the 10X programmer myth. You're talking about invention, rather than day-to-day productivity.
They are not the same thing, unless they achieve what a 1x programmer won't on a lifetime on a day-to-day basis.
If the 10x, 100x or 1000x programmer does not do the 10x, 100x or 1000x times on average on their day to day then they are not 10x, 100x or 1000x programmers.
(for whatever the heck a 1x programmer is, which people talking about 10x programmers oddly always skip on giving any decent definition)
The best programmers can produce code every day that a mediocre programmer cannot ever produce under any conditions. That is the entire point of the discussion.
I don't even think it's that controversial of a statement, just shift to another field and I think it's self-evident. Paul Erdos could on any day produce better mathematics than the rest of us could produce in a lifetime. Not better maths than his peers, but his peers were also exceptional. Better than the average person who knows how to do their times tables though? Absolutely.
Most people might never realized things like that, because they aren't good enough at math (or software) to see the difference between an ordinary everyday mathematician (if there was something like that -- maybe a high school mats teacher), and Paul Erdos.
Maybe from most people perspective, everyone else is about as bright as everyone else. Because they cannot tell the difference. (And instead people fallback to things like how others dress and how self confident they sound)
I would argue that that's not the case for most programmers, at least not in the sense of developing a new p2p protocol, or a fast inverse square root algorithm. Would John Carmack code, e.g. a checkout system for an iPhone app 1000x faster than most programmers? I doubt that.
The interface he produced for that checkout system, the naming conventions he chose, the nature of state encapsulation, the testability of it? Yes, I believe Carmack would produce _better_ code in all those things than the median programmer every time.
There is much more to 10x than how many lines of code you can produce. A monkey on a keyboard can type faster than Carmack but productivity is not assisted. No one is arguing that a 10x programmer is more efficient by way of swift fingers.
I think the "10x programmer" as a term is confusing.
In one analogy it could be the 10x bricklayer. One who does a well defined job 10 times faster than the others. I think this is the notion people oppose.
Another analogy is the 10x classical composer. A person who produces music that is 10 times better music. But this is much more about creative/artistic capacity than about producing. Nobody oppose this.
I that your examples incarnate the same idea: It is not about producing code faster. It is about having better ideas.
> In one analogy it could be the 10x bricklayer. One who does a well defined job 10 times faster than the others.
Software as brick-laying gets a laugh out of me. If someone uses that analogy, that's a red-flag: they don't really understand software (and tech). It's like offshored bodyshops that just keep throwing more warm bodies at a codebase.
Truth is, a 10x isn't someone who lays bricks 10 times faster. A 10x is someone who thinks differently. Instead of building you a something with load-bearing walls, he'll innovate and use an internal steel frame, paving the way for your building to be taller than anything previously considered possible. [0]
>> In one analogy it could be the 10x bricklayer. One who does a well defined job 10 times faster than the others.
> Software as brick-laying gets a laugh out of me.
I think that may have been precisely GP's point: The quantitatively-exact-sounding "10x" could possibly be used about an easily-measured well-defined task like brick-laying (which usage could be confirmed by the occurrence of variants like "I'm actually a 12x [or only a 9x] bricklayer"), but not about less well-defined / measurable crafts like programming.
But very often what makes an idea "better" is that it produces a result faster. I've done exactly this: spent hours trying to solve a problem to no avail. Then walk away, come back to it and see that a completely different approach will solve it in ten minutes.
I doubt the bricklayer will become more efficient by taking a walk ruminating. But sure, some tasks are like that. Those are the tasks where you have 10x producers.
> Some programmers will do in 1 day what you wont achieve in a life time. And not understanding that makes you a bad programmer by my book simply because this is the foundation of the job.
Most projects out there will not benefit from such a person. If you don't understand this, then in my book it makes you a poor employee. I mean, it's great if this 10x guy can solve some challenging problems that most people cannot, but if that 10x guy cannot show how it helps the business, I hope he's not in my team.
Most businesses are complex and messy. Connecting your code to business value is not easy.
Looking at some of the comments here, people are going out of their way to both defend the existence of 10x programmers, while simultaneously working very hard at not putting any kind of metric on their ability (e.g. "no, it doesn't mean they can produce 10x code or replace 10 people or ... it means <something very hard to measure>"). If you're going to insist on some quality that is hard to quantify, then stop using numbers to describe them. They are geniuses, but not 10x.
In my experience:
1. You cannot replace 10 average programmers with a 10x programmer and hope to achieve the same output. Output, by the way, is not defined by code, but by activities that help the business move forward.
2. While there are some good claimed 10x programmers who work well with others, most of the ones I've encountered do not. In my last job, we had a team of several truly brilliant folks. They could dive deep to the assembly level or work at the system level (scripting, etc). Any bottleneck that arose - they would dig deep and figure it out.
It was the least productive team I've been in. They argued amongst themselves on the pettiest of things that had no impact on the business. When asked why I was leaving the team, I literally told them that I want to be in a team that writes SW. That team's productivity was so low I couldn't reasonably claim they wrote SW. It's not that they didn't write code, but that most of it would not see the light of day because of constant bickering.
A 10x programmer doesn't cost 10 times as much as a regular programmer. 10x programmers are real and drive real business value. The people who insist 10x programmers are a myth simply have not worked with one. Do not conflate brilliant-but-an-asshole or prodigious-output-but-creates-a-mess programmers with 10x programmers.
> that uses the phrase 10x but does not provide any way to quantify it
Understand your complaint but "10x" is best interpreted as a figure-of-speech and not an exact mathematical equation. It's just a short & snappy sounding label that's easy-to-say and easy-to-type on the keyboard. (My previous comment about that: https://news.ycombinator.com/item?id=13753178)
We use numerical type phrases without quantitative precision all the time:
- He doubled-down on his opinion. (We don't nitpick and ask how can an opinion be quantitatively measured as 2x?)
- The old editors like vi/emacs is a million times better than IDEs. (We don't nitpick about where the 10^6 quantity improvement comes from.)
And yesterday, the top comment[1] in "Economics Programming Languages" wrote:
- >a new language to be adopted it needs to do something (something reasonably important) 10x better than the competition. Even 2x better is not enough to motivate the disruption of changing languages.
Yes, it's hard to measure "10x" in languages beyond synthetic benchmarks. But I think most of us get the idea that "10x" is a just a synonym for "a massive amount" of a fuzzy quality.
For some reason, "10x" attracts a lot of extra nitpicking that we don't consistently apply to many other examples ("double-down", "million times", etc).
Most of your examples are commonly used phrases. "10x programmer" is a unique phrase. We don't hear "10x electrical engineer" or "10x politician".
Phrases like "decimate", double-down, etc are part of the English language, and is well understood to have multiple meanings.
Your other examples (e.g. vi/emacs being a million times better) are examples of random numbers people throw out. Someone will say vi/emacs is a ton better, or an order of magnitude better, or a million times better. Whereas with 10x, it's always 10x. I don't hear people talk about 3x programmers or 20x programmers.
The HN comment actually supports my point. You can see how different people are interpreting 10x in the responses. That's the exact same problem we have in this comment thread.
Yes, and "10x" is itself also becoming a commonly used phrase that's getting less tied to the math number 10. This thread's extensive non-quantitative usage from many people is evidence of that. (I'm guessing that in a few decades, the bikeshedding about "10x" will eventually stop and it will be accepted as a non-numerical description like "a million times better")
>We don't hear "10x electrical engineer" or "10x politician".
The "10x" is relatively new compared to "double-down" but it's spreading out to other uses besides "10x programmer":
- "10x programming language" : yesterday's HN thread comment example
Why do all the above non-mathematical usages keep happening? Probably because "10x" sounds cool. We're witnessing language evolution as it happens.
>Whereas with 10x, it's always 10x. I don't hear people talk about 3x programmers or 20x programmers.
Sometimes people talk about 100x and 1000x and infinityX to try and emphasize extra rare skills etc. Again, interpreting 1000x literally as 10^3 isn't the intended meaning. And to build on your point... the fact that nobody says "9x programmer" or "11x programmer" but almost always "10x" is actually evidence that it's not trying to communicate exact mathematics.
> This thread's extensive non-quantitative usage from many people is evidence of that.
Even putting aside comments like mine complaining about the actual number, this thread's extensive use of 10x to mean as many different things is a good reason to avoid the term altogether. The whole thread is just "10x programmers don't exist because X" and "10x programmers exist because Y", where X and Y are unrelated.
> "10x manager"
All but one of the links in the first page were in the context of SW, or written by people in the SW industry. Many of them explicitly pointed out they derived the phrase from 10x developer.
>10x to mean as many different things is a good reason to avoid the term altogether. The whole thread is just "10x programmers don't exist because X" and "10x programmers exist because Y", where X and Y are unrelated.
Yes, I understand your complaint here too but the various X-Y meanings isn't really the fault of "10x"... it's caused by any label. Previous comment about that: https://news.ycombinator.com/item?id=28797871
E.g. the alternative word "expert" or "effective" such as "effective programmer" would cause the same debates:
- I think an effective programmer is one who understand the whole stack from hardware gates to web stack
- No I think a truly effective programmer is one who empowers his team members.
- No an "effective programmer" is really X. No it's Y.
- <... ad infinitum disagreements ... >
It doesn't matter what the word is... "10x", "talented", "expert", "master", etc. There's no consensus definition and yet we haven't tried to eliminate those words.
Generally, I understand that people typically mean "10x" as a synonym for "massively better". (Because nobody who says "10x" has a stopwatch and rigorous academic studies measuring it.) And yes, the counterargument is "10 doesn't really mean anything" ... that's true but the "'massively better'" also doesn't really mean anything -- and yet we can't strike "massively better" from our language so we're back to the same issue.
There is no short label X that "really means" whatever everybody agrees it to mean. That's human language. We muddle onward regardless.
The author of that book, Sean M. Platt, is not a tech guy nor a programmer. He's a high-school dropout that started writing articles and stories. Now, he's mostly a publisher.
The interesting thing is that somehow, the "10x programmer" meme made its way to a non-programmer and he adopted it as "10x author".
The problem is value and productivity in software (or any creative space) is hard to quantify in general. How much better is the best engineer you’ve worked with compared to the worst? 2x? 1.5x? How do you quantify that? But you know one is significantly better than the other I assume.
If you want to replace 10x with “much much better”, then ok. But the general idea is the same. Some engineers produce an outsized impact compared to their peers.
Carmack is an interesting choice here, oddly. He and team were among the first ones there, but it isn't like they weren't rapidly met. Nor, strictly, the first. Ultima Underworld, I'm pretty sure, has a bit of that distinction.
Even more impressive, much of the success of later titles came from his picking the likes of Abrash to help make things fast. Notably, the WTF comment in the "fast square root" trick was from Carmack about a contractor's code that was speeding things up.
Getting even more meta on it, they had amazing dev tools at their disposal that many other programmers just couldn't afford. Look at the recreations folks do nowadays using pico8 and friends. Some folks get some really amazing tricks running in that field.
None of which is to say Carmack is a bad dev. Quite the contrary, he is quite good. But don't discount the role of everything else to the early success that Doom and friends had. In particular, the artistic execution and vision of everyone else was probably worth more than you'd consider.
I don't know about producing in one day what it would take another person 2 weeks to accomplish, but I do know there are some core features of my company's app that were created by a very talented developer that I don't think could be reproduced by some of our junior developers in a year.
I think it's a mistake to conceive of the difference as one between the tortoise and the hare, where the tortoise gets there, eventually. There are bits of this code that the tortoise just wouldn't ever end up producing if you gave them all the time in the world.
The myth part is that you can hire these 10x programmers by asking harder whiteboard coding questions and they will sit and close jira tickets for your company thereafter.
I think that depends on the context in which you’re working. Flashes of genius don’t have much place an an enterprise code base. Everything is rigorously standardized and separated into layers. Each layer has a bunch of bookkeeping about dependencies, interfaces, mocks, expectations, and test cases. This is not really brain work; it’s typing. Now maybe if you’re really brilliant, you’ll do much better than average with the implementation of a really tricky layer. But the layers are rarely tricky, implementing them never takes all that much time, the slow part is always the integration and associated mocking rituals. Typing speed pays better dividends than brainpower in terms of productivity, there.
Maybe that's why so many people think 10x programmers don't exist - they work in environments where a 10x programmer isn't needed and couldn't really demonstrate their skills.
One could make the argument that skipping the bureaucracy catches up with you in the long run.
Or maybe a small team of 10x programmers could really get away with it, indefinitely. But can you reliably staff enough of them, now and forever, to keep that going? For a business it is often better to have a codebase that scales with arbitrarily many average-quality engineers, than to be dependent on hiring miracles. Even small numbers of them.
How many developers do you know that would bang out a spelling corrector on a single plane flight, in half a page of code?
It's a question of knowing the algorithms of tools that make things possible that other developers might not even consider, and how to express those ideas cleanly and concisely, evaluate your solution, and iterate and improve quickly.
And then consider the quality of his documentation and considerations for improvement and future work.
Norvig wasn't given a random problem that he then solved quickly. He picked the problem to work on. I'm sure I can give him problems of similar complexity that I work on for my job and he wouldn't do it that quickly. Quicker than me, for sure - but it wouldn't be hard to find someone who does it quicker than he did.
I'm sure I can find problems that I can solve quickly and amaze people. Being able to pick your own problems makes for a bad metric for identifying 10x programmers.
Norvig has written a ton of kick ass programs in his career that are concise, efficient, and correct, in much less time than most programmers would require.
Furthermore, even picking your own problems can be a way to achieve > 10x productivity, as identifying useful problems to solve is also a crucial skill.
I attended a talk given by Norvig, where he frankly admitted Google picked markets to enter where they could get good quality data to train their machine learning models on (this was many years ago). Maybe lesser developers wouldn't have that insight.
People can be 10x in one domain but not in others, experience is part of the equation. That's not too strange is it? Compare a football player in a ice hockey team. Even though they still have a significant head start compared to someone on the street, when it comes to physique, ball sense, etc.
Exactly. Norvig's skill set happens to be of the upscale variety, but similar "10x" knowledge+practice effects exist in more pedestrian domains as well.
Compared to my current self, my teenage self was a 10x PHP programmer. I'm absolutely sure that it would take years for me to get back to being even remotely good at PHP-interleaved-with-HTML style coding.
I think the fundamental issue with 10x is that a lot of people simply never met one. These guys tend to fly under the radar quite a bit. If you are in a tier 2 market or company, your chances of attracting one are close to nil. Because they are extremely valuable, they don't interview a lot and tend to hop between companies where they know people (or get fast tracked internally).
I remember someone laughing at the idea of 10x programmers. I asked him where he hired from and what's the compensation like. Turns out two high performers I had recently hired were from the same college he was trying to hire from. Of course, he had no chances of attracting anyone since my offer was ~3x what he was offering!
1x is supposed to be a baseline for an average productive programmer.
0.1 is someone who isn't actually a productive engineer but somehow faked the interview process.
It's not difficult to be 10 times more productive than somebody who isn't productive at all. I'm at least 100x better Kotlin developer than my 30 years dead grand-grand father who never saw computer IRL.
It's much more difficult to show that you can be 10 times more productive than the average productive developer.
You don't say that so-and-so is a "10x painter". Art is obviously not about the quantity of paint used per day, but how it gets used and in what context. This is what you seem to be communicating with your quote about bittorrent.
Because we're programmers, we chose an empirical measurement ("10x") as our term for high skill. This terminology is confusing and stupid, but now we're stuck with it
I'm guessing there are clearly 10x painters other painters can identify, but there are even fewer quantifiable metrics to measure a painter's output than there are for programmers.
> You know, 10x is an optimistic number here. Some programmers will do in 1 day what you wont achieve in a life time
Exactly. There are many modes of that, and you named a few examples. Another example, company has 2 systems maintained by 10 people each. Someone comes in and figures out how to generalize one of the systems to both cases, so they free up 10 of those programmers to go do something else.
Or - 10 people are beating their head on a problem for months, someone comes along and says "it might be OK if we don't solve that problem, let's move on"
Or - someone figures out that a system/module doesn't need to be written because an out-of-the-box solution exists.
Like, I am not a 10X programmer in the sense that I can write 10X the code of the next guy. But have I prevented 10-people's-worth of wasted effort in my career? Yeah...
If nobody had previously succeeded then I would take the point that Carmack was somehow unique, but by the time Doom came out lots of programmers had produced 3d games, and we had ray-tracing and lots of graphics theory and implementation (e.g. elite written in 6502 assembly on an 8 bit cpu).
>You think John Carmack was the only one trying to make 3d games when Doom came out? Thousands of programmers where trying to.
Yes Doom was a great game, and well programmed, but it didn't really move the state of the art forward massively, as I would argue that hundreds of programmers had already written and published 3d games by that point.
> What do people gain by arguing over these? Genuinely confused
If you assume some arguments (eventually, in some way) lead to people altering their opinions closer to the truth, then people gain more accurate views of the world. This also reduces the spread of misinformation (when the people who have corrected their views no longer spread it), thus having a compounding effect on more people getting closer to the truth.
Or if you assume people never change their opinions as the result of arguments, then I suppose people gain nothing by arguing.
Bellard is who I reference in these situations also. He's a sort-of empirical refutation of the assertion "10x programmers don't exist". I always liked that he lists qemu and ffmpeg on his website as afterthoughts mixed in with all the other code he's written.
Bellard is obviously 10x (or 100x) engineer when you need to port Linux kernel to JavaScript or compute the longest Pi sequence.
But most jobs aren't like that and require a mixed skillset - problem solving, people skills, stress resistance etc. and it's entirely unclear how Bellard would fare there.
But the question isn't about those skills, the question is about programming. Bellard is blatantly an insanely productive programmer.
Also if you think a man who can build an LTE base station from scratch isn't good at "problem solving" I really don't know what metric we're talking about anymore.
On the edge of possible/impossible, ratios will lose their meanings. In the same way, you can say "Einstein is a 10,000x scientist."
Continuing with this analogy and using Kuhn's concepts, maybe it's better to bracket out breakthroughs (paradigm shifts) when talking about everyday productivity (normal science).
We all know people who code faster than the rest of the team but they always cut corners. Part of the reason that everyone else is slower is because they're trying to work around the under-tested tightly coupled mess left behind by the 10x guy.
Then there's the 10x complexity discussed in the parent comment. Plenty of people will take years to solve a problem, if at all, that someone else would manage in a month. However this may be reversed for a different problem since it depends on experience and predisposition, so it makes no sense to talk about a '10x engineer' in this regard.
I share the conclusion with the OP that it's a vague and ultimately useless distinction.
The confusion is that it's all about what people can and cannot do, not how much code they can write.
If your development needs are mundane crud stuff, you don't need a "10x programmer". If you're doing tricky stuff, on the other hand, you absolutely do.
I do CRUD stuff mostly at work but I always research things to improve. A good programmer can make a huge difference in CRUD applications. Things like proper relational database design can save a lot of issues down the road. Using good OOP practices can improve reliability. Keeping things DRY is great too.
I have seen some awful source code that run business applications for years.......but bad engineering practices may cost millions in the long run one way or another.
Even if you are doing mundane crud stuff, you are eventually going to run into hard problems that don't have obvious answers. Not everyone has to be able to solve those problems, but it's useful to have someone in the team who can.
You know, 10x is an optimistic number here. Some programmers will do in 1 day what you wont achieve in a life time. And not understanding that makes you a bad programmer by my book simply because this is the foundation of the job.
So let me give one advice: you are not producing code, you are engineering code. Some will find solutions that the others will not find. Thats where the 10x programmer thing come from. The guy who wrote bittorrent said something like the following: "I've written bittorrent in a way you would never have thought about".
You think John Carmack was the only one trying to make 3d games when Doom came out? Thousands of programmers where trying to. Does that make him a 10x programmer in your opinion? Or more like a 1000x?