This is really one of my favorite articles on ML ever. There are so many walkthroughs on how to throw a bunch of code together that roughly accomplishes a goal; there are far fewer guides to how to not screw it up (that requires a knowledge of the Real World). That gets you here:

You end up with the project where the metrics randomly jump up or down, do not reflect the actual quality, and you are not able to improve them. The only way out would be to rewrite the entire project from the scratch. That is when you know — you shot yourself in the foot with a bazooka.

The post touches on three particularly common areas of technical debt: feedback loops, correction cascades, and "hobo features".