Software development is like an art. Every project starts with a concept, an idea that organically unfolds into something beautiful. That is the creative process that makes my work worthwhile. However, for every masterpiece there are a thousand failures. How should software developers deal with failure?
Failures are unavoidable. Rather than fighting against failure, software developers should embrace them as a useful part of the craft. In order to profit from failure, it needs to be expected.
Why did I wait so long before admitting failure? I don’t think it was pride or fear. It just caught me off guard. I wasn’t expecting to fail. This blind spot is a dangerous one. This mistake cost my company four days of work. It could have been much more. Had I been watching for failure and heeded the warning signs, I could have caught my mistake much earlier.
In order to fail profitably, mistakes need to be caught early. The later they happen, the more they cost. There are two ways to do that. First, continually evaluate your work. Have benchmarks for success and failure. Are you meeting your original goals? Are you fulfilling user requirements with your work? Second, be accountable to someone. Often we cannot see our own blind spots. Be completely transparent about what you are working on with your co-workers. If you are self-employed, have a mentor or partner that you can share your work with.
Don’t Feed a Failure
Don’t Repeat Yourself
Failures are rich with useful information that often goes to waste. DRY (Don’t Repeat Yourself) is a principle used in software development to minimize duplicated code and redundant systems, but it can be extended even further to the development process. When I make a mistake, I evaluate it, find out why it happened, then take steps to prevent it.
After recovering from the failure of my project this week, I identified two reasons for the failure. I didn’t identify the problem soon enough, and my original design was too complex. To solve the early identification problem, I am using daily stand up meetings and more frequent code reviews to be as transparent as possible about my work. To improve my designs, I plan to collaborate more with co-workers during design stage.
No one enjoys their failures, but when we harness their power, failures can become a useful tool in the software developer’s toolbox. We use them to improve ourselves. If software development is an art, then our failures are just the road to creating a masterpiece.