Good software that cannot be released safely, or observed once it runs, is still a risk. We build the delivery and operations side of Java systems with the same care as the code: automated, reproducible and proportionate to the size of your team.

Continuous integration and delivery

Pipelines with GitHub Actions, GitLab CI or the tools you already use: fast builds, tests at the right levels, dependency and security scanning, versioned artefacts and automated deployments with approval steps where your process requires them. The goal is a release that anyone on the team can run and roll back.

Containers and deployment architecture

Docker images built for the JVM: layered, small, with memory settings that respect container limits. Rolling or blue-green deployments, database migrations that are safe to run while the old version is still serving traffic, and environments described as code. We work with Kubernetes-based platforms operated by your team or your provider; we do not present ourselves as Kubernetes platform specialists, and many workloads do not need one.

Observability

OpenTelemetry and Micrometer for metrics and traces, structured logs you can search, and dashboards in Grafana that show business transactions, not only CPU graphs. Alerts are based on symptoms users would notice, so that on-call time is spent on real problems.

Cloudflare and Fly.io: simple, modern clouds

This is where we specialise, and one of the things that sets us apart. Cloudflare for DNS, WAF, edge caching, Workers and Pages, R2 object storage and Turnstile; Fly.io for running Java services and Postgres close to users, from a single Docker image, without a platform team. Together they cover most of what a company needs, with a fraction of the configuration, cost and lock-in of a hyperscaler, and with infrastructure your developers can understand in an afternoon.

AWS, Azure and Google Cloud when required

Some companies are committed to a hyperscaler, or have regulatory and data-residency requirements that point to one. We work there too: deployment, observability and security on AWS, Azure or Google Cloud, alongside Swiss and EU hosting providers where data must stay local. We simply prefer the simpler option whenever it meets the requirements, and we explain the trade-offs, including lock-in and cost over time.

Production support and developer productivity

Runbooks, incident reviews that lead to fixes, and diagnostics for the JVM in production. On the developer side: local environments that start with one command, Testcontainers instead of shared test databases, and builds fast enough that people run them. We agree support arrangements explicitly; we do not offer round-the-clock operations.