Today I want to highlight two important types of software quality. We can distinguish between two types: external quality and internal quality. External quality is the quality you can experience when using the software: its functionality (features) and its non-functional properties. The latter includes performance, usability, and security, among others. Internal quality is the quality of your design and your code. It influences maintainability and ultimately affects the external quality. You might be able to achieve good external quality (good-looking, fast and useful features) with a poor design and a hardly readable code base. But you will struggle to keep delivering new high-quality features at a constant pace because the maintainability of your software suffers. I suspect that many managers have not understood the value of keeping a high internal quality. They want features, and fast. Code testability and readability are a second thought. The human factor, the satisfaction of the coders working with a good code base, is underestimated. And quality assurance is more focused on external quality than on internal quality. What can we do against it?
- allocate time for code cleanup and (continuous) refactoring
- do design and code reviews
- use static code analysis