Evolutionary architecture

I recently read an article about Sacrificial Architecture and it got me thinking on software design and longevity. In the article it actually alludes to something I thought of when thinking of what Sacrificial Architecture would mean.

Sacrificial Architecture

This would be the concept of making software knowing it will be disposed of in the near future. This has two major problems for me. Firstly you might cultivate the feeling that it does not matter what we build it will be discarded soon anyway. So there is no investment in making quality. Secondly I can hardly think of what to do today or tomorrow let alone know the requirements a month from now. Choices might get made that also impact success because of all the shortcuts being taken.

Reverential Architecture

The opposite would be designs where you create everything as if it would be running for 10s of years. I had no name yet so I will coin the phrase Reverential Architecture. Something to be revered in the years to come by stating how amazing and incredible it is. One problem here is shared with the previous one, you have no knowledge of what the near future will bring. It will most likely guarantee good quality. However it might also over-engineer and over-complicate the solution you are making and therefore will not deliver anything.

Evolutionary Architecture

I think a good middle ground is to evolve the architecture as the needs arise. This means making the software able to evolve of course. Likening it to biological evolution we might create a specialist. Instead of mutating this specialist into something that now does two things, let us create another specialist and create a symbiotic bond between the two organisms. Maybe there are already some of you who are reading this screaming micro services, however that is not necessarily the case. You might make a monolith composed of specialists, just look at a cell in a human body. It has a bunch of specialists in there and they all send messages to each other to communicate.

Of course there might come along a better specialist and then the question becomes, do we keep both populations or only one and then which one?

So start small, and keep it a collection of specialists inside a monolith for now and then in the future you evolve your architecture along with the outside world.

#devops