Hurts so good: 20 ways to torture developers

From switching frameworks to turning 23 years old, developers suffer mightily in hopes of the momentary rush that comes from a beautiful algorithm in a few lines of code

No pain, no gain: 20 tortures developers love to hate
Credit: Ben Barbante
No pain, no gain: 20 tortures developers love to hate

Beach attendants get paid to rent chairs while relaxing in the sun. Ski bums work a lift for a few hours before shredding the mountain the rest of the day. Even teachers take summers off. But you're a developer, mastering code in a sunless, airless cubicle for days on end.

No one understands the masochism of programming. But then they don't know the pleasure of building a Web app that juggles millions of connections and backs everything up in three disk farms across the globe. They don't get the rush that comes from writing a beautiful algorithm in just a few lines of code.

But those moments are insanely rare. Here are 20 hassles and pure tortures we developers endure in pursuit of momentary magnificence.

Developer torture No. 1: (Re-)learning JavaScript
Credit: Ben Barbante
Developer torture No. 1: (Re-)learning JavaScript

You've mastered Clojure, Scheme, Java, and Haskell. but now the boss wants you to learn the hippest, most "cutting-edge" language today -- yeah, the one you used 20 years ago to pop up an alert box on your "Timecop" fan tribute Web page. But now, the language is everywhere and your boss doesn't care what programmers think is macho (or what works best for the job). The boss doesn't care about sophisticated scoping mechanisms or better typing schemes. The boss just wants to fit in at the hacker space, and that means JavaScript. Let's rewrite everything, and while you're at it, I'd like a little fade-out effect on the website. Pronto.

Developer torture No. 2: Switching frameworks
Credit: Ben Barbante
Developer torture No. 2: Switching frameworks

Your team worked with Framework X; the other team liked Framework Y. Eventually it became paramount for both teams to work together, and the boss decided to standardize on Y. Or sometimes the boss decides it's time for a change. Let's freshen the code! Or the old framework is too creaky and unmaintained and everyone agrees that depending on it is a time bomb.

Whatever the reason, it's time to rewrite everything, and all the code is slightly askew. The parameters are in different orders. The data model is off. And you get to be the one to rewrite everything only to end up (if you're lucky) back where you started -- all that heavy lifting, just to stay in one place.

Developer torture No. 3: Turning 23
Credit: Ben Barbante
Developer torture No. 3: Turning 23

You may still look 19, but the VCs stop caring. Your boss assumes you're going to get married and start heading home at six because of kids. No one wants to hire you. If you're lucky, the state bureaucracy will hire you to update the computers at the DMV, so you can eat until you're old enough to retire. You start entertaining the idea of getting a young ingénue to play the CEO while you keep 95 percent of the stock. It's been done before.

Developer torture No. 4: Writing for iOS
Credit: Ben Barbante
Developer torture No. 4: Writing for iOS

No one denies the iPhone and iPad are insanely differently awesome. Then there's the App Store, which only counts sales in billions. Besides, everyone is always head-down on dates flicking around for new apps.

But writing for iOS means learning Objective-C because Steve Jobs always had to do things his way. He couldn't use C++ or Java. Just as the Roman Empire lives on through the Latin spoken by the Catholic Church, the NeXT machine will be with us forever. And when you're done, there's the App Store review process, obnoxious and fraught with peril. Spend a year developing the coolest game, but leave some bit of the interface off, and some nameless guy in a cubicle will toss it aside like yesterday's fish.

Developer torture No. 5: Setting up a new machine
Credit: Ben Barbante
Developer torture No. 5: Setting up a new machine

The office infrastructure genius insists on moving everyone to Windows 8, but your project uses a version of the compiler that runs on Window 95 only. You could rewrite everything, but who wants to do that? Or maybe your project relies on a library, DLL, or tool that crashes intermittently on Windows 8. You could spend months looking for a test case. You could set up experiments trying to figure it out. Or it could be worse, your project requires two tools, one of which runs well only on Windows 7 and the other runs well only on Windows 8. What do you choose for your new machine?

Developer torture No. 6: Startups
Credit: Ben Barbante
Developer torture No. 6: Startups

