Two-Speed IT in Practice: New Digital Products on a TypeScript Stack Alongside the Java Core System

Nearly 30 percent of Java production applications still run on Java 8, according to New Relic — and every new product idea is queued behind the migration. Two-speed IT breaks the gridlock: greenfield products on a TypeScript stack, docked onto the core via API contracts.
8 min readMatthias RadscheitMatthias Radscheit
Happycodingen-US

TL;DR

Nearly 30 percent of Java production applications were still running on Java 8 in 2024, according to New Relic telemetry. Instead of a big-bang rewrite or years of waiting for modernization, two-speed IT builds new digital products on a TypeScript stack and docks them onto the Java core via API contracts — with hard guardrails against polyglot sprawl, the Zalando lesson.

  • Nearly 30 percent of Java production applications were still running on Java 8 in 2024, according to New Relic — the backlog is too large for a "modernize first, innovate later" strategy.
  • Two-speed IT builds new digital products on a TypeScript stack next to the Java core and docks them on via APIs using the strangler pattern — first results in months instead of years.
  • The Zalando lesson: running multiple stacks side by side is enterprise normality, but uncontrolled polyglot sprawl costs productivity — two-speed means exactly two stacks with clear responsibilities.
  • Three guardrails keep the second stack under control: API contracts with OpenAPI and typed clients instead of direct database access, teams cut along products, and settled data ownership per business entity.
  • Honest contraindications: CPU-intensive workloads remain JVM territory (a 30–68 percent edge in independent benchmarks), and a modern Java 21 setup with a fast-moving team doesn't need two-speed.

If your next digital product can only go live once the Java core system has been modernized, it's not going live. That's not polemics — it's arithmetic: according to New Relic 2024, nearly 30 percent of all Java production applications were still running on Java 8 — a language version from 2014. That number doesn't come from a survey; it comes from telemetry across 62 million JVM instances. A backlog of that size won't be cleared in a single fiscal year, and your product roadmap can't wait that long.

The two standard answers to this dilemma are both wrong. Answer one: the big-bang rewrite — rebuild the core system from scratch and hope the market holds still for two years. Answer two: keep building new features into the legacy system, where every feature is throttled by release cycles, dependencies, and knowledge silos. There is a third way, and it's our default recommendation for new digital products next to a stable but immovable Java core: two-speed IT — the core system keeps running, new things are built alongside it on a TypeScript stack and docked on via API.

Why your roadmap moves at the speed of your slowest system

Money isn't the problem. According to the Lünendonk study 2025/26, 83 percent of DACH companies are planning higher modernization budgets for 2026, and according to Gartner, 72 percent of CIOs have declared paying down technical debt a priority for 2026 — while 60 to 80 percent of IT budgets already flow into operating and maintaining existing systems. The problem is sequencing: as long as every product idea sits in the queue behind the migration, innovation competes with maintenance for the same team, the same budget, and the same release windows. And loses.

Then there's the cadence of the Java ecosystem itself. Spring Boot has no LTS model: every minor version gets just twelve months of open-source support, and at the end of June 2026 — a few days from now — Spring Boot 3.5, the last 3.x line, drops out of OSS support, according to endoflife.date. Modernizing in place therefore doesn't mean modernizing once — it means modernizing permanently. That's not an argument against Java. It's an argument for not coupling new products to that cadence.

Three ways out of the backlog — a sober comparison

From a decision-maker's perspective there are three options, and each has a legitimate use case. This is how we assess them in architecture reviews:

PathTime to first new productRiskCost profileWhen it makes sense
Modernize in place (Java 17/21, Spring Boot 3/4)Late — new work waits for the migrationMedium: the upgrade treadmill remains; every Spring Boot minor gets only 12 months of OSS supportOngoing migration effort, possibly extended supportThe core system is itself the product; strong Java team in place
Big-bang rewriteVery late — years without visible business valueHigh: feature freeze, parallel operation, scope explosionHigh and hard to planPractically never as a first option
Two-speed: TypeScript greenfield alongside the coreEarly — first product in months, not yearsContained: the core stays untouched, risk is isolated in the new servicePredictable build budget plus an API layerNew customer-facing products; core stable but immovable

