LESSON 4 · Think Like Sherlock
Elimination in Technology
Debugging software follows eliminative reasoning almost perfectly. A program crashes, and the developer systematically rules out possible causes. Syntax errors are checked first, then logic errors, then environmental factors. Each test eliminates a category of problems.
This works because software is a closed system with known components. Every line of code exists in a file you can read, and nothing is hidden by design. When a bug appears after working code, developers run git bisect — repeatedly splitting the commit history in half to isolate the exact change that broke things. The history is finite, so each test cuts the search space in two until one commit remains.