Monday, April 21, 2008

One Step Forward

There will always be more things to do than you're able to get done. Period. Although we steep ourselves in the myth of perfection, this principal applies to pretty much anything worth doing: learning a language, organizing your house, and especially running your company. Who hasn't speculated about the things they would accomplish if they "had more time"? Yes, time is a resource more scarce and precious than most of us know. The painful fact is that of all the resources at our disposal time is the only one that spends itself. You can save your money for when you need it, allocate your space as necessary (and you can always change it later), but it's all against the backdrop of time, which marches on without mercy. It's being spent right now, as you're reading this, and it continues to slip away as you sleep.

Ultimately the knowledge of the nature of time can be very valuable. Given the right outlook, you can learn to manage time (or more accurately, the things you do as time passes) better and the efficiency gains you can achieve within your life are astounding. But it can also be very damaging. In the same way that knowledge of one's own mortality can sometimes lead to an irrational fear of death, the acute awareness of time's unyielding progress can cause what is best described as an irrational amount of stress in a person's work-life. You know you have more things to do than can get done, so you cram as much of it as you can into your workday, then decide to work a little extra because there were a few other things you wanted to wrap up, and when bedtime comes you still aren't satisfied so you stay up a little later than you meant to (finally falling asleep at an ungodly hour), only to awake to the unpleasant realization that your backlog of tasks has still managed to grow and the things you finished yesterday really weren't done all that well because you were too busy worried about the quantity of work in front of you. Ultimately the stress of the unabating todo-list is so much that you slow your progress to practically nothing, since all of it seems so futile anyway.

Yeah, I've been there, and I have news for you: you're ruining your life. Brute force rarely is the best solution to any problem, and it certainly isn't the way to go with regard to timely software development. We need some sort of milestones to remind us that we ARE making progress, and that the product IS getting better, because if we don't have them it's like riding a stationary bike.

Maybe that analogy doesn't make any sense, so let me dive into it for a second:

Picture a stationary bike with no monitor; just the pedals, the wheels, and the handlebars. There's nothing else in the room (no clock, nothing). You climb on and start pedaling. After a little while you're kind of bored. How far have you gone? How long have you been pedaling? How many calories have you burned? You don't really know, so you'll probably just get off and go do something else.

Now what if the bike has data streaming to you from it? One display shows how long you've been pedaling, one let's you know the distance you've covered, etc. Now you'll get into a rhythm; As you get tired, you'll look at your timer and tell yourself "5 more minutes! You can do it". Or you might say "I know I can make it to 10 miles". Having concrete goals extends your motivation by leaps and bounds.

Now take that and apply it to developing a product. Sure, you have a task list with 100 things on it, but the worst thing you can do for your motivation is chip away at 50 of them over the course of the day. You'll have hours of work and nothing to show for it. Pick one, and knock it out. Pick one bug, and fix it (and include some tests so that it won't ever happen again; Or pick one feature, and implement it decisively, refactoring as much as you can as you go. Now you've taken one concrete step forward, and you can see that your product is improving. Even if that's the only thing you got done today, it's one step better than it was yesterday, and you're still moving forward.

There's a kind of magic that starts to take place with this approach (at least in my experience), because it seems like you're traveling twice as fast as you're used to. At the end of every day, you have something to show for your work, and you're encouraged enough to be excited about getting something done tomorrow (and so are your teammates, if you have any). As the saying goes, a journey of 1000 miles begins with the first step; so just open the damn code editor and take one.

1 comment:

Dorai Thodla said...

Great post. I have read a few of your posts and plan to read more. You choose topics well and make a lot of sense. I enjoy reading them.

Just wanted to say "Thank you".