The big-bang rewrite is almost always off the table in practice: it ties up capacity for years, delivers no visible value for a long time, and carries the highest risk of failure. The real decision is between modernizing in place and two-speed — and it hinges on a single question: Is the core system itself the product, or is it the platform that new products should build on? In the second case, two-speed wins, because it's the only option where product development and modernization don't compete for the same resources.

Two-speed in concrete terms: the strangler pattern at TypeScript speed

The underlying pattern is well established as the strangler pattern: new functionality is built as a standalone service next to the legacy system and communicates with it through defined interfaces. The core system stays untouched — no surgery on grown code, no feature freeze, no parallel operation of two complete systems. Over time, individual capabilities can migrate out of the core into new services, but that's an option, not an obligation. Two-speed is first and foremost a sequencing strategy: it decouples the speed of your product development from the speed of your modernization.

That our fast lane runs on TypeScript is not a matter of taste. Since August 2025, TypeScript has been the most-used language on GitHub according to GitHub Octoverse 2025, with 66 percent more contributors year over year — GitHub calls it the biggest language shift in more than a decade. According to the Stack Overflow Developer Survey 2025, 48.8 percent of professional developers use TypeScript; Java sits at 29.6 percent. For the greenfield lane, that means a larger talent pool, one language stack from frontend to backend, and no Oracle licensing debate in the new product. We've laid out the full cost calculation — including the cases where Java wins — in our TypeScript vs. Java TCO comparison.

The classic reference case argues at exactly this level, too: back in 2013, PayPal built its first Node application in parallel with its ongoing Java development — with two developers instead of five, 33 percent less code, and double the throughput. The case is old, but the punchline still holds: the gain wasn't raw performance — it was smaller teams and shorter time to market. Those are exactly the metrics new digital products are measured by — not requests per second.

The Zalando lesson: coexistence yes, sprawl no

Before a second stack becomes strategy, a warning belongs on the table. Zalando has run microservices in Java, Scala, and Node.js side by side for years — coexistence is enterprise normality, not the exception. But the Zalando engineering retrospective covering a decade of technology history also documents the flip side: six languages for similar CRUD services prevented good platform support and cost measurable productivity — the endgame was consolidation. The lesson for the mid-market: two-speed means exactly two stacks with documented responsibilities — Java for the core, TypeScript for new products. Not "every team picks its favorite framework." A deliberate two-stack strategy is the opposite of polyglot sprawl, not the beginning of it.

Three guardrails that keep the second stack under control

1. API contracts instead of reaching into the database

The new application never touches the core system's database directly. The interface is a contract: OpenAPI specification first, with typed clients generated from it on the TypeScript side. That way, every change to the core surfaces as a contract change — in code review, not as a middle-of-the-night production incident. We've described what such an integration layer in front of a legacy system looks like in practice in our guide Next.js as an integration layer for legacy systems.

2. Cut teams along products, not layers

The most common organizational mistake: the TypeScript team gets demoted to the Java team's "frontend supplier" — then every feature needs two backlogs, two prioritization rounds, and an escalation meeting, and within a quarter the second speed is back to being the first. What holds up is the opposite cut: one product team owns the new service end to end, from the interface to the API integration. The core-system team provides its interfaces as an internal product — versioned, documented, with a named point of contact. Two speeds need two ownerships, not a dependency chain.

3. Settle data ownership before the first line of code

For every business entity, which system is the source of truth must be settled before the project starts. Customer master data in the core, interaction and product data in the new service — that works as long as it's documented and synchronization flows in one defined direction. What reliably kills two-speed setups is shadow data: copies of core data that take on a life of their own in the new stack and that nobody can reconcile a year later. Data ownership is a governance decision, not a technical one — it belongs in the project charter, not the sprint backlog.

When two-speed is the wrong choice