They can be plenty of fun, but the VCs insist on paying you in stock that will be worth five copies of old O'Reilly books and three servers with Pentium chips when the luck runs out. Or your grandparents ca'’t say enough about that nice boy who started up the firm that's worth billions while your firm just lost the one contract that wasn't worth that much in the first place. Or you want to build sophisticated code, conquer hard problems, and change computer science forever, but the cash is only flowing to silly apps and frivolous niches, like Brmshr.com. It's totally the Airbnb for brooms that sit idle 99 percent of the time.

Developer torture No. 7: Amenities
Credit: Ben Barbante
Developer torture No. 7: Amenities

It starts out like a dream: Food, foosball, concierge dry cleaning -- and good pay? Sign me up! Then the proverbial pan-fried, maple-glazed, locally sourced carrots that keep popping up in front of you to keep you coding start looking like chocolate pudding prison bars.

Who wants to be hot-fixing live code while getting a haircut, even if it's free? Plus, you start to realize leadership has distorted ideas about spending. Extra cash toward natural, locally farmed Doritos, but everyone is cramped around that reclaimed-fir farm table trying to concentrate for half a second between hisses of the espresso machine. But hey, at least that chair they expect you to sit in all day and night feels expensive!

Developer torture No. 8: The siren call of seeming hip
Credit: Ben Barbante
Developer torture No. 8: The siren call of seeming hip

If we really wanted to be hip, we wouldn't have spent 10,000 hours learning to code. Yet everyone wants to jazz up the business with cloud-worthy buzziness.

Can you make this UI look like it floated onto the screen from a passing asteroid? Could you add some zip to the database optimization routine? Can you add these columns of numbers in a way that's sexier? Shouldn’t we just be shoving all our data in a NoSQL shoebox? Why don't you rewrite everything for this hip new platform next week? Can't we get some Node.js up in here? The venture capitalists and the bosses all want to put lipstick over what is really a very practical and grounded endeavor.

Developer torture No. 9: Triple-checking
Credit: Ben Barbante
Developer torture No. 9: Triple-checking

It's said that a programmer is someone who looks both ways when crossing a one-way street. We need to check that every variable is not null. We need to make sure each variable is in the right range. We need to check everything three times, then check it again.

All we do is check variables to make sure the numbers are really numbers or the email addresses are in the proper format. Not that we really can check things perfectly. But hey, our performance metric is lines of code, so why not have half the code check variables for nullity, even if that means the code runs at half-speed because of all the validation routines?

Developer torture No. 10: Unpaid tech support requests
Credit: Ben Barbante
Developer torture No. 10: Unpaid tech support requests

Your job might not be helping people fix their computers, but you know how to program one. Thus, you're fair game. Your family, grandmother, niece, neighbors, co-workers -- they all want you to reinstall the drivers or get that printer to work. The only part that makes this bearable is that the problem is usually fixed by turning the box off and on again. But when the company starts scrimping on tech support by leaving it to the developers, it might be time to Ctrl-Alt-Delete that employment agreement.

Developer torture No. 11: Documentation
Credit: Ben Barbante
Developer torture No. 11: Documentation

Code is self-documenting, right? OK, maybe not. But if we could explain ourselves with words, we'd be selling cars or slinging drinks at bars. Instead, everyone wants us to write paragraphs about how the software works.

Of course, comments are kind of like the water torture of documentation, killing you drip by drip. If we let ourselves leave them off, we'd never document anything. But dev shops that insist on comments everywhere end up with lines explaining that the function "incrementCounter" is "For incrementing the counter." Is there anywhere in between? Or anyway to uncover that divine inspiration we left after a couple of slash lines while deep in some library somewhere on an all-night code refactor?

Developer torture No. 12: Ethical quandaries
Credit: Ben Barbante
Developer torture No. 12: Ethical quandaries

Your boss wants you to "gamify" the app and study slot machine design because those people tossing away their pension seem like a perfect market. How about a new logging layer in the software? After all, the board wants you to spy -- er, discover the "latent" interests of your customers. The finance team wants to fudge the numbers on "user engagement"; how can we help them with code?

When computer programmers created word processors, they were opening the doors to free expression. Today when we build the all-seeing, all-tracking devices, we're erecting ethical nightmares. The machines are deeply integrated with everyday life, but the tech industry only sees the "wow" and never wonders whether it's a good idea to build out the project.

Developer torture No. 13: Open source
Credit: Ben Barbante
Developer torture No. 13: Open source

Open source is a developer's best friend, with a bit of fiend lurking inside. Everyone loved that open source code when you adopted it. Then the main developer lost interest when there was no money. Now you need an update and the project is drifting. The code is open, so the answer becomes, "Fix it yourself," which means setting aside six weeks to learn the code.

