* Ruthlessly prioritize by pain - a lot of technical debt is "icky" but doesn't cause much pain. Some causes a lot of very serious pain. The latter is what you need to focus on. The former you need to accept you might never get around to fixing.
* Ruthlessly break down debt improvements and drip feed them into production. As an example, once when I was trying to upgrade Django I would follow this process on every other ticket:
1) Try running the app with the latest version of django.
2) Identify a small problem with that (e.g. a page that errors).
3) Try and fix it by making the code run in old AND new environments.
4) Release the changes into prod.
After a while, the accumulated changes would lead to a small release where I figured that everything worked. That's when I flipped the switch.
Comments
* Ruthlessly prioritize by pain - a lot of technical debt is "icky" but doesn't cause much pain. Some causes a lot of very serious pain. The latter is what you need to focus on. The former you need to accept you might never get around to fixing.
* Ruthlessly break down debt improvements and drip feed them into production. As an example, once when I was trying to upgrade Django I would follow this process on every other ticket:
1) Try running the app with the latest version of django. 2) Identify a small problem with that (e.g. a page that errors). 3) Try and fix it by making the code run in old AND new environments. 4) Release the changes into prod.
After a while, the accumulated changes would lead to a small release where I figured that everything worked. That's when I flipped the switch.