legacy code • untested code (Michael C. Feathers) • code someone else wrote (old gems, outsourcing, maintainers left) • difficult to work with • risky to change • but serves a useful function
• learning & experimenting • ambitious applications • big project, developer churn, hiring outside help • bad code … even with the best of intentions • “Technical debt”
–Robert C. Martin “Even the most disciplined development team, knowing the best principles, using the best patterns, and following the best practices will create messes from time to time.”
–Robert C. Martin “…taking a tangled, opaque, convoluted system and slowly, gradually, piece by piece, step by step, turning it into a simple, nicely structured, well-designed system.”