I've found that sometimes there's additional benefit to the "take a step back and think about what the code is actually doing" step, in the sense that doing so helps gain better knowledge about how the code actually works and often reveals opportunities to simplify the design (sometimes in such a way that ends up inadvertently fixing the problem, though admittedly it'll more often just introduce more bugs ;) ).