01.08.2023 **Tags** #areas/dev/software-design # Tactical vs. Strategic Programming John Ousterhout differentiates between two approaches to programming: tactical programming and strategic programming. ## Tactical Programming - mindset: "get something working (as quickly as possible)" - impossible to produce a good system design - short-sighted - incremental complexity leads to higher costs - difficult to switch to strategic programming later - *tactical programmers are often valued by management* ## Strategic Programming - mindset: "working code isn't enough" - primary goal is a great system design - investment mindset - pro-active and re-active investments - investments should be 10 - 20% of your total time ## Real World Example Facebook once empowered new developers with the mindset "move fast and break things". However, this lead to a codebase that was difficult to understand, test and painful to work with. Therefore, Facebook had to change their philosophy to "move fast with solid infrastructure". ## Personal Opinion I agree with this 100%. If you are in a management position and need to get things done ASAP, I will be the first one pointing out that going the fastest path to the next feature will end up costing you much more money in the long run (including skilled developers who take better opportunities than working with a painful-to-work-with codebase every day) # References [[A Philosophy of Software Design (John Ousterhout)]]