Have you noticed the latest trends in software architecture? These trends are pervasive practices that everyone seems to be talking about and doing. Or at least claim they’re doing.
Now we’re used to trends in fashion. Some of us are slavish followers of fashion. Most of us aren’t — we don’t care so much about following the latest fashion. But it is difficult to avoid the impact of trends even if you’re a late-follower or one of the late-majority. Take a look back at your family photos from 20 years ago, you will be dressed in the fashion of the day. The trend wave carries us all along.
This trend wave appears to be similar for software. For example in the 2000s we had the mass adoption of the internet and the resulting SOA wave. This Service Oriented Architecture trend was very appealing to organisations and architects. Everyone was talking about it like it was a must-have approach for new software. And yet no-one is talking about SOA today. Instead there is much talk about Microservices, Reactive Programming and Big Data.
A Brief History of Software Architecture Trends
I couldn’t find much on the history of software architecture trends on the interwebs. The best I could find was A Brief History of Software Architecture by simplicable. So I attempted to draw one taking inspiration from this and my experience. You can see the major trend types from Machine Code to DevOps (above).
I then added some of the practices and technologies that arose from these trend types (below). I haven’t tried to make it comprehensive or align it with a timeframe because I wanted to avoid tumbling down a rabbit hole. I’ve grouped all the practices by trend type (even if they arose later than other trends). There are also missing links, such as virtualisation to cloud computing: I avoided drawing cross-trend type relationships to simplify the picture. This is my brief history of software architecture trends.
I started programming in the midst of the Distributed era when high-level languages were standard (for business applications at least). My experience of distributed computing has seen it move from binary and proprietary to simpler open standards through RPC, CORBA, RMI, EJB, SOAP to REST. The internet is perhaps the single biggest impacting trend in software architecture and has given birth to major trends such as SOA and Microservices.
Today the effects of previous trends remains strong. The internet remains a major facilitator of advances and trends. “Big Data” is spoken about less than it used to be (perhaps because it’s a poor name) though Hadoop and its ecosystem is still an underexploited technology. The cloud vendors continue to expand their platforms from the basic virtualisation (infrastructure-as-a-service) to anything-as-a-service. The ubiquity of smartphones has plenty of room for more advanced apps, particularly for business apps. And DevOps toolchains have become mainstream and yet Continuous Delivery remains elusive for many.
Don’t Be a Slave
Slavery to fashion trends is dangerous for a software architect. Drinking too much of the kool-aid can easily distort your vision of the context and value of technologies.
This is important because microservices are not always the right solution. A relational database might be just what your software product needs. A Majestic Monolithic could meet the needs of your organisation. Using shell scripts for deployment to production could lower the bar to allow anyone to deploy code.
This reminds me of being caught up in the Enterprise Java Beans wave in the early 2000s — when I was a lot younger. Back then it offered standardisation across the Java vendors (for the code though not so much for the configuration), easier Java for distributed computing, open source implementations and a new advanced application server runtime. I happily dived in with stateless session beans, entity beans, application containers and message beans. And yet a few years later there was a (necessary) backlash to the heavyweight model, awkward persistence model and monolithic runtime from Spring and others. The trend weakened as a result. I learned the lesson back then that software architecture trends are fickle.
So lets learn from history. Lets all have a clearer self-awareness of software architecture trends and evaluate them in the context of the needs we see in front of us.
I’m sure there’s a least one historical inaccuracy hiding in here. If you spot it let me know.