Factors and aspects influencing Software Design Quality
Delivering software with quality software design is always a challenge for a software engineer and more so for those with less experience. A good software design is expected to deliver software that is simple, extensible and maintainable. What are the factors that influence quality in software design?
Here are the ones that I can think of:
- Understanding of business requirements - this includes a solid understanding of current business requirements and a good understanding of business/technology vision
- Design skills - this includes the quantity of design skills that is used for the design activity - number of designers, skill-levels of designers etc.
- Extent of validation - this includes frequent peer reviews, formal and informal design reviews etc.
- Time spent on design - this includes the total/aggregated time spent on design
Also, some of the cross-cutting aspects that could influence any of these factors could be:
- Motivation - the motivation of all those involved in the design activity and also the stakeholders.
- Organizational support - the organizational support for the design activity, design decisions etc.
- If we assume that there is a solid understanding of business requirements and a good knowledge of business/technology vision (if one exists), then the software design quality is directly proportional to the other three factors: design skills, extent of validation and time spent on design.

In the above diagram, the area of the triangle corresponds to the quality of software design, the bigger the area, the greater the design quality. If we assume that we could assign x number of designers to solve a problem, then we have three options to improve the design quality - improve the design skills or increase the validation mechanisms or increase the time spent.
In reality, a team cannot afford to do any of these three beyond certain levels because of the associated costs. For instance, one cannot assign too much time or too many skilled designers for budgetary reasons, customer commitments etc. As a result, improving the design quality entails a delicate balancing act between these various factors within the available tolerance bands.
This diagram may lead to other questions like how is ‘time spent on design’ related to minimalistic design - which essentially means distributing the design activities among different iterations and not doing the big design upfront? Or in other words, how does this deal with agile development paradigm? I have a week to think for my next blog.

