At my current gig we are working hard on splitting up an old monolith which is the wart of the our business. This work is time consuming and it takes a long time. Why not write a new system and make a switch once it’s complete?

This question gets asked a lot by people who come to our company and by various stakeholders. They are frustrated by the fact that breaking up “the pile of mud” takes a lot of time and effort. I was driving to my summer vacation and in Norway we have a huge road project on the E6 which basically is to make the old single road into a highway with two lanes in each direction.

Driving through the site I started thinking about the similarities between adding two new lanes to an existing road to that of modularizing a monolith.

  • traffic needs to flow
  • you need to maintain the features upon completion

There are also some differences, as with most analogies, which could impact how you do things.

  • a website can not slow traffic down
  • software might not benefit from reuse in the same way as a road

The second issue puzzled me, does an old system hold no value when you’ve decided to rewrite it?

The value of old things

When building a massive road you can just use a ruler and draw a straight line between two points and start building and removing obstacles as you go. It would provide an efficient road which is pleasing to travelers who wants to get as fast as possible from point A to point B. The Norwegian company building the new E6 chose a different approach. They are utilizing the old road an just adding a second right next to it. Now why would they do that?

Having never built a road or have any other form of knowledge on the subject I can only guess why. I think that the old road has a lot of value that they want to utilize in order to finish quickly.

  • No need for additional regulation of the land as it is already used for a road. You’d need a lot less discussions and politics regarding the route of the road.
  • You only need to build half of what you’d have to if you started from scratch as you utilize the existing road which is tried and tested.

I am sure there are many other things which are also valid points here, but these were two that sprung to mind when I traveled there. Now, are these points in some ways valid when it comes to software development as well? Does an old system which is to be replaced hold any value when building something new? Would the pain by having the old and new run side by side be out weighed by the benefits of having something old that has been through numerous stages of hardening?

In closing…

I digressed a bit in the previous paragraph, sorry. The original question was wether something old has value when you are looking at splitting an old monolith. I guess the answer is that there are many ways and they all have pros and cons. You just need to be aware of which approach you use and what those pros and cons are. If you are not making conscious decisions then you will be in trouble.

Another point to take into account is that analogies are usually misleading. A road is not technology and therefor comparing construction of a road to building software is just wrong. The soil in the earth seldom needs to be upgraded, while some piece of technology might need to be replaced because the hardware is no longer able to pull it’s weight. How to construct a road is pretty standard, while some piece of software can be written by some people in a language that nobody knows anymore and you need to replace it before they die.

This didn’t become a very structured piece of writing where you get sound advice. Instead it kind of became just me writing stuff that came into my head at one point. This is generally how my “writing process” is, sorry.