Plan for tomorrow 📆
In preparing for battle I have always found that plans are useless, but planning is indispensable.
I first heard this quote by Dwight D. Eisenhower many years ago, and it has stuck with me. Over the years, I have found it to be true in many different contexts.
When it comes to software design and architecture, I think it is important to try to envision a complete system and anticipate where you will have to go in the future. Creating this full picture helps ensuring that all the pieces fit together and make sense as parts of the whole. It gives you more confidence that what you build today will be valuable tomorrow.
The picture you create will not be complete. It will be more like an outline or a draft, but it should contain enough detail to make it coherent and believable.
Once you’ve done that, the second step is to figure out how little you can build to solve the problem you have today, without working against your plan. Separate out what is truly necessary today, and save the rest for tomorrow.
It is also worth remembering the value of keeping your options open, especially in a chaotic and uncertain environment.1 You don’t want to make something and end up with no need for it. You want it to be easy to build that thing once you realize you need it.
Then be prepared that the plan will change, because it always does. But because you’ve done your homework before, you will be better prepared to tackle those changes.
Updates #
- 2024-05-21: Original post published.
- 2024-11-18: Pointed out that the picture will be a draft rather than complete.
-
That options are worth more in uncertain times was one of my main takeaways from Kent Beck’s book “Tidy first?”. ↩︎