(UX) design must work
How can you actually test UX design objectively? Code Testing vs. Design Testing: A Comparison
Software quality - if you ask the average consumer what this means, the most common answers are likely to be: "The software does what it is supposed to do", "It is easy to use" or "The interfaces look nice". And rightly so. After all, it is the users who end up using the software solution. But that is only one side of the coin. The purpose of this article is to explain which software quality features and criteria are important from a technical and economic point of view, and how clean code development can help to maximise software quality.
What constitutes good software quality ultimately depends on who you ask. For example, users evaluate functionality and usability, solution architects evaluate the structure of the entities, software developers evaluate the quality of the source code, administrators evaluate the supportability, product managers evaluate the range of functions, and so on. For a better classification, it is therefore worth dividing the term software quality into external and internal software quality.
External software quality describes the external view of the software. How stable and reliable is the application? How fast does the software respond? How intuitive and easy to use are the interfaces? What functionalities are covered? How secure is the system? The most important features are therefore: functionality, usability, reliability, robustness, performance and security: More qualitative features, such as usability, can also be validated.
Our Head of UX Design, Uwe Betzin, explains how UX design can be objectively tested here: (UX) design must work
Internal software quality describes the internal perspective - i.e. the architecture, design and quality of the source code. How easy is it to read and understand the code? How easy is it to rewrite, modify and extend the code? What are the dependencies? What is the test coverage? The most important features are: readability, traceability, testability, reusability and evolvability.
Of course, external quality features such as the right range of functions, reliability or ease of use are important criteria when it comes to the profitability of a solution. After all, the output of the software product, such as efficiency improvements, must exceed the development costs incurred over a certain period of time to ensure a positive ROI. However, this calculation should not ignore the product's lifecycle and therefore the future. As processes, technologies and even business models change, so do software requirements.
Conversely, this means: The solution must also be able to be further developed, adapted or changed in a cost-effective manner. This is where internal quality features come into play. If internal software quality is neglected, technical errors will occur during development. And these defects grow with every change.
As a result, the effort required to change the source code increases - not linearly, but exponentially. In many cases, this is the inevitable end: The software solution can no longer be developed further and must be rewritten from scratch. To avoid this, and to develop software solutions that will be in use for a long time, the internal software quality must also be at a high level. Right from the start.
Source code is much more often read than written. Syntactic norms and conventions have been established that need to be followed. You could compare it to standard German spelling according to the Duden. We are used to reading it and can therefore type it quickly. Phonetic spelling, on the other hand, conveys the same meaning, but because we are not used to reading it, it takes much longer to decipher it. The same goes for source code: If you write it all in the same form and syntax, you will find your way around much faster.
However, semantics are almost more important than syntax. Software developers spend 70-90% of their time reading and understanding source code. Only 10 to 30% of that time is actually spent productively. To optimise this ratio, it is essential that the code is semantically understandable. This means being able to see what the code is doing and why it is doing it - which also means linking customer requirements to the code.
However, just as important as readability and traceability is the functional correctness of the code. A high level of test coverage is essential not only to ensure this, but also to be able to guarantee and prove it. Automated tests must be used to verify the smallest parts of the source code, e.g. through unit testing, as well as in its entirety, e.g. through integration testing. This is the only way to ensure that changes do not lead to regressions.
Software components should be implemented in such a way that they can be reused. This has several advantages: On the one hand, it reduces code duplication, making the source code leaner and more efficient. On the other hand, reusing the same code components reduces potential sources of error, which can significantly reduce maintenance costs.
The term evolve is derived from the word evolution and describes the ability of a living being to adapt to new environmental factors through genetic changes. In software, evolvability means that the source code is designed to be flexible. For example, a new feature can be implemented at a later stage in the development project with less effort than if it had been included from the start.
Clean code development is a normative value system for software developers. About values and virtues Clean Code Development teaches a work philosophy that is perfectly tailored to software development, which is based on agility, consistent interdisciplinary exchange, a high level of quality awareness and the urge for continuous optimization. In addition, there are very practical recommendations for actual coding. In five degrees subdivided practices and principles which, if taken from the outset, not only lead to high internal software quality, but also make it measurable and verifiable.
How can you actually test UX design objectively? Code Testing vs. Design Testing: A Comparison
How to develop software that can be flexibly and adapted to new market and customer requirements in the long term