Working in a legacy system runs the gamut of difficulty: it can be easy, sometimes challenging, and other times almost impossible. It is hard to know which of these experiences you will face until you get in there and do a little work.
If you already have a good understanding of the legacy system you’re working on, then doing a little spike work to familiarize yourself with it doesn’t make a lot of sense.
But if you don’t know the system, jumping in and doing some work on it is a great way to familiarize yourself with it. This can be helpful because one of the scariest aspects of working with legacy systems is the “you just don’t know was is waiting for you” factor. When taking a cold look at thousands of lines of code, any system can seem like an untamable monster. You are worried at any point that you might find dragons waiting for you.
There are three secrets to making this approach work.
First, jump in and try to add some business value. Either fix a few bugs or add a small feature. You must create something real. Ideally, your updates will get deployed to production. Sometimes the dragons are lurking in this phase, so pushing your updates may uncover some unknowns. But whatever work you do must be real and must be something people want.
The second secret is that you must timebox your efforts. Don’t allow what you’re working on to drag out for weeks and weeks. Limit the time you spend. Also, give yourself more than one item to work on. Pick four or five tasks to complete, and give yourself a reasonable amount of time to finish them.
Third, you need to put together some estimates before you do the work. Determine how much time you think your work will take. Then compare your estimate with the amount of time you spent. If it’s close, perhaps there are no dragons (or at least only smallish ones). If the work took significantly longer, then maybe there are dragons and future work should include some caution.
Legacy projects are not impossible, but the fear of dragons is real. You need to get past the fear early on and learn where the dragons lie.
System Review / Code Review
Design Ideal End State
Add Some Unit Tests
Determine a Migration Strategy / Strangle
Segment the New from the Old