Why intuition fails at this specifically
Developers are good at reasoning about correctness and bad at reasoning about time, and the gap is structural rather than a matter of skill.
The reasons compound:
- Cost is invisible in the source. One line calling a function looks the same whether that function returns immediately or makes a network call. The code shows structure, not duration.
- Orders of magnitude are unintuitive. A cache hit and a disk read differ by a factor in the thousands, but they occupy one line each, and the eye weights them equally.
- Attention follows complexity. The gnarly algorithm gets suspicion; the innocent-looking loop that calls a getter which lazily reloads a config file does not.
- The hot path is rarely where the interesting code is. Time concentrates in serialisation, allocation, logging and waiting, none of which anyone enjoys reading.
Key idea: the profiler is not a tool for confirming your hypothesis. It is a tool for discovering that your hypothesis was wrong, which it usually is, and the teams that get fast are the ones that check before they change anything.
The cost of guessing is not just wasted effort, and the arithmetic of why is the next step.

