In A Philosophy of Software Design, John Ousterhout argues that striving only for working code is not enough. The mindset of getting a feature done as fast as possible is not ideal, he calls this approach Tactical Programming.
Tactical programming results in addition of too much unnecessary complexity since not enough time is spent on coming up with a well-designed solution for your problem. This approach seems reasonable since some developers have to perform in high-pressure environments. With the next deadline lurking around the corner aiming for working code as quickly as possible seems like a good idea. Unfortunately, achieving working code in a short period of time often involves taking shortcuts. Each little shortcut increases the complexity of our code which harms the quality of our software systems in the long run.
For Ousterhout the opposite of tactical programming is Strategic Programming which requires more long-term thinking and a different mindset. A strategic developer doesn't sacrifice well-designed code for quicker delivery time. Ousterhout encourages us to come up with different solutions for a specific task and continue with the best design. Of course this approach costs more time but Ousterhout argues that it pays of in the long run and I think most of us would agree.
Working in a well-designed codebase with fewer complexities enables us to not only develop new features faster but will also lead to fewer bugs in our software systems.
Personally, I think it is very important to think about those two approaches when we are developing software. I believe that none of us adds complexity to a system on purpose but due to deadlines and external pressure we might tell ourselves that the little shortcuts we take are not too bad. Unfortunately, only time will reveal the amount of complexity caused by our shortcuts.
Let’s fight off complexity and avoid taking too many shortcuts for faster delivery times.
I'm convinced that I will pay off in the long run!