Software design has two faces – visual and functional. Both are really important.
It could be argued that a good visual design is a nice to have, that it does not matter that much if an application with some graphical user interface does not look pretty. Clearly, people like and prefer visually pleasing things, therefore it matters if an application looks and feels good. If an application is provided on the web for instance, how pleasant the visual look and feel of the application is to its users, will affect many things from the bounce rate to the rate of use, number of returning customers, and in effect the commercial success of the endeavour.
The other aspect of software design – functional design – is mostly hidden under the bonnet where users and customers usually do not and cannot look. Where visual design determines how the application looks and feels, functional design affects the first development – big bang or – better – incremental, maintenance, operational stability, availability, scalability, extendability and flexibility to react to change, performance, security, and the important but still often neglected ability to be integrated with an ecosystem in which the application lives in order to exchange data. All of these exist in multiple dimensions – price, time, resources needed, business capabilities and processes supported, etc.
Contrary to our preferences, nothing can be made absolutely perfect and therefore complex trade-offs need to be made.
The software world can be very complex. It is much easier to build a piece of software than to build a house… well it depends on the house and the piece of software in question. Nonetheless, there is a lot of thought and experience from across a number of fields going into the design of a software solution. As the design is mostly hidden from the user’s or buyer’s sight, it is important that the buyer has a wide experience or that he or she uses independent help when sourcing a software solution to ensure that it not only looks and feels good but that it is fit for purpose, stable and reliable, that it can support the required number of users, that it will be sufficiently performant given the estimated volume of data into the foreseeable future, that it will be extendable and can react to evolving business needs, that it will afford appropriate security for data, that it clearly describes the data that it stores and makes it available for integration with other systems to enable support of business processes spread across multiple systems, and that it will be maintainable.
If a software solution’s design misses one or more of the above aspects, it will become apparent sooner or later. The significance of such an omission can be large and in effect very expensive to rectify or work around.
To take away: get software design right or, if you’re procuring a software solution, invest your time into making sure that the vendor does it right – you will not regret this kind of expenditure, guaranteed!