Programmers live in a bizarre world where laziness is rewarded and intelligence is a handicap. Let me explain.
Most of us have accepted that the best programmers are lazy. They will complain whenever they encounter non-automated repetition or searching (you know, the stuff computers were built for). Instead, we can work smarter by automating tasks that pass a magical threshold where the time to automate it is less than the doing it manually X times. Old news.
There’s a complexity threshold that each of us can work within efficiently. Sometimes, we push ourselves and work a little over it, but we are only fooling ourselves thinking that it’s sustainable. When teams are working at different levels, collaboration can be very frustrating (too obvious or too confusing).
If the workplace is busy, or we are personally strained, we are not able to work at that same level. If we push ourselves by always working at our maximum, we are hindered when we’re not at our best.
I’ve been able to appreciate this recently. While working on some old legacy projects, rebuilding the mental model is much more complex with fresh eyes. Add any deadline stress or personal fatigue to the mix, and I can only touch it after hours with absolute focus. That is not sustainable, nor desirable. The result is hopelessly trying to make sense of things: shooting in the dark until things “click” – if they ever do. This may last a few minutes, hours, or even months on a large project. It’s absolutely demoralizing.
This is why TDD works. The amount we need to load into memory is always so small, our personal constraints will never be the bottleneck. It leaves clear next steps, and code the entire team can understand, and even better: write.
Break things down so they are stupidly obvious, and progress becomes fluid and predictable. If you don’t, you are relying on a hero to save the day. That’s a lot of weight to carry.