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.
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:
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: 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.