How To Ruin a Project

This is a bit of a riff on Jerry Weinberg’s ten commandments of egoless programming (via the also-excellent Jeff Atwood). I’ve found that many engineers, perhaps even a majority, respond more to aversion than to encouragement, so a “how not to” that can be inverted in one’s head sometimes works better than a “how to” taken straight. So here are the ways to turn a promising and fun project into a soul-sucking wreck. Take it from an expert.

  • Miss the point. Never try to figure out what the project’s really about, or what it will be used for. Add features that have nothing to do with any valid use, removing or breaking other essential features in the process. Develop and test on a totally inappropriate platform. Confuse scalability with performance, or test the wrong kind of performance and then complain about the results.
  • Claim authority you haven’t earned. Assume that your reputation or barely-relevant experience entitles you to sit at the head of the table before you’ve made any significant contribution. Push aside those who started the project, who have contributed/invested more, or are more affected by its outcome.
  • Focus on the trivial. Spend all of your time – and everyone else’s – on issues like coding style, source-control processes, and mailing-list etiquette. Carefully avoid any task that involves a more than superficial knowledge of the code. Make others do the heavy lifting, then take half credit because you added some final polish.
  • Be self-important. Make sure everyone knows this is the least important of your many projects. Insist that every work flow and library choice conform with your habits on those other projects so that your life will be easier, even (especially) if it’s to the detriment of those doing more work.
  • Be dismissive. Clearly, your specialty is the one requiring the greatest technical prowess. If you’re a kernel/C programmer, look down your nose at web/Ruby punks. If you’re a web/Ruby programmer, look down your nose at enterprise/Java drones. If you’re an enterprise/Java programmer, look down your nose at kernel/C neanderthals. If you’re the world’s greatest maintenance programmer, specializing in minor tweaks to twenty-year-old programs representing many person-years of prior work , criticize the “immaturity” of new code that does new things. Above all, treat the specialty most crucial to your project as the exclusive domain of novices and children, with you as the “adult supervision” to bring it up to snuff in the areas that experts really care about.
  • Argue from authority, not facts. If anybody provides empirical evidence to support their choice of a technique, algorithm, or style choice, ignore or reject it. Never provide any such evidence to support your own choices. Make sure everyone knows that your own personal experience trumps any such evidence, even if that experience is less (or less relevant) than others’.
  • Lecture. Use every interaction as an opportunity to “educate” others about the reasons (rationalizations) for your personal preferences. Bonus points if you deliver a lecture on a subject that the recipient actually knows better than you, without ever pausing to determine whether that’s the case.
  • Be persistent. If any decision ever goes against you, resist it forever. Treat every bug from then on, no matter how unrelated or trivial, as an excuse to beat the dead horse some more. If you’re at a company, use company time to pursue your approach instead of the approved one, and drag colleagues with you. If you’re working on open source, threaten to leave/fork.
  • Be a hypocrite. Take some valid principle – portability, scalability, loose coupling – and use it to demand invasive change from others, then make your own changes that violate the same principle. Demand code reviews for every checkin, aggressively review others’ patches, then check in your own changes unilaterally. Bonus points if your unilateral changes were clearly never tested and cause grievous breakage.
  • Be the martyr. After all doing all of these other things, your colleagues might not be keen to work with you again. Make sure everyone knows you were just trying to help, that you tried ever so hard to make them better engineers, and that the lack of gratitude reflects on them instead of you.

Many thanks to the people I’ve worked with who have inspired this. Without you, the list would be much less comprehensive. I hope its inverse will help others participate in projects that are more successful and fulfilling for all involved as a result.

November Tweets

For those (few) who follow me but not there, here are my top ten from November.

  • OH at museum: Now that we’ve appreciated all the diversity, can we please move on? (November 07)
  • If I have publicly and violently clashed with the founders, please pardon my raucous laughter when you try to recruit me. (November 09)
  • Using Inconsolata font for code editing. Quite nice. (November 11)
  • My take on the “your argument is invalid” meme, inspired by driftx on #cassandra. http://imgur.com/WtiFL (November 12)
  • Tea Party yard work: borrow a neighbor’s leaf blower, then blow all your leaves onto his yard. (November 14)
  • http://www.cs.virginia.edu/~weimer/ shows a *negative* correlation between some popular coding-style preferences and actual readability. (November 15)
  • If you work in distributed systems but haven’t read Saito and Shapiro then fix that. (November 16)
  • How many applications have you used today? How many are you personally willing to rewrite to use an “alternative data store”? (November 29)
  • I am the king of . . . just a minute. Where was I? Oh yeah, the king of . . . just a sec . . . multitasking. (November 29)
  • If hand-waving built muscle, I’d know some very buff architects. (November 30)

