“A long time ago in a galaxy far, far away….”

I bet you know what I am going to talk about. You saw that numerous times in your programming career - big mess of a project that all your fellow roommates silently hate and where each similarly innocent change could result in avalanche of bizarre problems.

You call it with dark magic word - “Legacy”, trying to express that this pile of software is impossible to change and maintain. It is impossible to fix, it is a nightmare to build, run and even work with. There is no build process, no reliable tests, no documentation, no samples, no installers - nothing that you can rely on.

Well, to be accurate this project of yours had glory days when the team cared about it, when all systems worked as good Swiss watches and life was happy and vibrant. For some reason these days are gone - either the original team left the company and you are the lucky one to pick up the project, or something else equally hideously happened (source control server crashed badly and buried all the history of your project; and of course you planned to introduce backups, but was a week late to do so).

Anyway, you are standing before this huge mess you have to efficiently support and evolve. You are ambitious person and you want to make a difference and safe the planet the project somehow. What you may not have, especially if it is your first time in such situation, is a clear roadmap in your head, roadmap that you need to follow to transform this bowl of spaghetti into something you may be proud of.

It is an ambitious goal and I am not an expert by all means. What I want to share here is some experience my team and I had working on legacy projects and how we where able to redone them in pretty short timeframe being productive and releasing new features and fixes at the same time. The main idea behind this blog series is as follows:

There is no such thing as “Legacy Software”. There is lack of direction.

I am going to keep this post up to date and add links to subsequent posts in the series as I write them. So far I see “the roadmap” as follows: