FIXME: this is wrong — or — Terrible Is Not As Bad As You Think

if (rc < 0) {
  /* FIXME: this is wrong */
  return -1;

People who read my code are often amused (or perhaps horrified) to find little comments like that one, strewn about haphazardly. They litter the code, especially in nascent projects; tiny landmarks calling attention to the fact that James didn't finish something all the way.

I like my little FIXMEs, and I'll tell you why - they free me from the mundane details, so that I can focus on the bigger picture.

Don't mistake me — I love the details. They are the texture of any good bit of technical work. Details are what separate the professionals from the amateurs, the craftspeople from the hacks. Details are the most important part of a production-grade project.

But most of my projects aren't production-grade, and absolutely none of the successful ones start out life that way. Over the past two years, I've taken a toy-first approach to building software, and it's working out better than I had ever hoped.

You see, by assuming every project I start is, first and foremost, just a toy, my programmer's guilt has less power over me. I stop caring about nice debugging, error handling, syslog integration etc. — all things explicitly not related to the project's primary raison d'ĂȘtre. Most of the time, the project scratches the itch it was meant to, I push some code up to Github, and move on with life.

But sometimes, a project takes on a life of its own. Someone starts using it regularly. That someone might even be me. And there, in the codebase, are a bunch of little road signs that remind what I sacrificed to get there.

FIXME: this is wrong, but it feels so right.

James (@iamjameshunt) works on the Internet, spends his weekends developing new and interesting bits of software and his nights trying to make sense of research papers.

Currently working on Bolo.