October Tweets and Links

A little early, but it’s been a good month.

  • There are only two problems with distributed counters. Or maybe three.
  • Problems with .ly domains? Less money for Libyan government, some URL shorteners die. And the downside is . . . ?
  • Self-driving cars, offshore wind farms, embryonic stem cell treatments – all on one glance at the news. What times we live in.
  • Assembly Instructions from Hell
  • Sauron to bid for Tea Party leadership. It would be an improvement.
  • Caching separate from the DB (any type) is not the enterprise version of a DB which is inherently distributed. It’s the buggy version.
  • The last frame is so funny because so many really do think such “answers” are useful. Not Invented Here
  • Matchstick Tirith
  • Simply awesome microphotography.
  • Lord of the Rings + Rudolph the Red Nosed Reindeer
  • Sears for zombies. (“Afterlife. Well spent.”)
  • Anybody who refers to an “internet cable” shouldn’t do distributed programming.
    [Just for you, PeteZ: the person was referring to a physical object, not just internet service from a cable company]
  • App devs shouldn’t create infrastructure . . . not because their time is better spent, but because they suck at it.

Programmer Humor

I’ve never found a programmer-oriented comic as good as Angst Technology . . . until, perhaps, now. Yeah, sure, there’s XKCD but it’s more generically nerdy. Geek & Poke is good, but my absolute favorite right now has to be Not Invented Here. Since I’ve written a few times about rewriting code, the current series is particularly funny for me – and the dig at pattern-mania is welcome too.

597 bugs

Go check it out. Do you know of any other good ones?

August Tweets

Some of my (and others’) favorites from August.

  • Based on a mispronunciation by my daughter, thinking of renaming my blog to CyberVinegar.
  • The programmer equivalent of age/sex/location is OS/language/editor.
  • Laws should affect human behavior, not router behavior.
  • Using virtualization on the desktop means that crappy desktop software can force you to reboot an entire cluster.
  • Never say “I’m game” at a hunt club.
  • “Wisdom of crowds” is a misnomer. Crowds aggregate *knowledge*; wisdom is usually excluded or distorted.

Don’t want to miss my next pithy comment? Here I am.

A Future Without Books

Cindy: If books disappear, what are people going to do when they need a heavy flat object to press leaves or something?

me: Use last year’s computer.

That’s One Angry Cat

Apparently there’s a big debate about UTIs in Snow Leopard. No, not that kind of UTI, and not that kind of snow leopard. It just goes to show what an alternate universe we geeks live in sometimes. That’s why trying to Google for information about malus domestica, or transparent wall openings, will often lead you to something else entirely.

Use The Right Word

From what is actually a very interesting paper:

To simplify our presentation, we assume that read and
write operations always refer to entire chunks. We also
assume that the size of a file grows monotonously

Hey, somebody might find that new data interesting!

Garfunkel and Oates

Thanks to Isis for bringing these very talented folks to my attention. (Warning: lots of not-so-family-friendly language.) I didn’t particularly care for the song she linked to, but – as somebody who has enjoyed Uncle Bonsai and similar acts for years – it was enough to check out a few others. Sex With Ducks is a brilliant satire of anti-gay-marriage slippery-slope arguments, dedicated to Pat Robertson. So far, though, my favorite is Self Esteem.

My self-esteem’s not low enough to date you.
It’s close, but not quite there.

Ouch.

Ewes the Write Whirred

Recently I found two egregious examples of homophones appearing in serious documents. The one in a spec used “undo” where “undue” was meant; I don’t remember the other one. As I was looking for something to explain the difference between homonyms, homophones, and so on, I found a funny story based on examples.

It felt like I had a pistil pointed at my aye browse. No, it felt like he was pointing a canon at me. Even if I ducked quickly, I doubted the missal would have mist.

The whether was good, good enough for a pyknic, so I putt on my shoo and went outside for some air. A large mousse walked by, causing a minor toxin and forcing a frightened creek from my friend.

Of course, no post about this kind of thing would be complete without a link to Ladle Rat Rotten Hut

WANTS PAWN TERM DARE WORSTED LADLE GULL HOE LIFT wetter murder inner ladle cordage honor itch offer lodge, dock, florist. Disk ladle gull orphan worry Putty ladle rat cluck wetter ladle rat hut, an fur disk raisin pimple colder Ladle Rat Rotten Hut.

…or to Staying Positive.

I awoke rested and comfortable this morning, having suffered from somnia these past few weeks. Dreams of requited love still in my head, wishing they didn’t stretch to finity. I spent an ordinate amount of time in bed before getting on with the day. Looking in the mirror I noticed I was sheveled and ready to get started.