Plus, politics -- one guy loves the GPL. Another insists on BSD because he wants to use the code in a startup. Or the project has great features but is led by absolute jerks who reject everything you do. Forking may make everything worse. The price of freedom is eternal squabbling over how to use it.

Developer torture No. 14: Weird geniuses
Credit: Ben Barbante
Developer torture No. 14: Weird geniuses

One dude refuses to look you in the eye. Another only works from 9 p.m. to 9 a.m. A third responds to your emails with 25 paragraphs of esoteric, combative blather. A fourth sends one-word answers or none at all. A fifth is making venison jerky using heat in the server room. Every last one of them is supposedly indispensable, according to the boss.

The tech industry is filled with oddballs, and you're the sane one who has to deal with all of them. Or maybe you're the elusive 10x developer with a few quirks everyone is working around? Admit it: We all have a little bit of that in us.

Developer torture No. 15: Platform fragmentation
Credit: Ben Barbante
Developer torture No. 15: Platform fragmentation

Everyone thinks it's cute that Android runs on cameras, refrigerators, cars, and cellphones. Isn't that awesome? It is -- until you realize you have to make sure your Android app performs adequately in all of those environments. To properly test it, you must buy a refrigerator, a car, and a camera. Even the fragmentation of platforms like iOS can be nerve-wracking because the small differences add up.

Developer torture No. 16: Testing
Credit: Ben Barbante
Developer torture No. 16: Testing

It worked fine on your desktop. The demo in the conference room went wonderfully. But then the boss kicked it up to the CEO, and it failed. Or maybe it worked fine, so you shipped it -- only to discover it was crashing on the machine of the CEO's mother-in-law and she's been writing "helpful messages" about it ever since.

Testing is a requirement, but doing it thoroughly is almost impossible. The public has a bazillion combination of DLLs, libraries, extensions, and viruses loaded on their machines, and sometimes they crash your software only when two weird things work together. Try building a test environment to get all of those things straight!

Developer torture No. 17: Third-party APIs
Credit: Ben Barbante
Developer torture No. 17: Third-party APIs

The stack of software could save you six months of work. The price is right. You sign the license, and everything goes well for a few months.

Then the trouble arrives. Maybe the API's creators want to update the code and deprecate the methods you use. Maybe the API raises the rates to exorbitant levels. Maybe you pay the new rates, but no one else does, so the company goes out of business. Maybe the API owners get jealous of everything you've done and cut you off. There are thousands of ways that the relationships go south, and sometimes two of them hit in the same week.

Developer torture No. 18: Meetings
Credit: Ben Barbante
Developer torture No. 18: Meetings

It can take an hour to get your head into the right space to write code. It's not easy to get into the flow of programming. Remembering all of the details of the code doesn't happen on its own.

Yet somehow, someone wants a second of your time when you're 95 percent of the way there. You're finally starting to roll when the boss calls a meeting. Then there's the way that the managers want to lord their position over you by scheduling meetings when it suits their time.

Developer torture No. 19: Side projects
Credit: Ben Barbante
Developer torture No. 19: Side projects

Every neighbor, relative, high school friend, ex-spouse wants to talk with you about their totally cool idea that will be worth billions. Could you code it up in your spare time? Come on, the kids are young; you can play with them when they're older. Plus, the cash is coming soon, and that 1 percent stake for engineering everything will make it all worth it.

Or you get your own itch and sit down to scratch it one Saturday. Six months later, the sun is a frightening occasional acquaintance, you're barely skating by at work, friends are a distant memory, and version 0.1 is one last big-picture refactor, I swear, away from burning up GitHub.

Developer torture No. 20: Unsolvable algorithms
Credit: Ben Barbante
Developer torture No. 20: Unsolvable algorithms

Your boss wants you to factor a large number before lunch. While you're at it, could you solve some NP-complete problems? You try to explain that these are considered to be very, very hard problems for computers. You try to say that no one knows the answer. The boss doesn't care. You say it's like dividing by zero and your boss replies, "Dividing is just the opposite of multiplying. Sounds easy enough to me. You're just trying to pad your budget, right?"

Or you let ambition get the better of you. Somebody somewhere on the Internet posts a tough problem. Or a company offers some kind of hacking prize. The glory feels too good before you even begin.