The term “Software Architecture” can evoke the impression that it describes a blueprint that needs to be completed before actual development work can start. This association is natural given the origin of the term: The architecture of a building better be complete before the construction begins. Unfortunately, this vision is also at odds with what... Continue Reading →
The Management Proliferation Cycle
I think that most practitioners in the technology space will have come across a project with an incredibly skewed managers-to-doers ratio. Symptoms are typically long discussions that are detached from the on-the-ground reality, difficulties to build consensus about the right approach because of the number of opinions involved, and a way too long wish lists... Continue Reading →
Impactful Work Versus Salary
The common wisdom is that working in fields with high social impact such as environmental protection or education requires lowering one's salary expectations whereas some of the fields that have the reputation of being lucrative financially also face the suspicion of exploitative culture or frequent moral hazards such as finance or the petrochemical sector. While... Continue Reading →
Has Any Great Idea Ever Been Developed at the Water Cooler?
The fact that open-plan offices have become the norm in the software industry is a mystery to me. I know very few engineers working in these environments that appreciate them and all the quantitative evidence that I am aware of seems to favor good ol’ walls. Open spaces are often promoted as environments that “foster... Continue Reading →
The Reorganization Pendulum
Let us talk about everyone’s favorite pastime: Reorgs! There are many reasons why they happen, some very valid (like economic necessity or making sure the right people end up in the right position) some a bit less (e.g. a new manager wanting to leave a scent mark or sidelining an underperformer without stepping on anyone's... Continue Reading →
The Unappreciated Beauty of Legacy Code
Legacy systems are getting a bad rep in the industry. In this post, I want to investigate why that is, highlight some of the aspects that make legacy systems interesting, and explore some ideas on how we might get around some of the frustrations that legacy systems cause. Where does the bad reputation of legacy... Continue Reading →
On Greener Grass Design Decisions
When making technology choices, most of us have to learn the hard way that almost every single decision we take comes with a trade-off. Most of the time technology choice A will have some advantage over technology choice B and vice versa. Very rarely a choice will turn out to be “Pareto-dominant”, meaning superior along... Continue Reading →
On Referring to People as Resources
I would like to address a pet peeve of mine: The unfortunate habit in some circles to refer to people as “resources“ in staffing-related discussions. In the past, I have heard phrases like “We will need more Java resources“ or “Can we find more DevOps resources”. In this piece, I want to argue that, more... 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 →
The Hype Trojan Horse
The newly formed German government has recently signed a coalition agreement that emphasizes a new digital agenda. One of the proposals is to investigate the use of blockchain technology for land title registers and priorities of the digital strategy include AI and quantum computing. At the same time, we observe that for contact tracing during... Continue Reading →