Anvil CoderLog in

Use cases

Modernizing a legacy Java codebase

The migration that has been postponed for years, as a chain of small, individually checkable steps: a grown Spring project onto Java 25 and Spring Boot 4, commit by commit.

Illustration for the use case “Modernizing a legacy Java codebase” (decorative)

Case study in full

Example scenario

Stack profile: java-spring-boot-4-hexagonal · Example scenario with typical orders of magnitude.

A grown Spring project runs on an old Java and framework version. Dependencies have piled up over years, part of the test suite is red or skipped, and the migration kept being postponed because nobody could break it into small steps. That is exactly what the run takes over: target level into the ticket, plan into slices, one commit per slice.

What stays with your team: Your team sets the target level. You keep the review of every slice, the approval of critical dependency changes and the merge.

What you need

How the run works

  1. The ticket in the tracker describes the target level per module.
  2. The plan breaks the migration into ordered, individually checkable slices.
  3. Each slice changes one bounded portion: a dependency, an API adjustment or a test fix.
  4. Per slice, compilation, the affected tests and static analysis run.
  5. The result arrives as a pull request in your repository; you review and merge.

What you get

Key figures

Scope

Stories/tickets
1
Slices
34
Files/modules
118

Throughput

Validated slices
31
Retries
9
Human interventions
6

Quality

Checks run
Compile, Unit Tests, Static Analysis
Gates passed
5
Gates failed
1

Resources

Prompt tokens
500000
Completion tokens
200000
Cache tokens
750000
Model calls
200
Sandbox runtime
90 minutes
Model/stack context
Java 17 → Java 25, Spring Boot 3 → Spring Boot 4 (target profile java-spring-boot-4-hexagonal).

What stayed open

Two older test classes do not yet cover the new code path; they are a ticket in the backlog.