Tuesday, November 28, 2017

Software Design Principles

A concern (as in worry) is a basic driving factor to find a solution. Resourcefulness (budget, network etc.) plays a good role while selecting a solution as it involves decision making process of reusing or acquiring (skills, help) or buying (things, services). While the solution addresses the basic concern the resourcefulness may increase the solution’s applicability in resolving related concerns in a limited sense.

For example, while resolving a concern of local travel, solutions like using public transport, buying or sharing a vehicle may be considered. Based on the budget the solution may change the definition of “local transport” (extending the applicability to resolve other concerns like holiday travel) but certainly it will not become “real long distance travel” or “international travel” (limited expansion of applicability).

With this background, Reusing (translates into avoiding duplication), Separation of Concerns and Budgeting the solution (that translates into not to over design) become the basic software design principles.

The other factors like “Focused (Single) Responsibility”, “Interoperability” (so others using a solution have to know least about the internals) are attributes of a good design.