I see they repeat the myth about a great developer being ten times as good as a mediocre one, even though the actual reference they point towards in support of that statement disagrees with them.
BUT, an average developer is better than a developer who just puts in their 8 hours a day and never learns new skills. The people who you make a point to address an issue with and then a few weeks later you see they created the same issue again.
I think the key is to actually care about your work. You got even a little bit of that and you're fine.
I don't think that a single developer can be thought of as 10 times as productive. But a good developer absolutely can have a tenth of the "collateral damage" after releasing a product with less need for support, fixes, and refactoring.
If I think of it as team dynamics, I can see a single developer making that much of a difference. On his own (s)he is not that much better than your average developer, but in a team (s)he can lift the team with his/her experience and really make them significantly better. 10 times better is probably a stretch, but measurably better at least.
I know that this is not a myth because I have seen it. Just today I saw someone reviewing some piece of work that had taken another developer two weeks to implement, throw it all out and solve the same problem with only a few lines of code.
The speed improvement isn't like, "This person can type 10 times faster than everyone else", but more like, "This person doesn't get stuck or waste time chasing dead-ends".
Possibly your code-base needs to have more than a certain level of complexity before developers start getting stuck like this.
> piece of work [...] two weeks to implement, throw it all out and solve the same problem with only a few lines of code
I've been in similar situations and, invariably, the "few lines of code" is inscrutable nonsense that no-one else will be able to maintain (and often even understand.) I can write obtuse one line "clever" hacks to solve problems but I'm keenly aware that a) I'll have forgotten how it works in an hour and b) some poor bastard (which might well be me) will have to maintain it for N years after I'm gone.
Right, and the product owner will expect all future maintenance to be done as quickly as the one-line clever hack that took 15 minutes but didn't encompass the edge cases.
Some 10x engineers just say "No" to product owners. If you let a product owner to convince you that you need an .xls export rather than .csv for internal use (this is a real-life example!) you may add a week+ of work/maintenance versus the time it takes me to explain "no."
> an .xls export rather than .csv for internal use
Presumably this was a trivial data dump and not something like a report that could have benefited from, e.g., embedded formulas, multiple sheets, etc.? (I've produced exports with the latter and the enhancements were greatly appreciated over the plain old CSV export.)
From my experience it's the opposite, a mediocre programmer will create way more code than needed because they don't try to understand, but just blindly copy conditions and cases they see in the surrounding code (cargo cult). This leads to more convoluted code that looks clever and covers edge cases that wouldn't exist if it was coded properly or if they pushed back.
Then the experienced programmer comes in and rewrites it to solve the actual problem with as few lines as possible.
or somebody rewrote object.sort() from scratch instead of looking at the documentation, which isn't necessarily a 10x engineering problem, it's more of a 1/10th engineering problem.
Fixing that would definitely be one of the "good" cases of rewriting code into fewer lines. But it doesn't involve a "clever" solution (which is normally the problem), just a "smarter" one.
Short code is greatly underrated. It doesn't have to be an "obtuse and clever hack", usually it just amounts to using the right tool for the job.
For example, it is impressive how much code can be simplified by just using the correct API calls.
Also, some language features are explicitly designed to address a specific problem, and yet they stay unused, even when the problem arises.
As for your two points.
- If you forget about how it works in an hour, you never knew how it worked in the first place. It can happen when you write code at random and tweak it until it passes the test. IMHO, that's the opposite of a clever hack.
- I love to see clever hacks in code I maintain. Like everyone else I start going "WTF?!" but a few minutes later, it usually turns into "oh nice, I learned something today".
To illustrate, this is the kind of code I like to read https://www.youtube.com/user/Bisqwit . This guy's code is short, clever, takes advantage of everything the language has to offer, and still manages not to be too cryptic. Note that these are educational videos and the author spends a lot of time to get to that level. I don't expect to see that in a typical project, but that's kind of an ideal for me.
> If you forget about how it works in an hour, you never knew how it worked in the first place.
Obviously I disagree. I'll have forgotten through a combination of being old, not being interested in that code any more, having spent an hour doing something else, and work not being important enough to take up rent-free space in my brain.
In this case I can assure you that these "few lines of code" were much easier to understand, and more correct than the code that was being replaced. Basically, someone was trying to fix an IO error that they did not understand by writing a complex retry mechanism, even though the system already had a better and more correct retry system that wasn't being used for this.
It wasn't a hack, so much as removing someone elses (unnecessary) hack that fixed the problem.
The myth is the misinterpretation of the actual research; the myth is swapping "worst" for "median" in the comparison. The post in question makes this mistake; it compares best to "mediocre", but the actual page it references in support of itself gets it right, comparing best to worst.
A 2nd edition of Peopleware summarises it; the 10x programmer is not a myth, but it's comparing the best to the worst; NOT best to median. It's also not about programming specifically; it's simply a common distribution in many metrics of performance.
The rule of thumb Peopleware states is that you can rely on the best outperforming the worst by a factor of 10, and you can rely on the best outperforming the median by a factor of 2.5. This of course indicates that a median developer, middle of the pack, is a 4x developer. Obviously, this is a statistical rule, and if you've got a tiny sample size or some kind of singular outlier or other such; well, we're all adults and we understand how statistics and distributions work.
Peopleware uses Boehn (1981), Sackman (1968), Augustine (1979) and Lawrence (1981) as its sources. [ "Peopleware", DeMarco and Lister, 1987, p45 ]
I can't help feel that this is quite misleading - let's take a bunch of concepts we happen to like about our software team and project them onto a 17th century craftsperson.
I mean, you can construct a picture of such a blacksmith being Mr Super Customer Focused, sure, doesn't really make it true though? Why add in such an extra layer of distraction when you can just, well, describe good software team members?
I think there's an apt and pithy description for the original article.
It's rather sad, because it turns out that real blacksmith stories (if you ignore the mythological ones) are far more interesting and inspiring than this superficial nonsense.
And strong arms too. A smart black smith with weak arms/shoulders/wrists would under-perform one who didn't. And the tools were a) quite simple, b) they wouldn't change every 3 years and would last a generation. The comparison to the software craftsman is quite silly, I agree
Yeah I thought that too - 30 years of fine tuning one's horseshoe shaping skills is admirable, but it's wildly different to the "constantly learning new things" narrative.
It's a shame, I did quite enjoy the "our sword guy let us down" cartoon!
Sounds a sensitive one :-) Technically I meant making them not fitting them, but mea culpa, the whole horseshoe area is not my domain so I'll watch my step!
That extra layer is to obfuscate/abstract role of developers/blacksmiths. With a story about blacksmith comes suspension of disbelief[1] so that author's story is more real. Problem comes when anyone (HN readers for example) tries to think about this more thoroughly.
Don't get me wrong, I know a good allegory when I see one. This... isn't.
Suspension of disbelief is when you put your doubts on hold to enjoy, say, a good zombie movie. As per your link "a willingness to suspend one's critical faculties and believe something surreal". If you need to employ it for a business metaphor, again, really bad metaphor!
Exactly! Article used a story because stories typically evoke some suspense of disbelief. It looks like purposeful use to hide the fact that it's bad metaphor.
Particularly the bit about "Don’t reinvent the steel hammer” is a little ridiculous in this analogy. A medieval blacksmith had to build almost all of their own tools, that was the reality of the thing, because almost nothing was pre-manufactured.
Similarly, if you look into the toolbox of almost any mechanic, or carpenter, or millwright, or any tradesperson, really, you are going to see some modded or homebrew tools, that they have put together specifically for some particular job that they do. Jigs, cut down wrenches for tight places, weird welded up gobs of metal that aren't immediately obvious but are super useful for x, y or z. A good software developer should have a whole arsenal of little shell scripts and tweaks and customizations to their editor or IDE that make their work easier.
This article seems to be more a series of backhanded complaints that managers make about software developers rather than any sort of useful comparison. Any software developer who routinely had requests that were analogous to "make 100 swords" would undoubtedly kill themselves immediately. I mean, that's not really true; there's always a market for software developers who are expected to churn out the same program that they've written before (program, website, crud app) with slightly different branding. But it would be a stretch to call such a person a "great developer" unless they built a framework that would allow them to create each one while barely lifting a finger.
Here are the points in the article, translated into whining about software developers:
"He Loves What He Does" == "Why are good developers expensive?"
Curiosity - "If a craftsman does not love what he does, he is usually working for money or prestige" == "I should not have to pay a developer very much money"
Creativity - "The best ideas come when you walk home from work and your brain just cannot stop thinking about the exciting problems you are working on." == "My developer doesn't think my ideas are exciting"
Long-term motivation - "His motivation comes naturally the process of building and creating new things" == "I should not have to pay a developer very much money"
"He is humble" == "Why do my developers think they're smarter than me"
"He is courageous and honest" == "Why can't my developers give me good estimates for how long things will take"
"He is a team player" == "I want my developers to be instantly replaceable with another developer"
"He is extremely customer-focused" == "Why do my developers keep saying that my ideas are bad?" and "Why can't my developers give me good estimates for how long things will take"
"....the problem with this place is it's too consistent. And consistency is death. A chef should strive to be consistent in experience, but not consistent in taste. It's like sex. It's like, you're always headed to the same place, but you got to find new and dangerous way of getting there."
Another translation for Creativity - "The best ideas come when you walk home from work and your brain just cannot stop thinking about the exciting problems you are working on." ==> "My developer should live, sleep, breathe the company, outside of the 9 to 5, even though I won't pay more for the additional time and creativity."
"He is a team player". Do you ever seen a team of blacksmiths forging a sword ? IMHO a blacksmith is the figure more distant than ever from the perfect team member. Do you know what a team member looks like ? An assembly line worker. But who want to be an assembly line guy ?
This is one of the stupider things I have ever read. It's an amazingly bad analogy, written poorly. Where does HN find this garbage? Who is promoting it?
True. Also I want to point out some basic math, if the traits are independent, the odds of finding a person who is more of each of those traits than average i.e. > 5 / 10 on each is 1/2^8
So roughly 1/256 people will have all of those traits more than average. This on top of hopefully being able to program.
> Also I want to point out some basic math, if the traits are independent, the odds of finding a person who is more of each of those traits than average i.e. > 5 / 10 on each is 1/2^8
If by “average” you mean ”median”, sure (the median is an average, by not the only or most common one), but it's pretty obvious that they aren't independent. Curious, creative, and sees the big picture are clearly correlated, as are communicates well, humble, and teaches others, as are honest and brave. There may even be correlations between the three groups.
I've never met a blacksmith, but I've met people in similar jobs (welders, etc) and I'm not sure I'd describe them as having "fun and joy at his craft". The best ones make it a point to be good at their work, for sure, but they make it a point to do their best at everything they do. I've met people at the top of their game who have won awards for their work, who tell me they have no passion for their profession. It's just what they happen to do for money.
I'm probably reading too much into this, like someone complaining that computers in a Hollywood movie are not technically accurate. Bloggers have re-invented fables, only this time with medieval trade unions instead of animals.
Aesop got this right. Nobody thinks he's making a judgment on the work ethic of tortoises. You use animals in morality stories for the same reason programmers use "foo" and "bar" in sample code. Write about blacksmiths and you risk naive people like me thinking that you actually mean a real blacksmith.
50 comments
[ 3.4 ms ] story [ 112 ms ] threadI think the key is to actually care about your work. You got even a little bit of that and you're fine.
If I think of it as team dynamics, I can see a single developer making that much of a difference. On his own (s)he is not that much better than your average developer, but in a team (s)he can lift the team with his/her experience and really make them significantly better. 10 times better is probably a stretch, but measurably better at least.
The speed improvement isn't like, "This person can type 10 times faster than everyone else", but more like, "This person doesn't get stuck or waste time chasing dead-ends".
Possibly your code-base needs to have more than a certain level of complexity before developers start getting stuck like this.
I've been in similar situations and, invariably, the "few lines of code" is inscrutable nonsense that no-one else will be able to maintain (and often even understand.) I can write obtuse one line "clever" hacks to solve problems but I'm keenly aware that a) I'll have forgotten how it works in an hour and b) some poor bastard (which might well be me) will have to maintain it for N years after I'm gone.
Presumably this was a trivial data dump and not something like a report that could have benefited from, e.g., embedded formulas, multiple sheets, etc.? (I've produced exports with the latter and the enhancements were greatly appreciated over the plain old CSV export.)
For example, it is impressive how much code can be simplified by just using the correct API calls. Also, some language features are explicitly designed to address a specific problem, and yet they stay unused, even when the problem arises.
As for your two points.
- If you forget about how it works in an hour, you never knew how it worked in the first place. It can happen when you write code at random and tweak it until it passes the test. IMHO, that's the opposite of a clever hack.
- I love to see clever hacks in code I maintain. Like everyone else I start going "WTF?!" but a few minutes later, it usually turns into "oh nice, I learned something today".
To illustrate, this is the kind of code I like to read https://www.youtube.com/user/Bisqwit . This guy's code is short, clever, takes advantage of everything the language has to offer, and still manages not to be too cryptic. Note that these are educational videos and the author spends a lot of time to get to that level. I don't expect to see that in a typical project, but that's kind of an ideal for me.
Obviously I disagree. I'll have forgotten through a combination of being old, not being interested in that code any more, having spent an hour doing something else, and work not being important enough to take up rent-free space in my brain.
It wasn't a hack, so much as removing someone elses (unnecessary) hack that fixed the problem.
A 2nd edition of Peopleware summarises it; the 10x programmer is not a myth, but it's comparing the best to the worst; NOT best to median. It's also not about programming specifically; it's simply a common distribution in many metrics of performance.
The rule of thumb Peopleware states is that you can rely on the best outperforming the worst by a factor of 10, and you can rely on the best outperforming the median by a factor of 2.5. This of course indicates that a median developer, middle of the pack, is a 4x developer. Obviously, this is a statistical rule, and if you've got a tiny sample size or some kind of singular outlier or other such; well, we're all adults and we understand how statistics and distributions work.
Peopleware uses Boehn (1981), Sackman (1968), Augustine (1979) and Lawrence (1981) as its sources. [ "Peopleware", DeMarco and Lister, 1987, p45 ]
I mean, you can construct a picture of such a blacksmith being Mr Super Customer Focused, sure, doesn't really make it true though? Why add in such an extra layer of distraction when you can just, well, describe good software team members?
I'm pretty sure priorities in the 17th century were not the same as they are now and people had a totally different perspective on work.
I think there's an apt and pithy description for the original article.
It's rather sad, because it turns out that real blacksmith stories (if you ignore the mythological ones) are far more interesting and inspiring than this superficial nonsense.
http://theconsummatedabbler.com/2016/06/25-of-the-worlds-mos...
It's a shame, I did quite enjoy the "our sword guy let us down" cartoon!
[1] https://en.wikipedia.org/wiki/Suspension_of_disbelief
Suspension of disbelief is when you put your doubts on hold to enjoy, say, a good zombie movie. As per your link "a willingness to suspend one's critical faculties and believe something surreal". If you need to employ it for a business metaphor, again, really bad metaphor!
Similarly, if you look into the toolbox of almost any mechanic, or carpenter, or millwright, or any tradesperson, really, you are going to see some modded or homebrew tools, that they have put together specifically for some particular job that they do. Jigs, cut down wrenches for tight places, weird welded up gobs of metal that aren't immediately obvious but are super useful for x, y or z. A good software developer should have a whole arsenal of little shell scripts and tweaks and customizations to their editor or IDE that make their work easier.
Here are the points in the article, translated into whining about software developers:
"He Loves What He Does" == "Why are good developers expensive?"
Curiosity - "If a craftsman does not love what he does, he is usually working for money or prestige" == "I should not have to pay a developer very much money"
Creativity - "The best ideas come when you walk home from work and your brain just cannot stop thinking about the exciting problems you are working on." == "My developer doesn't think my ideas are exciting"
Long-term motivation - "His motivation comes naturally the process of building and creating new things" == "I should not have to pay a developer very much money"
"He is humble" == "Why do my developers think they're smarter than me"
"He is courageous and honest" == "Why can't my developers give me good estimates for how long things will take"
"He is a team player" == "I want my developers to be instantly replaceable with another developer"
"He is extremely customer-focused" == "Why do my developers keep saying that my ideas are bad?" and "Why can't my developers give me good estimates for how long things will take"
Bad managers, I'd say.
"....the problem with this place is it's too consistent. And consistency is death. A chef should strive to be consistent in experience, but not consistent in taste. It's like sex. It's like, you're always headed to the same place, but you got to find new and dangerous way of getting there."
- Curious
- Creative
- Humble
- Communicates well
- Sees the big picture
- Teaches others
- Honest
- Brave
That's not just a good programmer, that's a good person to have on your team regardless of her/his responsibilities.
So roughly 1/256 people will have all of those traits more than average. This on top of hopefully being able to program.
Depending on the psychology research (which doesn't exist as far as I know) the odds could be much higher or much lower.
If by “average” you mean ”median”, sure (the median is an average, by not the only or most common one), but it's pretty obvious that they aren't independent. Curious, creative, and sees the big picture are clearly correlated, as are communicates well, humble, and teaches others, as are honest and brave. There may even be correlations between the three groups.
I bet Masamune (considered the best sword smith in japan) had an amazing wait list and you probably had to know some one to even get on that list.
I'm probably reading too much into this, like someone complaining that computers in a Hollywood movie are not technically accurate. Bloggers have re-invented fables, only this time with medieval trade unions instead of animals.
Aesop got this right. Nobody thinks he's making a judgment on the work ethic of tortoises. You use animals in morality stories for the same reason programmers use "foo" and "bar" in sample code. Write about blacksmiths and you risk naive people like me thinking that you actually mean a real blacksmith.