Modernization case study · anonymised

Three Java 7 repositories upgraded to Java 21, delivered four weeks after kick-off

A Nordic business-services company asked for a first, bounded step on a large Java platform upgrade: three repositories it chose itself.

Java 7 · JBoss EAP 6Java 21 · JBoss EAP 8.1

Key takeaways

  • An old Java platform out of support, with hundreds of services still to upgrade.
  • One engineer working with coding agents upgraded three repositories from Java 7 to Java 21 and delivered the code four weeks after kick-off.
  • The database layer was checked statement by statement against the old one, and the services were verified on the new platform; the customer then tested the result in its own environment.
Industry
Business services
Company
Nordic company with its own development team
System
Three repositories – two backend services and a web front end
Stack
Java 7 and JBoss EAP 6 → Java 21 and JBoss EAP 8.1 (Jakarta EE 10)
Status
Delivered in July 2026; customer testing followed

4 weeks from kick-off to delivered code · 11 verification gates run on the new platform · 1 engineer working with coding agents

Why now

The company's Java services ran on Java 7 and JBoss EAP 6, which are no longer supported. The upgrade ahead was large – hundreds of backend and front-end services, new application servers to build and old ones to retire – and the company wanted a partner who would take responsibility for it. Before committing, it wanted to see the work done on a small, real part of its estate: three repositories it chose itself.

What we did

Map – June 2026. Before any code changed, the engineer used Claude Code to map the dependencies of the three repositories and write a migration and verification plan, which the customer reviewed and approved.

Define – June–July 2026. The agreement defined done as code that builds and passes its unit tests, with the services working on the new platform. In early July, the customer and ModernPath narrowed the front end's definition to working in a local environment on the new platform.

Rebuild – June–July 2026. The engineer worked with coding agents in Claude Code, alongside automated refactoring recipes (OpenRewrite) and a code generator, and reviewed and decided each step. All three repositories moved to Java 21 and Jakarta EE 10. In one backend service the old database-access framework was replaced with a current one; in the front end, Spring and Spring Security moved up several major versions. The code was delivered on the customer's branch in July, four weeks after kick-off.

Accept – from July 2026. The customer reviewed the code and tested it in its own environment over the following weeks.

What it took from the customer. In a migration like this, the customer's part is small in days but sets the pace: acceptance criteria, approving the plan, answers on blockers, and acceptance testing. Here, a technology lead, a technical owner and a project manager were its people on the project. The customer had already prepared shared build parents and libraries for the new platform, and some of its services had already moved – the work built on that foundation. Access was limited to the development and QA branches, set up so that production could not be reached by accident. End-to-end and data-driven testing were not part of the agreement, so the customer took that testing on itself.

Proof

All checks ran in a local environment on the new platform, against the customer's development database and integration endpoints – no production data was used.

In the backend service whose database layer was replaced, every statement was run through both the old and the new code against the development database and found equivalent; test inserts were rolled back. The three services were deployed together on the new application server, the backend calls and their error handling were tested through the service chain, and one approved test wrote a record into the development database through the new stack. In total, 11 verification gates were run; all were marked passed.

Scope and limits

Out of scope: a redesign of the user interface, refactoring to idiomatic Java 21, end-to-end and data-driven testing, running the full application environment, and new features. Production was not part of this step, and neither was the rest of the estate. Not verified in this step: the front end's main flow end to end (a backend service it depends on did not respond at test time), sign-in through the real identity service, and one write path that still waited for an updated library from the customer. Peer review, build pipelines, QA promotion and staging acceptance were handed over to the customer with the migration report.

What stays with the customer

Three repositories on Java 21 and JBoss EAP 8.1; updated build configuration; a migration and verification plan; a readme in each repository with the changes, the verification results and the known caveats; and a migration report with ten technical findings for the rest of the estate. One example: the new application server silently skips a kind of component the old one ran, so a start-up routine did not run until the code was changed.

What it means for you

Like a First Slice, this was a bounded part of a larger estate, with code delivered in four weeks. Today's First Slice – one bounded part of a legacy system, modernized in 30 days at a fixed price – goes one step further: it proves the rebuilt slice against the running old system, with parity tests on your test data, before you accept it. After the first slice, the next slices follow a sized plan, and the Agentic Engineering OS keeps the system map, requirements and evidence for your own team. Your first slice starts with a 60-minute scoping call.

Published without the customer's name. Figures are from the engagement record.

Book a scoping call

Tell us about your system

Pasi Vuorio

Pasi Vuorio

CEO

Gaurav Khullar

Gaurav Khullar

CPO

Pick a time that suits you

In a 60-minute scoping call we look at your system together, name a candidate first slice, and agree the next step. Give us read access after the call, and we size the candidate slices before you commit.

Day

Time (Helsinki)

Checking the calendar…

See the First Slice offer