Last week, I discovered The Rise of Developeronomics via Brad Feld. As long as I’ve lived, it has always been a great time to be a software developer. The economics keep getting better for us. My favorite quote:
The one absolutely solid place to store your capital today — if you know how to do it – is in software developers’ wallets. If the world survives looming financial apocalypse dangers at all, this is the one investment that will weather the storms. It doesn’t matter whether you are an individual or a corporation, or what corner of the world you inhabit. You need to find a way to invest in software developers.
The article also introduced me to the concept of a “10x developer,” and linked to a thoughtful explanation.
The 10x effect is the anecdotal observation that great programmers aren’t just a little more productive than average ones (like 15-20%). They tend to be 10 times more productive.
The second blog post is a fascinating analysis of 10x engineering in terms of thrust (high value flow state work) and drag (administrative necessities).
All this got me thinking, what do I do that makes me a 10x developer? I quizzed Ben Sharpe, Collin Watson, and Jonathan Locke, author of Coding – On Software Design Process. Here is what we came up with.
1. Only do the work that needs to be done. Use the agile process. Involve yourself in UX design. Communicate first. Coding might not be the solution. Premature optimization is the root of all evil. Choose the simplest solution that solves the problem.
2. Build on the shoulders of giants. Use open source frameworks. Use shorthand languages (HAML, Jade, Coffeescript) to go faster. Don’t re-invent the wheel. Leverage package managers for public and private code distribution. Don’t be at the mercy of Central Command (i.e. Microsoft) to fix a bug in a library. And don’t wait for your employer to let you learn it. Learn it on your own, and get a new job that pays twice as much.
3. Know your data structures and algorithms. Our profession is open to self taught tradesmen, but you can’t be a 10x developer if you don’t know when to use quick sort, identify an O(n2) routine, or write a recursive function. Be multilingual – so you can see how different frameworks solve the same problems over and over again. Know enough about the plumbing to be able to make informed decisions (how is this Web framework storing the session state? What is a cookie actually).
4. Don’t be afraid of buying tools that save you time. Ben says: “I bought a bitmap font tool yesterday for $50. It easily saved me more than $200 of my time.”
5. Find focus. Don’t keep your email open all day. Same for Twitter, Facebook, HackerNews, and Techememe. Minimize interruptions during productive moments. Close email, turn off chat, put headphones on… whatever it takes to not be interrupted. Tiny hack: I wear headphones at work even though I don’t listen to music because people don’t interrupt me.
6. Refactor early and often. Kill your darlings. Sometimes you have to throw out clever code to do what’s right by the project, but that’s OK. If you have to touch code on an existing project, always leave it better than you found it.
7. Just do it. Think small. Do your weekend project, participate in Startup Weekend. I bought a Mac and worked in a Windows Virtual Machine on .NET projects for a year before I was able to fully leap to Unix and Ruby on Rails.
There are 3 more tips below. Click one of the sharing buttons to reveal tips 8, 9, and 10..
8. Pick an editor and PWN it. Some 10x devs prefer text editors to IDE’s because they find they learn more without the crutches. In any case, learn your keyboard shortcuts. There’s no faster way to look something up than to know it.
When picking an editor — seriously consider one of the greats (emacs or vim), they’re universal. After that, pick the best/most supported editor on your preferred platform. Use macros. Write code that writes code. Use TextExpander on the Mac to create shortcuts for entire paragraphs. Use auto-completion in Visual Studio or SublimeText.
Use an editor that supports splitting your window into columns or rows. This way you can see your both a unit test and the code it is testing (or a model and view) at the same time.
But think before you type. A friend in a large group said that the most productive coder in their group was a paraplegic who used a mouth stick to type. He had to really think things out before he started typing, he only rarely made mistakes.
9. Clearness beats Cleverness. Write your code so that the next person can read it, not so it uses the fewest characters possible. Strive to adhere to the DRY (Don’t repeat your self) principle. Re-use clearly defined objects and libraries. Break work into clean interfaces between components and developers. Break the problem into small simple tasks.
10. Your sub-conscience is a powerful tool. Stepping away for 10 minutes is often all that is required to solve a problem. Treat your self to a diverse life and limit your coding time. You will be able to work more effectively during your coding time because it will be more enjoyable. Of course, us older developers also know that a minimum effective dose of physical fitness is also a prerequisite to being a 10x developer.
Human networking is more important than computer networking. Practice your pong. I often feel the best thing I ever did for my career as a programmer was to step away from the computer and go meet some movers and shakers.
11. Refine your process as a team. One of the biggest things is to really pay attention and to be wide open to criticism and changing and refining your process. You can’t become a 10x anything without that foundation because it will take you too long to get better at it. A wise man once said “A smart man learns from his mistakes, but the truly clever man learns from the mistakes of others.”