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.