Honesty is part of consulting, so here are three contraindications. First: if the new product is CPU-intensive — pricing engines, simulations, massive parallel processing — physics favors the JVM: independent benchmarks show a 30 to 68 percent advantage over Node.js there, and Java 25 LTS has raised the bar further with mature virtual threads. Services like that belong on the JVM, even in a two-speed landscape. Node and TypeScript play to their strengths in I/O-heavy web and API services — which is where most customer-facing digital products actually live.

Second: if you can't operate two stacks, don't try to do it quietly. A small IT team with no experience in the Node ecosystem initially gains complexity from a second stack, not speed — in that case, an external product team is a more realistic entry point than building up parallel structures of your own. Third: if your core already runs on Java 21 and the team is well-drilled and ships in short cycles, there is simply no problem for two-speed to solve. The approach is a tool against gridlock, not an end in itself.

The next step: one product, one API contract, 90 days

Getting started with two-speed isn't a strategy paper — it's a pilot project. Pick the one digital product that has waited longest on your roadmap and can be cleanly separated from the core in business terms. Define the API contract to the core system, staff a product team — and after 90 days, measure what's live. As a TypeScript agency, we build greenfield products like these with senior teams: typically as an MVP between €8,000 and €20,000, or as a full-fledged web app between €20,000 and €60,000. If you want to pressure-test whether your candidate holds up: in a free intro call, we'll walk through interfaces, data ownership, and team structure in 30 minutes.

As of June 2026. All study and support figures attributed as stated in the text; price ranges are net and depend on scope and degree of integration.

Frequently asked questions

What does two-speed IT mean?
Two-speed IT splits the IT landscape into two speeds: a stable core system — often Java-based — keeps running on long release cycles, while new digital products are built next to it on a faster stack and connected via API. The approach decouples product development from modernization: new features don't have to wait until the legacy system is migrated, and the core system isn't destabilized by risky interventions.
What is the strangler pattern?
The strangler pattern is a modernization pattern in which new functionality is built as standalone services next to a legacy system rather than inside it. The new services communicate with the core through defined interfaces and can take over individual capabilities over time. The advantage over a full rewrite: risk stays contained to the individual service, the legacy system keeps running undisturbed, and first results are visible in months instead of years.
Do we have to replace our Java core system for this?
No — two-speed is explicitly not a replacement strategy. In this model, a stable Java core system remains the platform that new products dock onto via API. Migrating individual capabilities out of the core later is possible but optional. It only becomes critical if the core runs on versions that are no longer supported: then a support decision has to be made in parallel to the product strategy, such as moving to a current OpenJDK distribution.
How do we keep two stacks from turning into sprawl?
With hard guardrails: exactly two stacks with documented responsibilities, binding API contracts instead of direct database access, and settled data ownership per business entity. The Zalando engineering retrospective shows why this matters: six languages for similar services cost measurable productivity there and had to be consolidated. A deliberate two-stack strategy with clear rules is the opposite of that sprawl, not the beginning of it.
When is the JVM the better choice for new services?
For CPU-intensive workloads such as pricing engines, simulations, or massive parallel processing: independent benchmarks show a 30 to 68 percent advantage for the JVM over Node.js there, and Java 25 LTS has added mature virtual threads on top. TypeScript and Node.js, by contrast, play to their strengths in I/O-heavy web and API services — the typical load profile of customer-facing digital products such as portals, shops, and self-service applications.
How quickly can a first greenfield product on a TypeScript stack go live?
In our projects, an MVP typically lands between €8,000 and €20,000 with a runtime of a few months; a full-fledged web app between €20,000 and €60,000. What determines the pace is less the amount of code than the groundwork: a cleanly defined API contract with the core system and settled data ownership prevent the alignment loops that otherwise slow these projects down.

Sources

Related articles

Open for select projects

Let's talk about your project

Book a no-obligation call, send us an email, or use the form – we'd love to hear from you.

150+
Completed projects
15
Years of experience
8
Senior‑level team members