Always build reversible systems. When you make an architectural decision that is hard to undo, you are essentially betting that you got it right.
All it takes is one edge case, one wrong state, one user misconfiguration, one incorrect assumption, and your system crumbles. Hence, it is always better to build a reversible system. The core idea is to roll out systems and features that can be reversed (disabled) easily.
Rollout confidence is often proportional to how easy it is to revert the change. Some ways to achieve this are:
- Loose coupling between components
- Feature flags for gradual rollouts
- Database migrations that can roll back
- Phased rollouts and deployments
- Define clear interfaces that hide implementation details
Bake this principle into your design process and decision-making framework. Most decisions you make should favor reversible systems, allowing you to move faster.
With this, you stop being afraid of being wrong.
Hope this helps.