- some of the investments will be proactive. for example, it is worth taking a little extra time to find a simple design for each new class rather than implementing the first idea that comes to mind try a couple of alternative designs and pick the cleanest one.
- other investments will be reactive. No matter how much you invest upfront there will inevitably be mistakes in your design decisions. overtime these mistakes will become obvious. when you discover a design problem don’t just ignore it or patch around it; take a little extra time to fix it. if you program strategically you will continually make small improvements to the system design. this is the opposite of tactical programming. where you are continually adding small bits of complexity that cause problems in the future.