Back 25 years ago the way we started to write a new version of a successful product was that we deleted the previous version and started with a clean slate. Virtually all the code we wrote was thrown away and many new versions were started from scratch.
But we can’t do that today. The systems that we build today are much larger and far more comprehensive than anything that we did back then. It doesn’t make sense to start from scratch when we write a new version of an existing product and so we have to think about the software that we write differently.
Building architecture has come to realize the same thing. In the old days a house or store was built specifically and only for that one purpose but today we see suburban areas become urban areas. Houses become shops which become common spaces and so the way buildings are built today have to be more flexible and accommodating so that when neighborhoods change the buildings can be more easily repurposed. This implies a retraining of building architects and the practices that they use in order to construct these newer buildings.
The same thing is true in software development. If we want to start building software that is able to be repurposed then we have to rethink how we build software in the first place and we have to identify what makes software easy to change what makes software difficult change.
It turns out that the practices for making software easy to change our very straightforward and not hard to learn. I cover just a handful of these practices in my classes and although not exhaustive by any means they’re a great start and makes a huge difference when put into practice on a development team.