Legacy software is software that already exists. It may be a project you've inherited after joining a team, a new client's application, or something you wrote last year, or last month. Most software developers seem to prefer "greenfield" development, where you get to start from a clean slate. The reality is that there's a lot of "brownfield" development out there, that it rarely makes sense to throw away working software, and we can control the experience quite a bit to make our lives, and the software, better. If you haven't worked with legacy software chances are pretty good you will.
We'll first walk through what "legacy" means, and what this looks like specifically for Django developers and Django projects. We'll also cover some of the scenarios in which you may find yourself working with legacy codebases. This includes the types of issues you'll be presented with, both generally and specific to Django.
What do we mean by legacy code?
What does a legacy Django project look like?
What kinds of issues will you need to deal with?
How to approach the codebase
Tools for working with your new legacy codebase
Introducing or fixing tests
Common issues to look for and how to solve them
Legacy deployment processes and other scary nightmares
More features! Balancing business needs and "perfect" code
Deciding when to upgrade Django and other dependency versions, and how to do this