Revitalizing valuable legacy systems2019-06-24
Do you have a system that is vital to your business that your development team seems to have given up on? Do they consider it old, slow, complicated or impossible to work with? Are they pushing heavily for a rewrite?
They are probably right. It has probably become old, slow and difficult to work with. And it might be fair that they are trying to sell you on a rewrite. They see a possibility to make something significantly better, unburdened by existing solutions. Unfortunately, it is incredibly common to underestimate the cost and effort of such a rewrite. Joel Spolsky famously named it as one of things you should never do. You can add a bunch of asterisks to that, but it is generally sound advice. What is already built already has value.
What can you do?
So as a decision maker who has to keep business needs in mind, what are your options? Well, I have some good news with the bad. The good news. You have a proven system that is working, generating value right now. The bad news. If it is not continuously kept up to date and maintained it will reach a point where it is hopelessly behind and no longer a net benefit. To avoid this, you need a strategy. You need a plan. And you need to get your team on-board.
Make no mistake, improving the quality of your system, establishing the processes to prevent degeneration and modernizing what must be modernized requires investment. It will not be free and it will likely require diverting some time from new development. But unless your business process and the business system have diverged and no longer line up, it should all still be cheaper than a rewrite and have a much higher likelihood of a good outcome. If it is already making money, it should keep making money along the way.
How do you get people on board?
Your team is not unreasonable for desiring a rewrite. They see an opportunity to build something with the best and most modern tools, something that will be less work to maintain, easier to extend and won't be a convoluted mess because this time it will be done right!
They want to build a great system for you and your business. But the system you have might already be great. It just happens to be very hard to work with for your team of developers. Or maybe the user interface that your employees use is old and outdated. Maybe it has become a bit of a mess during a few intense development efforts. Maybe a previous employee made a mess.
Appeal to the craft
What I would suggest is investing in improvement. Focusing on the craftsmanship of software development, rather than the cutting edge design and concepts.
Is the system fragile? Is it easy to accidentally break things?
Create solid test coverage. Invest in making reliable tests and the infrastructure necessary to make them work, such as mocks and generators for test data. When you have tests for all the hardest parts. Make sure the tests run in an automated fashion whenever a change is made. Go as far as is feasible towards Continuous Integration.
Remove sources of stress
Is deployment complicated and involved? Is there only one person that can do it? Automate it. Put the time in and make sure manual work is reduced to the absolute minimum. Make sure the knowledge of using the deploy system is spread through the team. Make sure deployments can be reverted in a reasonable manner.
Are there recurring outages, disturbances, performance issues? Make sure there is automated tracking of key metrics and make sure your dashboard for these are green. Set real goals for your system: What percentage of requests should we be able to respond to? What is an acceptable average response-time for requests? Measure these, alert when the system can't deliver according to the goals and fix those issues.
Re-establish pride in the system
Is the system reliant on incredibly outdated software packages and the road to updating scary? With tests in place and a steady hand this can generally be fixed. And your team gets to establish routines for how to keep these things up to date.
These things are not always joyful. But they are part of the craft of software development. Your team should be able to shoulder the challenge of turning your working system into a system they can continue to work with. It might not be work that is particularly glamorous but there is a deep satisfaction to be found in fixing something that is in bad shape. The pride of bringing craftsmanship to something ill-maintained or even dilapidated.
With tests and infrastructure in place it becomes more and more possible to tease apart the complicated parts of your system without breaking it. Perhaps you'll replace parts that are genuinely bad. Or maybe there should just be better separation of conerns. This is where joys of software design can come back in. Bit by bit you can fix the bad parts of a legacy system.
Begin moving forward anew
Maybe this is the time to fix the UI, or to break out a part into a new service. Or maybe bring a service that was extracted badly back into the fold. When your system is more maintainable and changes are less risky there is so many more useful things your team can do. By taking command of your legacy system your team have conquered it. Made it their own. And can actually work with it towards a continuous future.
Getting here isn't easy. There is usually a lot of skepticism to work past. There is a lot of work to do. But as a business it means not throwing out a working solution to your business problems in favor of a golden ideal that only exists in the mind of an enthusiastic developer. And in many cases that is the better choice.
To get the ball rolling on this kind of project it is often worthwhile to bring someone in to ask some questions and investigate how this would work for your particular system. Someone that can meet your developers where they work and understand their concerns. This means a third party takes a look and you get someone who can keep an eye on the business goals to give a reasonable evaluation of your options and suggestions on what path to take going forward. If this is something you think that you or your business needs, feel free to get in touch at firstname.lastname@example.org.