Skip to Content
Rewrite Legacy Code
shortcut

Rewrite Legacy Code

by Maximiliano Contieri
January 2025
Intermediate
5 pages
4m
English
O'Reilly Media, Inc.
Content preview from Rewrite Legacy Code

Rewrite Legacy Code

Legacy code can be a significant challenge in any project. It often lacks tests, contains obsolete logic, and is difficult to maintain. The urge to rewrite such code from scratch can be strong, but it’s essential to take a structured approach to ensure that you don’t introduce new bugs or lose the original business logic.

Understand and Cover the Current Behavior

Before changing any line of legacy code, you need to understand its current behavior. This means thoroughly investigating what the system does. The first step is to write tests around the existing functionality.

Here’s a Java example on the banking domain:

public class TransactionService {
    public void move(Account first, Account second, double amount) {
        if (first.getBalance() < amount) {
            throw new InsufficientFundsException("Not enough funds in source account");
        }
        first.debit(amount);
        second.credit(amount);
    }
}

In this code, the logic transfers funds between two bank accounts. Although simple, imagine this is embedded within hundreds of other lines, making it hard to isolate.

You can start by writing tests for this behavior without actually changing the legacy code in the same way you do when addressing bugs (see “Fix Bugs in a Continuous Integration Pipeline” in this Shortcut series):

class TransactionServiceTest {

    @Test
    void shouldTransferFundsBetweenAccounts() {
        Account source = new Account(1000.0);
        Account target ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Good Code, Bad Code

Good Code, Bad Code

Tom Long
Refactor Tests

Refactor Tests

Maximiliano Contieri
Remove Repeated Code

Remove Repeated Code

Maximiliano Contieri
Write Useful Code Comments

Write Useful Code Comments

Maximiliano Contieri

Publisher Resources

ISBN: 9781098172725