It’s hard to fight an enemy who has outposts in your head. — Sally Kempton
It’s hardly a secret to anyone who knows me, but I have a confession to make to the rest of the world: I am addicted to developing software. As GoddessJ can attest, if I don’t do some kind of development work every few days, I get cranky and hard to live with.
The aesthetic beauty of well-designed code… the excitement of matching your knowledge and skill against an uncaring and sometimes apparently-hostile machine… the sense of control and mastery when you succeed at a task that is right at the edge of your current abilities… there’s no game or activity that can give me anywhere near the rush that successfully designing and writing a powerful program does.
Which makes it all the more puzzling to me that I’ve started so few actual programming projects. I’ve thought of quite a few that I’d like to have, and that other people might appreciate as well, but I seldom get past the thinking stage of them. When I do, I sometimes get as far as writing parts of the program before I give up on it. Part of the problem is that most programs aren’t much of a challenge to me anymore (and learning new things is the source of fun) — they generally consist of doing the same things that you’ve always done, just putting them together differently. But as I’ve already decided at that point that I want or need the end result badly enough to put in the effort, I couldn’t figure out why I couldn’t keep up interest in it long enough to finish it.
I’ve had that problem with Project X for many years. I ran into it again (on a much smaller GTD-related project) a couple weeks ago. But this time I finally caught what went on in my head during that decision. If it were translated to a conversation, it would go something like this:
Enthusiastic Side: This project is going to require X, Y, and Z, and then U, V, and W. After that, I need to… Pessimistic Side: Whoa, whoa! X is going to take all afternoon, and Y will take a full day. I don’t even know how long Z will take. And there’s even more after that? Enthusiastic Side: Um, yeah. U and V are very important, and I’ll need to add W before it will really be useful to me. Pessimistic Side: And how long are you planning to spend on this, before you find out that someone else has already written something that’s ten times better and free as well? Enthusiastic Side: Hey, I’m not doing it just for the end result! I’m doing it to learn, and because it’s fun to tackle new challenges! Pessimistic Side: How many new challenges will there really be? And how long will they take to figure out? You’ve got more important things to do, you can’t spend that much time on something so trivial! Enthusiastic Side, defeated: Yeah, I guess you’re right. It’s not worth the effort. I’ll just go watch a movie instead.
All of this was simply a brief flash of thought, at a mostly-subconscious level. I wouldn’t have caught it at all if I hadn’t had it so many times before, and if I hadn’t been watching for it like a hawk this time. But since I did catch it this time, what could I do about it?
First thought: silence the pessimistic side. I know a sure-fire way to do that, from long practice: confront it with the truth and it will shut up. Unfortunately, my pessimistic side already has the truth here — nothing it brought up was a lie, or even much of an exaggeration. Every programming project consists primarily of things that aren’t any kind of challenge to me anymore. Someone else has usually written something that already does most of what I want, and it’s free and open-source, and a lot more polished than anything I could cook up in the time I’d allow myself to work on it. And everything always takes at least three times as long as I initially estimate that it will.
Okay, second thought: support the enthusiastic side. Find little parts of the task that are new challenges, or that I can use new programming tools on. Acknowledge that it’s going to take time and effort to do it, but reinforce the idea that the result will be worth it. And even if someone else has written a free and open-source alternative, it will only mostly fill my needs, and it’ll keep annoying me with the little things that it doesn’t do the way I want it to. Those are all good, logical, and true arguments. Unfortunately, they just don’t work for me. Maybe my pessimistic side had too much practice when I was younger, or maybe it’s just naturally stronger than my enthusiastic side. Or maybe my pessimism has the home-team advantage of being backed by strong emotions (primarily a preference for doing something easier and more exciting and enjoyable in the short term), and my enthusiasm for the project just can’t match them. Whatever the reason, it’s back to the drawing board.
Thought number three: I’ve already decided that it’s worth doing, so just ignore the emotions and do it anyway. Believe it or not, that actually can work… but only for a very short time. Without some emotional drive, some joy to work toward or some horror to run from, there’s nothing to stave off the lure of books, movies, games, and the Internet. That’s especially bad for me because I usually work from a home office where all four are very easily accessible. I’ve occasionally gotten around that by taking my laptop somewhere else to work (a restaurant or the food court of a shopping mall, for instance), but that has a lot of disadvantages as well — for instance, no access to my reference books, and always a much less comfortable workspace.
That left me fairly stumped. All of the visible paths were impassable. Obviously I had to come up with something completely “outside the box.” That’s something I’ve never been very good at — I need a mental box of logic to frame my thoughts, I’ve never understood how people could accomplish any kind of useful thinking without it. So I mentally fumbled around for several days, trying to find another path or a way to make one of my initial thoughts work.
Until I was falling asleep one night — that’s when I generally have my most useful insights. I suddenly realized that there was another way to approach the problem. It’s something that I’ve read about in several different places, including Getting Things Done, but that had never really sank in: whenever you get stuck, break the problem down further.
My enthusiastic side wanted to plan out the entire solution ahead of time, and my pessimistic side reacted strongly to that, especially when I couldn’t immediately see exactly how to do some part of the task. But if I only looked at a small piece of it at a time, and could see exactly how to tackle it and where it’s finished, my pessimistic side would barely grumble. It’s not really “thinking outside the box,” so much as finding a different box to think in!
Does it work? Only time will tell. It seems to so far, but my enthusiasm for the idea might be distorting the results. At least for the moment, I’m back on track. If I can just remember to keep thinking this way, I should be able to finish the program. Then I can tackle Project X from the same perspective. That’ll show what it’s really worth.