Tim Riley’s post about the way solving a difficult software development problem can interfere with your entire life struck a chord with me. Although Tim’s problem was bigger than anything I’ve had to deal with, credit card processing on a client’s website, the horrible feelings are the same.
All software has bugs, you accept and systematically work through them. But some bugs exist on another plane, unable to be fixed through regular debugging processes. Often they’re complicated by context, an unfamiliar environment or parts out of your control. You can become obsessed with these bugs. When dealing with them I have an extremely difficult time thinking about anything else. I can’t read, I can’t talk to people, I’m unpleasant to be around. After hours without progress you go to bed thinking about it. Thinking about it makes you angry and frustrated but you can’t stop thinking about it. You spend so long at the computer you lose all perspective and follow paths that take you further from the solution. With each minute you spend banging your head against the problem you think less clearly and the possibility of solving the problem decreases. It is frustrating.
Experience reminds you how to overcome this wall. You have to get up, leave, distract yourself and come back with a fresh perspective and a clear mind. Actually doing it is difficult because it feels like quitting, it feels like you’re delaying the solution. It’s difficult if other people depend on the solution, it’s difficult because you feel like you’re close, it’s difficult because you desperately want it fixed and out of your mind. To solve the problem you have to stop trying to solve the problem, at least for a short while.
Tim went through this while dealing with other external stresses. His post is a great insight for non-programmers on the darker side of software development.