I once read that building software is like jumping off a cliff and building a parachute on the way down. It stuck with me immediately. It's my stock answer for when someone asks me what I do for a living. I use it because I love the idea. It's funny, and it speaks to the creativity and pressure involved in our field. Read more...
But this expression isn't perfect - it ignores another ugly side of software development altogether. And that is finding the patience required to overcome the anxiety of anticipating whatever is about to be completed next.
Here's how it plays out in my head.
James: "I want to build that next feature so bad. This feature will change the world of software."
Bill: "Totally. But, we should probably make it so they can sign in before we do that, right?"
James: "Shit. Yeah, let's do that first. But after that, we are building this feature."
Bill: "But our users need to be able to reset their password, don't they? And the css is pretty shitty James. The sign up page is only a proof of concept."
James: "I should have thought of that. Yeah I guess so… but then we build it."
Sally: "James. I think I found a bug. Whoa, yup this form is seriously f*cked over here.."
The truth just sits there, staring at you like a big turd: Building an application takes a long time. Building software properly takes even longer. Actually testing what you built takes even longer than that.
Priorities change, it's a fact. They change for a lot of reasons, mostly because customers make demands. And they have a right to do so. But we are addicted to the idea of having more and more features. As if the concept of "enough features" even exists. Some place feature lists side by side when choosing a vendor. Mine is bigger than yours buddy.
There is a balance. Our goal as software developers is often to reach a "critical state" of maturity where we've met the "mandatory feature set" in our respective niche markets and can begin to differentiate ourselves from our peers with our unique features.
The funny, if not ironic, part of this story is that we're probably building faster than anyone has built before, with less resources. In the past, it probably would have taken ten times the personnel and ten times longer to build as much as we have. Yet the feeling remains.
It comes back to this; I can't wait to build the next feature. It seems less and less likely that we'll ever get there. And that's because there are never enough features. There is never enough refinement. There are never enough answers to enough questions.
So here's an alternate take on the classic.
Building software is like sailing around the world. But you leave on a raft, and every day you get not enough wood to build the next piece of what will become a boat that can take you across the sea.
And there's pirates.