Independent · Munich, Germany
Software engineer & agile enthusiast, passionate about product discovery, delivery & operations.
I help teams build software people actually value. Lifelong learner. Here I write short notes on agile and the craft of building products. Member of the allwerker cooperative, where I lead fullstack4j. Organizer of the Lightweight Java User Group since 2010.
- DiscoveredUnderstand the problem and the people who have it.
- DeliveredShip thin, vertical, user‑centric slices.
- OperatedYou build it, you run it, you learn from it.
- LearnedThen start again, a bit wiser.
Value exploration over cost estimation.
New: fullstack4j
fullstack4j.dev →Whole features with a team of three.
Most business software doesn’t need a frontend team, a backend team and an API between them. With plain Java from the database to the button, two or three people can own every feature end to end, and AI agents take the routine work off their hands. Together with my colleagues at allwerker, I set up, staff and coach such teams, working in Shape Up-style cycles.
- Spring Boot
- Apache Wicket
- Spring Modulith
- MongoDB
- Shape Up
Currently building
Open-source tools for full-stack Java on Spring Boot.
-
Apache Wicket × Oat
Wicket Oat
A modern, themeable component library for Apache Wicket. Built on the Oat CSS library, it wraps its semantic HTML, CSS and JS in idiomatic Wicket components and behaviors.
-
Apache Wicket × Spring Boot
Wicket Spring Boot Starter
Apache Wicket 10 on Spring Boot 4 with a single dependency: the Wicket filter is auto-registered, @SpringBean injection just works, and configuration lives in application.properties.
-
start.fullstack4j.dev
fullstack4j start
start.spring.io with Apache Wicket. A fork of the Spring Initializr that offers everything upstream does, plus Wicket through the Spring Boot starter, with Maven as the default build.
-
MongoDB × Spring Boot
ditto
A generic MongoDB collection comparator. After a batch job replaces your data, it compares the new collection with a backup and gives a GREEN, YELLOW or RED verdict on whether the result looks usable.
-
MongoDB × Spring Data
diffsert
Change-aware upserts for MongoDB and Spring Data. It writes every document but records only the fields that changed, so change streams and Debezium see small updates, and unchanged documents produce no event at all.
Latest notes
All 14 notes →fullstack4j
In my note on Fullstack , I suggested that a team skilled in Java might not need a JavaScript SPA at all. A mature server-side framework like Apache Wicket keeps the team in one language and lets everyone work on user-facing vertical slices instead of splitting into frontend and backend members. Since then, I have been…
Continue reading →-
Story Points II
It is quite intriguing that an agile concept of user story points was invented for estimating the cost instead of the value of the story it relates to, even though its…
-
Garbage Disposal
It might be wrong to plan iterations by moving items from the overall backlog to the iteration backlog until it’s full. It reminds me of a garbage disposal.
-
Story points
Story points can mean different things to different people. Some see them as the effort needed to complete all related tasks, while others consider them a complexity…
-
Note to self II
I am on a team that works in a mob programming fashion, but we would very much like to be agile as well. What would be the best time to stop our session, get up, and do…
-
Note to self I
Why is event sourcing still such a niche ‘product’? Logging almost every possible technical information, ranging from debug messages to all kinds of exceptions, is…
-
Fullstack
When building a web UI for a product, the decision often comes down to which JS SPA framework to use. Another option might be worth considering if you already have a team…