Why microservices: part 2 - the need for sustainable development
This is part 2 in a series of blog posts about why and when to use the microservice architecture. Other posts in the series are:
- Part 1, the need to deliver software rapidly, frequently, and reliably
- Part 3, two thirds of the success triangle - process and organization
- Part 4 - the final third of the success triangle - architecture
- Part 5 - the monolithic architecture
In this post, I describe why software delivery must also be sustainable.
Many applications live a long time
Many applications die young. Some applications are created to solve a specific short term problem, such as a marketing application for the Superbowl 2020. Others become obsolete because the needs of the business change. Also, many startups fail and their applications die within them.
But many applications, especially those that automate core business processes, tend to live for long time. Even these aging mission critical business applications must support rapid, frequent and reliable software delivery. What’s more, they need to adapt to evolving technologies.
The challenge with developing long-lived applications is that technology changes over time. The importance of a given technology in the market grows over time and then declines as newer technologies are adopted. What’s more, there are typically a series of versions of a given technology that grow and then decline in importance.
- Over the 25 years of Java, numerous versions of Java have been released
- Before Java, 4GLs such as Informix 4GL and Power Builder came and went.
- Over its 17 year lifetime, there have been numerous versions of the Spring framework https://en.wikipedia.org/wiki/Spring_Framework
Managing technology within an enterprise
A sensible technology strategy is to ensure that the importance of each technology used by an enterprise is aligned with its importance in the market. Enterprises should cautiously adopt new and useful technologies. And, they should sunset technologies that are no longer important.
Sadly, however, it’s not uncommon for billion dollar businesses to be running on applications written using ancient technology stacks. The use either technologies that are no longer important or versions of technologies that are no longer current. The knowledge to use old technologies dissipates as developers retire. Hiring becomes difficult since developers don’t want to use old technologies. As a result, relying on ancient technology is often a business risk.
Need to be able to upgrade the technology stack
To avoid using obsolete technology, we must be able to upgrade an application’s technology stack. An interesting metaphor that I used in my early microservices talks is how cell death and replacement works in multi-cellular organisms. For instance, the human body is comprised of cells that have varying lifetimes:
- hours - some white blood cells
- days - stomach lining cells
- years - bone cells
- lifetime - brain cells
50 to 70 billion of cells within the human body die each day. Yet you (the system) remains intact.
In the same way that a human body is constantly being renewed, we must be able to keep an application’s technology stack current. An application’s technology stack is comprised of a set of technology versions. When a technology version is no longer current, we must upgrade to a new version. Or, if an entire technology becomes obsolete we must replace it with a newer technology.
Development needs to be rapid, frequent, reliable and sustainable
Rapid, frequent and reliable software delivery is necessary but insufficient. We need to be able to deliver software over long periods of time. We need to be able to upgrade an application’s technology stack so that it remains current.
In the next post, I’ll discuss the success triangle, which describes what’s needed to do rapid, frequent, reliable and sustainable software delivery.