I’m going to talk about something more technical today that may be outside what many people will find useful. I create a lot of software projects from scratch. As a consultant I get brought in to create a thing that hasn’t existed before and make it happen. Generally I go through this process shortly after the requirements have been outlined and before they’ve been fully defined. I’m good at handling situations with ambiguity which really helps when the client either doesn’t know or can’t express exactly what she wants.
During this process I try to keep everything as flexible as possible. This means quick iterations on items and not handling every special case during the first round. The first round of code is partially exploratory as we see what works and doesn’t once we hold it in our hand. This first round is one of a few rounds, each of which further hardens the code into something stable.
But in the early phases the code must remain malleable. For that reason I won’t handle every possible error condition or write tests in the early phases. That effort could be wasted in more than one way. First, we may decide that the feature isn’t necessary anyway and throw it out. Second, the more I build around the first phase of code the more invested in it I’ll feel and the less likely I am to remove something that isn’t working right. It isn’t rational, but I’ll feel like I’ve wasted the effort and remember how much I put into it and that will discourage me from taking actions I need to take.
I’ve never blacksmithed before, but I’m guessing the way I build an app is similar to how a blacksmith makes a sword – keeping it fluid and malleable in the early stages and making it harder and stronger with each subsequent pass.