What do Film Making, Manufacturing, Construction, A Television Sitcom, Time Travel, and Oyster Farming all have in common? They’re all metaphors for software development (thank you Naresh Jain for your post on Software Development Analogies). Although there are a lot of software analogies out there with varying degrees of relevance to the situation at hand, it seems few people are as fond as I am of the Software as a Journey metaphor.
Into the Unknown
For those of you that aren’t aware of it, this analogy likens software development to a trip across unknown terrain. As your journey progresses, you run into obstacles that you never anticipated such as mountains, rivers, deserts, or oceans. In software creation, these could be considered analogous to political limitations, interoperability problems, communication barriers, or any other roadblock that confronts you during the course of a software project. A nice illustration of the analogy can be found here.
The Importance of Planning
Often times when I speak to a customer, they’ll mention that software projects are notorious for being over-budget and then, naturally, question the accuracy of the budget I am presenting. This is when I start drawing parallels between development and journeys.
For this analogy to really apply, you need to think of what the United States looked like during the mid-1800s. Sure there were roads and railroads, but the infrastructure would certainly look primitive when compared to what we have today. If you considered making a trip of even only 100 miles in this era, you would most certainly scour whatever town you were in for details that might help. After all, one small detail might be the difference between arriving safely at your destination and never seeing civilization again.
I view the software development world to be in a very similar state. Sure we have frameworks to help us solve some of our most common problems, but there are plenty of problems that are not so easily solved. To make matters even more difficult, things like phones, wearable technology, and the expansion of robotics into the mainstream create a new frontier that all of us still need to come to terms with.
When I consider a problem presented to me by a potential customer, I feel it’s my job to look at every leg of the software development journey and point out the problems as well as potential solutions. So when I give a customer an estimate, I’m reasonably confident that I’ve considered the biggest obstacles between them and a successful piece of software.
No matter how well you plan, however, the unforeseen will eventually make itself known. This is when it’s time to meet with the clients and re-evaluate the plan. Clients are often grateful when you point out a problem that could cost them a significant amount of money and are often inclined to modify requirements to be more cost effective. Even if the problem must be solved, the client is well informed of the situation and can work with you to reduce scope in other areas to compensate for the unforeseen complexity.
Though I’ll undoubtedly use other techniques to help customers better understand the software development process, the “Software Development as a Journey” will always have a place in my toolbox.