One of the points I made that was that you need to continuously optimize the solution to handle costs (of course there can be and there are other drivers to that like performance, security etc.) – these optimizations may result in the need to change the architecture either by replacing a technology or redesigning parts of the solutions. I demonstrated this with a couple of such transformations we did (and doing, and will be doing in the future) @ AppsFlyer.
Ripping out a technology and implanting another in a running system sounds like a scary and risky move, but truly – architectures should be as agile and evolvable as any other part of your system. If you can be agile about adding features you should also be agile about your architecture. This is something we must be able to do
Hardware vs. Software -the mere names tell you the difference. Hardware is rigid, fixed, Software is flexible, easy to change, soft … software. lots of years ago when I worked on a system that developed both hardware and software components – the hardware guys always said they had to finalize designs before they start “cutting down the iron” – after that, changes get expensive , hard, .. hardware.
Along came virtualization and then the cloud, hardware is probably still rigid but for all intents and purposes, it is as flexible as you want it to be. You can change instance type to a bigger, stronger machine without effort,you can customize the vm sand you can add as many more machines as you’d like – flexible, easy, soft… er… hardware
Software cannot be the bottleneck to change – I don’t want to sound too much like Trump but it is time to make software soft again!
By the way, this is not just a rant – I actually wrote about evolving architectures in the past (2010). You might want to read these posts to learn more:
- Part I – What is software architecture?
- Part II – But design is emergent
- Part III – starting out
- Part IV – Design mechanics
- Part V – Leaps
- Part VI – Simplification
- Part VII – Parallel