STOP hurting yourself by doing big bang modernizations!
architecting anti-patterns refactoring to microservicesPublic workshop: Sept 23rd-25th - Architecting for fast, sustainable flow - enabling DevOps and Team Topologies thru architecture. Learn more and enroll.
I recently had yet another conversation that described how the rollout of a ‘Next generation’ system was a long painful process. Users encountered all kinds of business impacting showstopper issues. It took months before the system was usable. This, of course, is hardly surprising. Any time you engage in a big bang modernization effort, you are taking a huge risk, and the odds are not in your favor.
That’s especially true when the new system’s name includes the phrase ‘Next generation’. One rare exception is ST:NG, but that’s a TV show, not a software system 😀.
This article discusses at why big bang modernizations are a bad idea. But first, let’s look at why organizations are attracted to big bang modernizations.
Big bang modernizations are appealing
Big bang modernizations are very appealing. For example:
- You have the illusion of certainty that comes from a project plan
- You have a big project, which is a good way to get promoted
- You don’t have to confront the reality of the current system and your past mistakes, which are obstacles to promotions
And, not only are big bang modernizations appealing, they can be agile!
But we are agile!
What’s even more interesting is that organizations undertaking big bang rewrites often describe themselves as agile. For example, they often use Scrum. Development consists of a series of sprints. There’s stand ups, retrospectives, and all the other trappings of agile. What’s missing, of course, is that software is not delivered to customers until the end of the project. An approach that’s distinctly not agile.
Agile Manifesto principles
There are two principles from the Agile Manifesto that are relevant here:
Agile principle #1
Here’s the first principle:
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
If you are not delivering software until the end of the project, there’s nothing ‘early’ or ‘continuous’ about it.
Agile principle #2
Here’s the second principle:
Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.
Once again, if you are not delivering software until the end of the project, you are not following this principle. “Not true! We have sprints!”, they might say. But if the software isn’t in the hands of customers, it’s not working software.
Working software = in production, in the hands of customers
The key point here is that working software is software that is in the hands of customers. If it’s not in the hands of customers, then you have not validated your assumptions about user needs. Nor, have you validated any of your technical assumptions. You’ve ran a bunch of tests so in theory, it should work. But theory and practice are two different things.
With a big bang modernization, unvalidated assumptions continuously accumulate until the end of the project.
You then discover gaps in your understanding of both user needs and technology. You might discover, for example, that your service collaborations are broken.
Big changes = series of incremental changes
The only practical way to modernize a complex system is to make a series of incremental changes - the Strangler Fig pattern.
This means that you, as the architect, need to determine the sequence of steps that will get you from your AS-IS architecture to your TO-BE architecture.
In other words, a series of AS-IS -> Architecture 1 -> Architecture 2 -> ... -> TO-BE
that enable you to delivery incrementally and validate all your assumptions.
Each increment of the new architecture is deployed into production and released to customers.
An incremental modernization is the least worst option
An incremental modernization is not easy. You might need to jump through numerous hoops to integrate the (growing) Strangler Fig application with the (shrinking) existing system. For example, it’s common to replicate data between the two systems. You will also need figure a migration strategy at each step that minimizes risk and allows you to rollback if necessary.
But while incremental modernization is difficult, it’s the least worst option. After all, doing a big bang rewrite - the wrong thing - repeatedly and expecting different results is the definition of insanity.
Need help with accelerating software delivery?
I’m available to help your organization improve agility and competitiveness through better software architecture: training workshops, architecture reviews, etc.