When I say "Legacy Code" I mean valuable code you're afraid to change.
We all have to deal with Legacy Code. But it's damn hard to!
Here you'll find answers to your questions. I'm sharing useful tips and concrete advice that will help you tame the legacy codebase you've inherited. 😉
— Nicolas
💡 Latest articles
- The key points of Refactoring at Scale
Maude Lemaire wrote a great book rooted from her experience in the trenches, at Slack. Let's see how it may help you lead large-scale refactoring projects.
- The key points of Refactoring
This book is a catalog of the bread-and-butter moves that can improve your coding game. Let's see what makes it a reference for any professional developer.
- The key points of Kill It with Fire
Let's rewrite the whole thing on a modern stack! Or should we? Marianne Bellotti offers a lot of wisdom in her book. Here are some examples…
- How to efficiently practice refactoring katas
How to best learn out of refactoring exercises, depending on your level of experience.
- It's like coding in the dark!
A look into Catherine Hicks' white paper "It’s Like Coding in the Dark: The need for learning cultures within coding teams" (Catharsis Consulting).
- If you want more, check all my published articles
🥋 Specific techniques
- Approval Testing
A technique to quickly put tests on Legacy Code, so you can refactor safely.
- Behavioral Analysis
A technique to get insights from large codebases, using VCS information.
- Draw Dependency Graphs
A technique to understand the structure of a codebase.
📚 Useful books on Legacy Code
Few books dig into the challenges of working with legacy systems. These ones do.
Here is my personal bookshelf. For each book, I've written a high-level overview of what you can expect from it. Their salient points, according to me.
Click the ones that intrigue you to get more details. I put the ones that were the most insightful to me first.
📖 Helpful Guides
- Getting into a large codebase
Diving into a large, undocumented codebase is overwhelming. Let's see some techniques to approach it.
- Best practice or a code smell?
Not sure if a pattern will make the code more maintainable? Here are a few resources that will help.
- Changing untested code without breaking it
Without tests, every code change is risky. But how to put tests on a code that wasn't design for it?
- Code feels impossible to maintain
Sometimes, you seem to hit a point of no return and that the best strategy would be to burn it all and start over. Are there alternatives?
- Making others care about it
What you can do when it seems that no-one cares about the technical debt that's piling up.
- AI Support
Can you leverage AI to tame legacy codebases? Let's explore…
🎧 If you prefer podcasts
- Improving Legacy Code
I discuss with Sam Taggart about my book, Legacy Code: First Aid Kit. We cover the tools and examples that I find most useful when working with legacy code. We briefly touch on the role of AI and other tools I've discovered since I wrote the book.
- Tips for Working with Legacy Code
I talk with Jason Swett about working with legacy code, adding tests to legacy code, how to safely make changes to legacy applications, and more.
- Changing Messy Software Without Breaking It
I talk with Robby Russell about practices like feature toggling or sustainability weeks to work on improving things. I also give advice for listeners who struggle to get stakeholder buy-in on dealing with technical debt challenges.
🎤 If you prefer talks
- 7 techniques to tame a Legacy Codebase
You spend most of our time changing existing code that is not documented, nor tested! It's painful because you're always in a hurry to ship new features and bug fixes… What if you had a secret weapon to make things better as you go? Here are 7 concrete techniques that will help you regain control of your Legacy.
- 3 must-watch talks on Legacy Code
I have hosted more than 37 speakers to talk about Legacy Code tips and tricks. Here is my top 3 of the talks you should probably watch!
- Testability, Empathy, and Safe Refactorings
4 great talks on Legacy Code that I had the pleasure to host. This edition particularly focuses on testing and refactoring.
- DevOps, Living Documentation, and Hexagonal Architecture
5 great talks on Legacy Code that I had the pleasure to host. This edition raises new topic such as documentation and legacy pipelines.
- Design Patterns, Empathy, and Reading Complex Code
4 great talks on Legacy Code that I had the pleasure to host. A focus on empathy and getting into complex codebases.
- Technical Debt, Rewrites, and Refactoring
5 great talks on Legacy Code that I had the pleasure to host. Learn how to prioritize Tech Debt and rewrite systems incrementally.
- Refactoring, Unit Tests, and Symmathesy
5 great talks on Legacy Code that I had the pleasure to host. Learn how to progressively migrate existing codebase towards a better state.
- Approval Tests, TCR, and Menders
5 great talks on Legacy Code that I had the pleasure to host. Learn how to test existing code and approach unfamiliar codebases.
- 5 talks on Legacy Code: The Legacy of SoCraTes, 1st edition
Tips and advice on dealing with Legacy Code from 5 great speakers at this remote conference I organized for the community.
Written by Nicolas Carlo who lives and works in Montreal, Canada 🍁
He founded the Software Crafters Montreal community which cares about building maintainable softwares.