I used be in awe of articles like this. For a long time I believed some of the most difficult bugs are the ones where debugger itself has an issue. But having been working in machine learning and distributed computing all these bugs looks like pretty stories in kids book. Imagine this: When your machine learned model does not "work", there are no breakpoints to put, watches to watch or even a code to reflect about. All you have is data and probabilistic statements from which you need to statistically infer the root cause. It's same way in distributed computing. One of my script was over 1600 lines of dense high level statements that ultimately gets translated to hundreds of map reduces. Again you don't get any exceptions when things may get unexpected. All you can see is some statistical pattern that "doesn't look right" and it's always interesting to make you r probabilistic "if-then" arguments leading to a root cause.