A Rembrandt painting captures the odd psychology of software development.
There's this Rembrandt painting that has hovered in my mind for the past several weeks as I've prepared the Big Medium 2 beta for public release. I'm not normally a Rembrandt guy, but this one sticks with me because it captures so well the final-brushstrokes moment of finishing a major project.
The painting is titled Artist in His Studio, and it shows a painter stepping back from his canvas, taking it in. The light around the painting is ambiguous; it could be coming in from the window, but it almost looks like the painting itself is glowing, magical. The canvas is oversized, bigger than the artist himself, who recedes into the shadows in the light of his own creation. The painting, though hidden from view, has taken on a life of its own. It's ready.
What a great metaphor for how I feel about Big Medium 2 right now, on the day that I release the public beta. I've been working on this baby for months and months. It's been the primary focus of my days and nights, a project in which I feel so personally invested that it seems somehow bigger than me. Over the course of the project, it has inspired pride and despair, exuberance and uncertainty, clarity and confusion. And now, I've rounded a corner where I step back from it and, although it's not yet finished, I recognize that, hey, it's really pretty damn good. I'm ready to take my little creation out into the light.
I admit, it sounds a little overwrought. Exuberance and despair? Jeebus, it's just software. But I think it's the nature of creative pursuits that the author experiences the work as soap opera, every day with its allotment of mean drama and glowing victory. It's "just software" in the same way that a writer's novel is "just a book" or an artist's canvas is "just a picture." All of these things involve the same creative rollercoaster ride to the finish.
I think a lot of folks think of programming as a robotic activity, something cold and methodical. I get it, I had that impression once upon a time, too. It turns out, though, that programming is a richly creative pursuit. The first decade of my career was in the "creative" fields; I worked as a writer and a journalist, I made films and TV shows. But none of these activities have provided the same absorbing challenges as imagining, designing and building software from scratch.
In his essay Hackers and Painters, Paul Graham compares coders to artists:
What hackers and painters have in common is that they're both makers. Along with composers, architects and writers, what hackers and painters are trying to do is make good things....
When people walk by the portrait of Ginevra de' Benci, their attention is often immediately arrested by it, even before they look at the label and notice that it says Leonardo da Vinci. All those unseen details combine to produce something that's just stunning, like a thousand barely audible voices all singing in tune.
Great software, likewise, requires a fanatical devotion to beauty. If you look inside good software, you find that parts no one is ever supposed to see are beautiful, too.
Lord knows I'm no Rembrandt or Leonardo, but Graham's onto something here. I definitely grok the obsession with detail and beauty in a big software project. (And, cough, I definitely hear voices.)
This kind of detail-driven work makes for long projects, and here's the thing about long projects: The beginning and end are thrilling, but the middle stretches into an uncertain test of endurance. When you're a solo act like me, or like the artist in Rembrandt's painting, it's just you. All you've got are your ideas and some mystifying confidence that you can actually land this thing. And then, suddenly, after a long night, the sun comes up, the outline of the final product materializes, and you realize that you've actually created something... cool.
John Gruber of Daring Fireball just posted an essay about beta testing in which he observes that the "beta" concept (both the term and the process) is often abused by software developers. Along the way, he offers a great explanation of why software developers launch products too early:
The home stretch is the hardest part of software development. You've already been working for months, often even a year or longer. But just because you can see the finish line doesn't mean you’re actually near it. Sometimes half the engineering effort is spent on what seems like the last 10 percent of the project. You want to ship. You've already blown the original deadline. The software works, and you know it's cool, and you really think users are going to love it. But if it isn't done, it isn't done.
So here I am. Big Medium 2 is cool, and I think users are going to love it, but it isn't done. I've finally arrived at a point where I can step back from the canvas and recognize the final image lurking in there somewhere. That's thrilling in itself, but I also know that there's still a long ways to go. The difference is that by releasing the beta version, I've got company for the rest of the journey.
Today I open my studio and invite the public to take a look at what I've made. I'm delighted and terrified. I hope you like it.