Waste-less Programming

Waste-less programming is my way of thinking about getting better at programming. We, as programmers, all want to build great software. To do that, we want to be the ones that can hit higher notes. The time and effort we spend are wasted if they do not help us towards those goals. Sometimes waste-less does not mean simply faster or more efficient. For example, unit testing or running FxCop to check our code is something we should do. However, recently a project I've been working on is cut. If I have been focused on doing unit testing or running FxCop, my effort would've been mostly wasted no matter how efficient I have been. Instead since I've been mostly validating major design decisions, the majority of my work is still applicable to the next project. In Beautiful Code, Bryan Cantrill mentions that a crucial task at the early stage of a project is to implement the hardest problems and validate the major architecture to try to eliminate those problems that can later invalidate the whole design and architecture. Considering "If you put a spoonful of sewage in a barrel full of wine, you get sewage," the task is to "assure that the most fetid spoonfuls are caught as early as possible, when design changes are still possible—and when the wine can still be saved." Learning from Richard Hamming who asks: What're the important problems in your field? Are you working on one of them? If not, why not? I found that asking myself that "Can I do this at a later date? If yes, are there more important things to do?" has been very valuable to avoid waste.