Speed vs Beauty

At the risk of sounding like I’m bragging, I made a shit load of money in the software business, and I have gobs of friends who made shitloads more than I did, doing the same work.

This is no brag; first of all I’m not a gajillionaire, so there wouldn’t be anything to be jealous about anyway. Secondly, I didn’t make a shitload of money because I had some incredible talent that resulted in hiring agents throwing piles of money at me. It was because of something else– something that I think is misunderstood in our industry. Plus, there’s plenty of money to go around for everybody, so I’m not cannibalizing my income by sharing it with you.

The secret to making a good living in the software business is to get work done fast. Plain and simple.

The software business is led by people who excel at finding ways to get other people to give them money. I don’t mean in crooked ways; I mean that these people observe that other people (who have a lot of money) have various problems. They devise an idea about how to solve that problem, and they act on it. Sometimes the people don’t even realize they have a problem, until they see our entrepeneur’s idea.

These days, solving problems often involves a computer, or perhaps a shitload of computers. Where there are computers, there is of course software and people who monkey around with it, either writing it or wrangling it in some fashion. Our hero, the entrepeneur, will hire a bunch of these software monkeys to work on solving the problem, and typically reward them handsomely for it.

Competition, being fierce, means that other smart entrepeneurs are out searching for these imbalances of need and solution. This means that our hero must act fast before some other clown shows up and steals the opportunity. Many of the deals that get made which result in heroes getting rich involve the hero making a pitch– an amalgam of bullshit, grit, and fear –and then having to deliver product in a short period of time. Software industry people romantically refer to these short deadlines as “impossible schedules”, but that’s utter bullshit. What it really means is that the omphaloskeptic purists hired by the hero are forced to abandon their typically cushy schedules of reading Usenet for 4 hours a day and then checking in three lines of code, and have to build something the works correctly and fast.

I can think of two groups of programmers who represent consistently the biggest source of failure in our business. The ones who value “elegance” or “beauty” among all other virtues, and the ones who think that “elegance” and “beauty” are stupid and that performance is the only thing that matters.

The elegance and beauty crowd think that these values trump all other things because if you write code that is elegant and beautiful, it is obviously correct and will never need to be rewritten. The speed crowd think that if you write the fastest version of the program possible then rewriting it would be foolish because it could not possibly be more performant. Both these programmers are deluded.

The programmer who wins, in my experience, is the one who delivers quickly. A programmer who is in a habit of delivering code quickly, even if it is not perfect the first time, is also adept at delivering fixes quickly, and at recognizing when the existing code needs to be refactored (or maybe put down) and delivers a new version quickly, too. The quick programmer recognizes that time is money and although he or she will capitalize on an opportunity to make something simple and elegant if it saves time today or tomorrow, he or she will balance that potential benefit against the very real benefit of delivering the solution sooner.

Never, ever, did somebody with the purse strings give me cash, or stock, or whatever because I wrote them impressive code. But because I finished jobs ahead of schedule, I was rewarded with financial security for myself and my family that means I can be choosy about the work I take for the rest of my life. No amount of esteem that I ever got from my peers as a result of writing clever code can compare with that.

I appreciate brilliant programmers and brilliant code, but after watching little skirmishes between the quick and the brilliant for twenty years, I think I know who I’d put my money on in just about every contest.