Feroz Khan
Feroz Khan
Spring Boot Web Applications JavaFx Desktop Applications Android Developer (MVVM, ROOM, Jetpack)
Feroz Khan

Blog

Pilot Migration Sprint: Move One Java Service to Spring Boot 3 and Java 21 in a Single Sprint

Pilot Migration Sprint: Move One Java Service to Spring Boot 3 and Java 21 in a Single Sprint

An audit tells you what breaks. A pilot proves you can fix it.

Once you know what stands between your Java 8 backend and Java 21, the next question from leadership is always the same: "Can we actually do this without slowing the team down?"

A slide deck won't answer that. A working service will.

The Pilot Migration Sprint takes one real service from your backend and migrates it end to end: Java 8 to Java 21 (or 17), Spring Boot 2.x to Spring Boot 3, and javax to jakarta. It's tested, running through your CI pipeline, and ready for production, all within a single sprint. Your feature team keeps shipping the whole time.

Why start with one service instead of the whole backend?

Big-bang migrations are where modernization projects go to die. They freeze the roadmap, they pile up merge conflicts, and when something breaks in production, it's hard to tell which of the hundreds of changes caused it.

A pilot flips that around:

  • It de-risks the rest of the migration. Every surprise you hit on the pilot is one you won't hit on the next ten services.
  • It replaces estimates with real data. After one service, you know how long a migration actually takes on your codebase.
  • It creates a reusable playbook. The fixes, configuration, and automated refactoring rules become a template for every service that follows.
  • It builds confidence. A service running on Java 21 and Spring Boot 3 in your own pipeline is the strongest argument you can bring to leadership.

How we choose the pilot service

The right pilot is neither your most critical service nor your simplest one. It should be representative, so the lessons carry over to the rest of your backend. I usually look for a service that:

  • Uses the same building blocks as the rest of your system (JPA/Hibernate, Spring Security, REST or SOAP integrations)
  • Has reasonable test coverage, or can be covered quickly
  • Has a clear owner on your team
  • Won't block a major release if it needs an extra day

If you've done the Legacy Java Audit, the risk map already points to the best candidate. If not, we pick it together during a short scoping session at the start.

What happens during the sprint

1. Lock in current behavior

Before touching anything, I capture how the service behaves today. That means running the existing tests, adding characterization tests for critical flows that aren't covered, and recording a performance baseline. This is what lets us prove nothing changed for your users.

2. Upgrade the build

The build moves to JDK 21 (or 17): Maven or Gradle plugin updates, compiler settings, Docker base image, and the JDK used in your CI pipeline.

3. Automated refactoring first, manual fixes second

I use OpenRewrite's Spring Boot 3 and Jakarta migration recipes to handle the repetitive changes, like moving thousands of javax.* imports to jakarta.*. That leaves engineering time for the changes that need real judgment.

4. Framework changes

This is where most of the hands-on work happens:

  • Spring Security 6 configuration (replacing WebSecurityConfigurerAdapter with SecurityFilterChain beans)
  • Hibernate 6 query and mapping changes
  • Renamed and removed configuration properties, caught with spring-boot-properties-migrator
  • Tracing and observability (Spring Cloud Sleuth to Micrometer Tracing)
  • Servlet container changes (Spring Boot 3 runs on Tomcat 10.1 and Jakarta Servlet 6)

5. Integrations

For telecom and fintech systems, the integrations matter most. SOAP clients and services are regenerated for Jakarta (for example, Apache CXF 4.x), and REST clients, message brokers, and database drivers are verified against their partners and environments.

6. Regression and compatibility validation

The full test suite runs against the migrated service. Where possible, I compare responses from the old and new versions side by side to confirm the API contract hasn't changed.

7. Staging deployment and rollback plan

The migrated service is deployed to staging, smoke-tested, and compared against the performance baseline. You also get a documented rollback plan, so the production release is a low-stress decision on your schedule.

How feature delivery keeps moving

The migration runs on a short-lived branch that's synced with your main branch every day. Your developers keep building and releasing features as usual, and daily syncing keeps the two from drifting apart. If one of your engineers wants to pair with me during the sprint, even better: it's the fastest way for your team to own the process for the services that follow.

What you get at the end

  • One migrated service running on Java 21 (or 17) and Spring Boot 3, ready for production
  • A merged pull request with clear, reviewable commits
  • Your migration playbook: the OpenRewrite configuration, the list of fixes, and the gotchas specific to your codebase, ready to reuse on the next service
  • An updated CI pipeline running on the new JDK
  • A test and performance report comparing the old and new versions
  • A revised estimate for the remaining services, based on real data from your own code
  • A handover session with your team

Who this is for

The Pilot Migration Sprint is a good fit if:

  • You know modernization is needed and want proof it can work before committing the full backend
  • You've completed an audit, either the Legacy Java Audit or your own internal assessment
  • Leadership needs to see a working result before approving a larger project
  • Your team wants to learn the migration process hands-on, not just receive the result
  • You can't afford to freeze feature delivery

Frequently asked questions

Do we need the Legacy Java Audit first? It's recommended, because it makes picking the right pilot service much easier. If you skip it, I run a short scoping session at the start of the sprint instead.

Will our feature work stop? No. The migration happens on a separate branch that's synced with main daily, so your team keeps shipping.

Can our developers be involved? Yes, and I encourage it. Pairing with one of your engineers is the best way to transfer knowledge to your team.

Do you deploy to production? I deploy to staging and prepare the release with a rollback plan. The production release happens on your schedule, and I support your team through it.

Can you sign an NDA? Yes. I'm happy to sign one before receiving any access.

What happens after the pilot? You can use the playbook to continue the migration internally. Or, if you'd like to modernize the rest of your backend in weeks instead of quarters, the next step is the Rapid-Sprint Modernization Protocol, where we migrate service by service until the whole backend is done.

About me

I'm Feroz Khan, a Senior Software Engineer at Seamless Distribution Systems (SDS) with 7+ years of experience building and maintaining enterprise Java backends, particularly in the telecom domain. I work daily with Java, Spring Boot, microservices, REST/SOAP integrations, SQL, and distributed systems. I help telecom and fintech engineering teams modernize legacy Java backends in weeks instead of quarters, without freezing feature delivery.

Book your pilot sprint

Pick one service. Let's prove the migration works on your own code.

Book Your Pilot Sprint

Or reach me directly: ✉️ khan.feroz8899@gmail.com ???? +923244148420

Add Comment