The different levels of testing are well known: A bug found by the customer is extremely expensive, a bug found in acceptance testing somewhat less. At the end of the chain, usually, unit tests are listed as the quickest and cheapest mechanism to catch quality problems early. I would argue that this hierarchy still lacks... Continue Reading →
Escalating Java Records
Records are part of the Java language since version 14. They are a useful feature for types that primarily capture data and avoid some of the boilerplate that Java is famous for. While many traditional class hierarchies could be translated to records, I found the discussion around which of them should be adapted to that... Continue Reading →
Clean Code: Simple and Easy
If we had to write a list of typical skills we expect of Software Engineers, “writing clean code” would probably be on it. However, the trouble with clean code is that it is hardly an objective measure. I don't think I've ever worked in a team where everyone had the same understanding of what it... Continue Reading →
A Solution to the Diamond Dependency Problem
In this article, I want to explore a strategy of dependency management that enables transitive dependencies to evolve independently and to disentangle the gnarly problem of conflicting transitive dependencies. Dependency hell is a real place. The times I am struggling trying to find a matching set of dependencies are moments in which I ask myself... Continue Reading →
Code is a Liability
"Code is a liability, the functionality is an asset.” I remember finding this statement counterintuitive. Somewhere along the way it transitioned to feeling like an obvious truism. I think it’s worth spending some more words on this phrase, exploring why it is so important, and what it means for software projects. In a cognitive economy,... Continue Reading →
Cutting the System
Cutting up large systems into smaller components is one typical task of software architecture. Many modern architectures follow a (micro-) service pattern which is one particular family of strategies to decompose a larger system into smaller parts. It would be short-sighted to apply any such method without consideration of its respective strengths and weaknesses and... Continue Reading →
Code Quality Stress Tests
Famously, there is no really good way to measure code quality. Tales are being told of shops that lift metrics like code coverage to the status of a sacred yardstick that business decisions can be based on and the absurd consequences of such practices. The best real quality metrics that I have found so far... Continue Reading →