While the future may be a mystery, you can design software to accommodate future changes. But how much future-proofing gets in the way of good design?
Do you design software with a big requirements doc upfront or let architecture emerge during agile processes? Is there a middle ground?
While computing has changed a lot in the 20 years since the SOLID principles were conceived, they are still the best practices for designing software.
This is a story about trying to rethink complex systems: the challenges you face when you try to rebuild them, the burdens you face as they grow, and how inaction itself can cause it’s own problems. When you’re weighing the risk and reward of replacing architecture, it can take several attempts to find a solution that works for you.