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 →
On Company Values
Senior leadership did the analysis: The root of the problem at XYZ Corp was a lack of clearly defined value statements that underpin the company’s unique culture! Problems like this demand the corporate weapon of choice to jump into action: The Workgroup. The Workgroup started to flesh out a series of carefully crafted statements that... Continue Reading →
Linguistic Entropy and Chinese Whispers
I am certainly not the only one observing that the workplace has a tendency to make any word that described an interesting or innovative concept almost meaningless over time. The word “Agile” is an often cited example of a concept that has taken on so many different meanings over time that it’s information content has... 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 →
Organising Hiring as a Sealed Bid Auction
Most people perceive salary negotiation as an unpleasant activity. One particular issue with the salary negotiation process that has been observed is, that candidates unable to approach a negotiation from a position of strength are at a disadvantage. While I am not sure by how much this moves the needle against people already in a... Continue Reading →
Availability vs Latency: A False Dichotomy
When designing distributed systems, we sometimes think of latency and availability as two technical dimensions to balance out in our designs. I would like to argue that a more useful perspective would be to see them as two sides of the same coin. When discussing the design of a system, we typically need to carefully... Continue Reading →
Why Aren’t DevPMs a Thing?
The proponents of DevOps (myself included) usually bring forward arguments that evolve around breaking silos: “You build it, you run it”. This, according to the philosophy, leads to deliverables that take operational concerns into account, more automation and less finger-pointing. Many of these same arguments could also be applied to some of the other organisational... Continue Reading →
To Data Or Not To Data
It is modern to be data-driven. Organizations brag: “We make decisions based on data.” Having spent a decent amount of time building data-crunching systems, I have a lot of sympathy for this attitude. In fact, I have suggested data-driven approaches in previous articles. But I also think that the tendency to measure and quantify everything... 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 →