20 Tortures Developers Love to Hate

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.

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.

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 oh, while you're at it, I’d like a little fade-out effect on the website. Pronto.

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 just decides that it's time for a change. Let’s freshen the code! Or the old framework is just 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. Heavy lifting just to stay in one place. 

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 going 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 some young ingénue to play the CEO while you keep 95 percent of the stock. It's been done before.

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

No one denies the iPhone and iPad are insanely differently awesome. And 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, just 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.

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 only runs on Window 95. 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?

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 can’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.

Credit: Ben Barbante
Developer torture No. 7: Amenities

It starts out like a dream: Food, foosball, concierge drycleaning -- and good pay? Sign me up! And 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!

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 buzz-ness. 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.

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

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. So 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 just be time to Ctrl-Alt-Delete that employment agreement.

Credit: Ben Barbante
Developer torture No. 11: Documentation

Code is self-documenting, right? Okay, maybe not. But if we could explain ourselves with words, we would be selling cars or slinging drinks at bars. Yet 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?

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

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

Open source is a developer’s best friend, with a bit of fiend lurking in there. 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.

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

One dude refuses to look you in the eye. Another only works from 9pm to 9am. 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 indispensible 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 that elusive 10x developer with a few quirks everyone is working around? We’ve all got a little bit of that in us, after all.

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

Everyone thinks it's cute that Android runs on cameras, refrigerators, cars, and cell phones. Isn't that awesome? It is until you realize that you've got to make sure your Android app performs adequately in all of those environments. Doing a good job testing it requires buying a refrigerator, a car, and a camera. Even the fragmentation of platforms like iOS can be nerve-wracking because the small differences add up.

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 and so you shipped it only to discover that it was crashing on the machine of the CEO's mother-in-law and that 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 only crash your software when two weird things work together. Just try building a test environment to get all of those things straight.

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 arrive in the same week.

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 just happen. Yet somehow, someone wants just a second of your time when you're 95 percent of the way there. You're just starting to roll when the boss calls a meeting. And then there's the way that the managers want to lord their position over you by scheduling meetings when it suits their time.

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

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

Your boss wants you to factor a large number before lunch. And 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 just says, "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.