Christian Groth
Context
System context: Christian Groth works with teams, translates for product and business, builds and evolves production systems and runs on platform and ops. A visitor is curious about him. Visitor [Person] Teams [Person] Product & Business [Person] Christian Groth [Software System] Production Systems [External System] Platform & Ops [External System]

Christian Groth

Christian GrothSoftware Architect & Engineer

Shipped today, still changeable tomorrow.

20+ years of turning requirements into software that ships and keeps shipping. Boring tech, no quick & dirty. Kotlin and the JVM at heart.

buildit compiles? ship it!

ContainersWhat I do

Four parts, each with its own job. And they talk to each other all the time.

Engineering

[Container: hands on the code]

Still writing code, rarely less than half my time. Tests that describe behaviour, CI that is allowed to say no.

Architecture

[Container: structure that survives change]

Hexagonal designs, event-driven systems, modernizing what runs and shaping what's new.

Teams & Collaboration

[Container: technical leadership]

I lead from inside the team as its architect, not from an org chart. The feedback I hear most: I'm good team glue.

Platform & Operations

[Container: you build it, you run it]

Cloud native and Kubernetes, observability built in: if I can't see it in production, it isn't done.

Christian Groth [Software System]

ComponentsSelected work

A slice of my side projects. Same cloud native ideas as at work, deliberately on a smaller stack: a handful of apps doesn't need Kubernetes. The rest lives on GitHub. Well, most of it.

Component map: james-platform and spotify-control both use the quarkus-outbox library, and all of them run on the self-hosted platform. james-platform [Container: low-code platform] spotify-control [Container: playlist manager] uses uses quarkus-outbox [Component: library] Self-hosted platform [Deployment Node: VPS · Docker Swarm · Traefik]

james-platform

[Container: Kotlin · Quarkus · Qute SSR · MongoDB]

Problem
Every small data app needs the same CRUD, auth and infrastructure boilerplate.
Decision
A personal low-code platform: apps are versioned entity definitions, the UI is generated, computed values are Kotlin scripts.
Result
Semantic versions derived from schema changes, scripted migrations, aggregations, data import and sharing.
View on GitHub →

spotify-control

[Container: Kotlin · Quarkus · Qute SSR · MongoDB]

Problem
Spotify's own playlist handling is too coarse, and Wrapped comes only once a year.
Decision
Mirror playback history and playlists locally, enforce playlist rules automatically in a hexagonal Quarkus app.
Result
Duplicate-free playlists, album upgrades, yearly union playlists and Wrapped-style statistics on any day.
View on GitHub →

PrinciplesHow I work

The rules everything above is built with.

  1. Done means done right.Shipped and running, on a foundation that doesn't lead into a dead end. Quick & dirty is neither.
  2. Boring tech wins.Proven tools first. New stuff only where it really pays off.
  3. Make decisions explicit.ADRs and arc42 next to the code, so the why outlives the people.
  4. Evolve, don't rewrite.Old or new, every step is shippable.
  5. Teams over tools.Architecture is a social activity. The best diagram is the one the team draws together.
  6. Automate the boring parts.Done twice? Script it. Done three times? Put it into CI.

ChangelogCareer

Every system has a history. Here's mine, semantically versioned.

# [Unreleased]
- Exploring AI coding agents in day-to-day engineering
- Event sourcing, beyond the conference talks
# v5.0 (2023, current)
- Software architect and developer for municipal and public authority software
- Technical modernization, and keeping the team afloat between features, deadlines and tech debt
# v4.0 (2018)
- Extension platform turning a classic CMS into the data backbone for headless products
- Cloud native from day one: Kotlin, Micronaut, RESTHeart, MongoDB, Kubernetes, CI/CD in a DevOps team
- Grew from developer into the software architect role
# v3.0 (2015)
- SAP Hybris shops: payment providers and promotion engines
- Systems integration via Data Hub
# v2.1 (2014)
- Master's degree, studied part-time alongside the job, stopped at ~80 %
- Turned out passion beats a perfect CV
# v2.0 (2012)
- Product development on JBoss, JSF and OSGi
- Project work as developer, technical advisor and solution partner
# v1.1 (2007)
- Bachelor in Information Technology, a dual study programme alongside the job
# v1.0 (2005)
- Full stack on a large real estate portal: frontend to CORBA middleware and database
- Call center and first level support app with complex product configuration, built on a custom persistence framework for generic, dynamic type systems
# v0.2 (2004)
- Student job: a bit of everything, no common thread
# v0.1
- First lines of code at school

External SystemsOff the clock

Christian Groth
Christian Groth80s kid. Grew up rewinding tapes, now rolls back releases.
Riffs and refactorings. Both need structure, both need feeling.

Back Down Scenario

[External System: post rock]

Music has been running alongside the code for as long as I can remember. backdownscenario.de

Running

[External System: half marathon]

Chasing a half marathon personal best, but just as happy with a short loop to switch off and breathe.

InterfacesSay hi

Curious about something on this page, or just want to talk architecture? These are the public APIs.