Working Effectively with Legacy Code
There are many interpretations of legacy code. This book defines legacy code as code without unit tests.
Legacy code is in all projects if large enough, and there are many good reasons for it. Working with legacy code is tiring and makes long lead times for new features. It can also be a breeding ground for regression.