Improving software design can greatly increase team productivity by allowing developers to refactor easily, propose improvements, and take initiative.
Well-defined interfaces between software modules, such as public classes, methods, endpoints, or events, are crucial for effective communication.
One way to judge if a software module is well-defined is to use deletion thinking, which involves evaluating the number of changes required to remove the module and questioning whether all public interfaces are necessary.
During the design phase, ask yourself: how many changes will be needed to remove this software piece? Then, analyze each change to see if any publicly exposed implementation details can be rearranged to hide the mechanism’s implementation.
Good architecture is not just about building a structure that stands upright. It’s about creating a design that allows you to easily change or remove parts of it as needed.
To streamline the process of disabling a module, I like to use feature flags during the module dependencies registration (implementation details registrations). By doing so, I can quickly disable a business process or capability. Determine the number of feature flags required to disable a module, much like using deletion thinking.
It’s essential to double-check software design and implementation to ensure it’s robust and efficient. By considering these critical questions during software development, you can create better-designed software.