Eight Posts on the Fun Part. One on the Bill.
In Post 8 I described my monthly billing run. I left out one detail. One client never gets an invoice, and it's the biggest one: the Drupal community. Since July 2025 it has had almost all of my working time. I've sent it nothing. Not out of generosity. Out of bookkeeping habit. There is no address field for "everyone".
This post is that invoice. Itemised, with a total. Nobody is obliged to pay it. But a bill nobody has seen can't be paid either.
This is the last post of the series ECA: The Next Chapter. Earlier posts: the journey, the Modeler API, in-context customization, the new Workflow Modeler, test, replay, debug, ECA, FlowDrop, and Maestro, documentation that machines read, and orchestration.
The fun part
The eight posts before this one were about the fun part. A new Modeler API. A Workflow Modeler built from scratch. In-context customization. Test and replay. One map for ECA, FlowDrop and Maestro. An ECA Guide that AI agents read. Orchestration without engine decisions.
New things. Demo-able things. Things that fill a room at DrupalCon. When someone offers to pay for open source work, this is the kind they mean.
The ledger
The part the eight posts didn't show. Flat, as a ledger should be.
- 87 projects on drupal.org flagged "actively maintained". Counted via the JSON API in September, so the number is exact and already out of date. Each one gets Drupal 11 and 12 compatibility, PHP upgrades, security releases, and an issue queue that doesn't ask whether I'm busy.
- Co-maintainer of the Gin admin theme.
- Subsystem maintainer for the Admin theme in Drupal core. That's the merge of Gin into core as the default admin theme: for the first time a single admin theme, and the first thing every new Drupal user sees. The issue component shows how much more there is to it.
- Co-maintainer of Tool API.
- 293 public projects on gitlab.lakedrops.com. L3D, our Docker-based Drupal development environment. Composer plugins. 99 Ansible repositories. Docker images. AI skills and the PAI framework. DruLab, a browser extension for Drupal's GitLab.
- The calendar. A weekly two-hour coffee table with people who started in Munich and are now spread over the planet. A weekly orchestration call with Dries, Shibin and Randy. A monthly catch-up with kingdutch from OpenSocial. A bi-weekly LakeDrops coffee table. Bi-weekly sessions with Emma and Mark, the UX experts who keep me honest. A weekly Default Admin team session for the core merge, accessibility, UX and DX. The Drupal User Group Bodensee in Konstanz, monthly, since 2011.
- Two DrupalCons a year. Around ten talks in 2025 and 2026.
- The AI Learners Club. The AI Best Practice initiative.
Have I mentioned the tools on our GitLab? I have. That's what a list like this does to you.
Not one line of it makes a good conference talk. Every one breaks something if skipped for three months.
Applause and badges
Innovation gets applause. Maintenance gets a green badge on drupal.org. Both cost the same hours.
Every funding conversation I've had was about a feature. Nobody has ever offered to sponsor a security release. I understand why. A feature has a demo, a release date, a name for a slide. A security release has a Wednesday afternoon and a changelog line. But the feature stays useful only because the Wednesday afternoons keep happening. The eight posts stand on the 87 projects, not the other way round.
Maintenance is the more important of the two. It's also the one nobody has asked to buy.
How it has been paid
Since July 2025 I've worked almost full-time on everything above. Revenue from it: zero. Sponsoring from FreelyGive, directly, and from Optasy through Open Collective covered a couple of months in 2025. I name them because they did what nobody else did. The rest came out of what earlier Drupal projects earned. LakeDrops did well for years; that's the only reason this was possible.
I chose this. In July 2025 I decided the work was worth more than a year of my income, and I'd decide the same way again. That isn't a hardship story. It's a budget line with an end date.
What happens when the line ends isn't dramatic. I go back to client work. The 87 projects move to evenings. Issue queues answer in months instead of days. The single UI from Post 8 stays a design spec. Nobody is obliged to prevent that. I still think the world should do something about it. Not for my sake. For the part of Drupal that runs on this ledger.
Dries said it better
Dries has written about this for years, lately more often. In August, in Open Source is a cost-allocation system: costs "are distributed rather than collected through a single transaction," so "they are harder to see and harder to fund." And the sentence that describes my ledger: "the people who benefit, the people who decide, and the people who bear the costs are often different and may have no formal obligations to one another."
A week later, in Open Source is four kinds of economic goods: code is a public good, maintainer time is excludable and rival: "time spent reviewing one patch cannot also be spent on another." His conclusion: "revenue from excludable goods can pay for rival resources, while Open Source code remains a public good."
That's the whole economics of what follows. The code stays free. The hours are finite. The only open question is who pays for them.
The menu
Maintenance first, because it's the less shiny one.
1. Sponsor the maintenance. Recurring, through Open Collective. €500 a month brings 10 Drupal Certified Partner credits. €1,400 a month brings 35 credits and a mention. Why recurring: maintenance is recurring. A one-off pays for a feature. A monthly amount pays for a queue. This is the critical line.
2. A service agreement. For organisations running these modules in production. Named contact, agreed response times, Drupal 12 readiness on your schedule instead of mine. There's no product page yet, because nobody has asked. Ask; we agree on scope and a monthly fee. Dries' economics in one contract: you buy the excludable part, priority, and the code stays public.
3. Hire us for ECA work. Features, integrations, migrations, training. The fun part, paid.
4. Fund the next innovation. The single UI from Post 8: composite model owner, dispatcher, data-handoff contract. Bigger tickets, scoped. Through Open Collective, directly, or through the Drupal Association, or a route I haven't thought of.
5. If your site runs on ECA. The module has a maintenance cost that isn't in your hosting bill. Ask your agency whether part of it flows back.
6. Time instead of money. Triage, reviews, documentation, templates. One honest note: a patch is useful when its author stays for the follow-up. A drive-by patch costs me an hour of review and moves nothing.
The total is roughly €10,000 a month. That's what turns the ledger above from a hobby with an expiry date into a job. A ledger without a total is just a list.
What you get
Not gratitude. You'll get that too, but it isn't the product. You get continuity. The 87 badges stay green. Security releases land on Wednesdays. The Gin merge lands in core. The chapter after this series gets written.
I'm at DrupalCon Rotterdam next week. Otherwise: the contact form, Drupal Slack, or go.lakedrops.com/jurgenhaas. Pick one line from the menu.
This is the last post of the series. The October billing run is on the first working day. I'd like to add a client.
Neuen Kommentar hinzufügen