When we start building a new software application we don’t often follow a rulebook. And when it is eventually deployed, many of the things we forget about at “design and development time” appear and bite us. Many shortcuts we knowingly or unknowingly took make us have to do more work to get it “over the line”.
Architecture is emergent. It happens continuously whether we like it or not. Libraries that we depend upon, infrastructure working in a certain way – dependencies are created and then break things.
Architecture is, therefore, adaptive. By nature, it has to change to survive.
Therefore we should be well versed in understanding what it means to change an architecture – or we should be smart enough to know that it will change and build something which can be easily adapted.
This is the constant trade-off that we, as engineers and architects, need to make in our design and build of effective software. It’s always a trade-off between what works now, and works well, and what might work in the future.