After reading The Simplest Thing that Could Possibly Work I couldn’t stop thinking about how Ward Cunningham describes the difference between problems and difficulties.
A friend of mine once said that there are problems and there are difficulties. A problem is something you savor. You say, “Well that’s an interesting problem. Let me think about that problem a while.” You enjoy thinking about it, because when you find the solution to the problem, it’s enlightening.
And then there are difficulties. Computers are famous for difficulties. A difficulty is just a blockage from progress. You have to try a lot of things. When you finally find what works, it doesn’t tell you a thing. It won’t be the same tomorrow. Getting the computer to work is so often dealing with difficulties.
As a software developer I love to solve problems, yet I become frustrated when dealing with difficulties. The more I think about it, I feel like frustration is a better word than difficulty. In fact, one of the definitions for frustration from Apple’s Dictionary is:
frustration |frəˈstrā sh ən|
the prevention of the progress, success, or fulfillment of something
I don’t mind slowing down, but I hate stopping progress. As I work through practicing TDD/BDD, I find that being able to slow down and take baby steps allows me to reduce the number of frustrations in my day. I shudder any time I have to touch code without tests/specs because I am afraid I’m going to break something and not know it. I’m not sure how I lived without tests, I know I spent a lot of time clicking around doing testing in the browser.