Most enterprise Java is not a greenfield project. It is a platform that has grown for years, carries the business, and has to keep changing. We build new Java and Spring applications, and we are equally at home extending systems that are large, old and critical.

Backend development and APIs

We design and implement Spring Boot services and the APIs around them: REST and event-driven interfaces, validation, error handling, versioning and documentation that other teams can rely on. Domain-driven design where the domain is complex, and plain code where it is not. A modular monolith is often the right answer; microservices when independent deployment and scaling justify the operational cost.

Spring, Jakarta EE, Quarkus, and Java or Kotlin

We work across the whole enterprise JVM, not only one framework. Spring and Spring Boot for most new services and for the large Spring estates many companies run. Jakarta EE (CDI, JAX-RS, JPA, JMS, Bean Validation) on modern runtimes such as WildFly, Payara or Open Liberty, for organisations standardised on the specification. Quarkus where fast start-up, low memory and container or native-image deployment matter. And Kotlin alongside Java, for teams that want a more concise language on the same JVM, libraries and tools.

We help you choose on the merits of your system and your team, and we are equally comfortable maintaining what you already run.

Data access with Hibernate and SQL

Many Java performance problems are data access problems: N+1 queries, oversized fetch graphs, missing indexes, long transactions, lock contention. We work at both levels, the JPA mapping and the SQL it produces, and we read execution plans. The result is persistence code that is correct under concurrency and predictable under load.

Performance engineering

We start from measurement: Java Flight Recorder, async-profiler, GC logs, database statistics and production metrics. Then we change what the evidence points to, and measure again. Typical results are lower latency, higher throughput and smaller infrastructure bills, but we only report numbers we have measured on your system.

Code quality and testing

We make codebases safer to change: characterization tests around legacy behaviour, Testcontainers for realistic integration tests, architecture rules that stop the structure from eroding, and refactoring in small steps that each leave the build green. Quality work is tied to the parts of the system that change most, where it pays back fastest.

Long-term product development

For product companies and internal platforms, we can take ownership of a component or a feature stream over months or years: planning with your product owners, delivering in increments, and keeping documentation and knowledge inside your team.