“One of the abstract terms we use in software development is business value. It’s one of many. As an industry, we are very good at producing ambiguous terms and acronyms that end in DD (TDD, BDD, DDD and the list continues). But that’s a different matter. I often find myself in conversations on what business value is, and more importantly, how do we quantify it. And, most of the times, I end up making a case that there are also other aspects that bring value, apart from the features themselves. Because, let’s be realistic, features provide the first, and most direct, source of value in software development.
But there are other aspects that bring value in a software product, and one of them is software design. While more and more people do acknowledge its importance nowadays, it is at the same time one of the aspects that get overlooked during the actual implementation. And most often than not, it’s not because we don’t know how or don’t care about it, but there always seems to be a conflict between delivering features and improving the design over time. When in reality there is no conflict at all.
NO DESIGN VS GOOD DESIGN
To better understand this, let’s take a closer look at two different approaches, from the perspective of the cost of building features over time. This is not new. It is based on the “Design stamina hypothesis” by Martin Fowler, which he used to make a case for refactoring. The y-axis represents the cost of adding features and x-axis is time.
In the first example (blue line), we are focusing on simply getting features out the door. Which feels great when you are starting with a clean slate, but after a while, bad design tends to compound. Working with the code becomes increasingly difficult, but then it also constraints new code to be done in the same wrong way. As you can see, it’s an exponential function, since more effort (and thus higher costs) is required to add new features.
The other approach (red line) is focused on guiding the design over time, while shipping features. This is basically what evolutionary design is all about – growing the system in an iterative and incremental way, by adding the minimum amount of code to satisfy business needs. It already starts with higher costs, and it is an exponential function as well. Just with a much lower basis.”
Continue reading on Strongbytes’ blog.