On learning from failure
»From the productivity, programming, and refactoring part of the brain.
At my first job, I was responsible for write three core components simultaneously. I had to design, code, and test production level components that were on a deadline (read: really quickly). My coding process was to blink out the design on a whiteboard, and refactor iteratively. The results were three on-time, production-ready, well-designed components.
So I thought to myself:
Self: If I just had the time to come up with the design, I wouldn’t need to accommodate a refactoring stage, and I could have arrived at the same well-designed components a lot quicker, right?
Not quite. I realized now that it’s not that I didn’t spend enough time on design. It was because I was failing quickly, and I was learning from my mistakes even faster. This shouldn’t have come as a surprise since success is really about knowing which paths lead to failure and deliberately avoiding them.
So I guess what I have to say is, when engineering a piece of software, you’re going to make mistakes, but you better damn well learn from them. And the faster you make mistakes, the faster you’ll arrive at success.