In the world of software design there have been multiple principles which have provided guidance to the designers in achieving their goals. Most common approaches used are “problem based” and “solution based”. Irrespective of the school of thought certain points are common across these approaches and the final solution needs to consider these factors. This becomes more important when it is a customer specific problem and the boundaries are more or less available for us to design.
Do not lose the larger plot – The design thinking based approach would like to have the freedom of considering multiple solutions for the problem and then prototype each solution to arrive at a solution which is best from this lot. The process is iterative and the cycle needs to be continued till the result is satisfactory. But the aspect of not considering extraneous solutions is important and hence the scope consideration has to be still accurate in design thinking approach as well.
Good designs – Underlying considerations of aesthetic design can be defined by 3 key features such safe, efficient, and economical. Efficiency in case of software design would mean how well the current design addresses the core issues of functionality, reliability and maintainability. Economic nature of the software design would have to consider all the costs (hardware, human cost etc.) which are involved in delivering a solution based on this design. Focus on
Building Blocks – At the end of the design the result should focus on the fitment of solution to the original problem and what would be the building blocks for this design. In addition to this the design approach should ensure that the building blocks themselves follow the basic principles of design like –
(a) Are the building blocks open for extensions & closed for modifications?
(b) How granular is the building block? Is there a scope of splitting the building block if it handles multiple responsibilities?
(c) How tightly are the Building blocks coupled in the solution? Ideally loose coupling is desired between two blocks and an external block is to be used to define their coupling.
Finally, elegance of a solution lies in the simplicity of the design and how well this design can be conveyed to others and with what ease could this be implemented. It is important to note that there is inherent limitation to the level-of-simplification which can be achieved in the analysis or design of a solution. So as, Albert Einstein says “Everything should be made as simple as possible, but not simpler”.