Siarhei Oshyn, Head of Data / Data & AI Architect
Java: Technologies We Have To Say Goodbye To
The start of a new year is the perfect moment to clear out what’s no longer needed – and technology is no exception. Some tools and platforms lose their relevance over time, and it’s time to let them go. We asked Head of Java, Dmitry Kvartalny, which technologies he’s ready to part ways with, and which ones are still riding high.
To me, the phrase immediately recalls the Opportunity Tax. In software leadership, saying goodbye to technology isn’t just about deprecating old code; it’s a conscious decision to stop subsidising the past at the expense of the future.
In the engineering ecosystem, we often fall into the trap of ‘if it isn’t broken, don’t fix it.‘ But ‘not broken’ is a low bar. I think of the technologies that have become bottlenecks to velocity – tools that require specialised ‘tribal knowledge’ to maintain, or frameworks that force us into 10-minute build cycles and monolithic deployments. When I hear ‘saying goodbye,’ I see a necessary liberation. We are clearing away the technical debt that acts as a silent tax on our innovation, allowing the team to shift their energy from ‘keeping the lights on’ to building features that move the needle for our customers.

I hope to never return to the era of ‘Manual Boilerplate Engineering.’ Until very recently, even the most senior Java developers spent a staggering amount of their day writing ‘dumb’ code: DTOs, repetitive mapping layers, boilerplate unit tests, and the ‘glue’ that connects services. We treated this as a standard part of the job, but in reality, it was a massive drain on mental energy and project budgets.
With the rise of AI-augmented development and smarter, meta-programming-heavy frameworks, that ‘busy work’ is finally becoming a relic of the past. I want all of us to focus more on high-level architectural puzzles, security, and business logic – the things that actually require human intuition.

Honestly, I’ve always viewed technology through a pragmatic lens – It’s an evolution, and I don’t tend to form emotional attachments to tools that have reached their expiration date. However, I’m currently observing a ‘forced goodbye’ to the traditional IDE as we know it. For decades, the IDE was the ‘command centre‘ of a developer’s life – a massive, resource-heavy suite that managed everything from refactoring to deployment. I’ve always enjoyed the deep mastery of a complex IDE, but we are reaching a point where these tools are becoming redundant. With the rise of LLMs and AI agents that can reason about code across an entire repository from a simple terminal or a lightweight text editor, the ‘heavy’ IDE is starting to feel like an unnecessary middleman. We are giving up the ‘comfort’ of the traditional, feature-rich interface in favour of a more fluid, AI-driven workflow. It’s a bittersweet transition; you lose the familiarity of the tool you mastered over 20 years, but you gain a level of speed and decoupling that makes the traditional IDE look like a fossil.
Absolutely. I believe the Monolithic architecture deserves significant respect and a seat at the table in modern discussions. Today, we often treat ‘monolith’ as a synonym for ‘bad practice,’ but that’s a misunderstanding of engineering.
A well-structured monolith is often the most pragmatic starting point for a project. It simplifies delivery, reduces operational overhead, and eliminates the ‘network tax’ of microservices. In the early stages of a product, you need velocity and the ability to refactor across boundaries easily – things a monolith excels at.
Alongside this, I’d include Relational Databases, SQL, and classic OO principles. These are ‘load-bearing walls’ for a reason; they embody decades of lessons on data integrity and system boundaries. The real risk isn’t using ‘old’ technology; it’s using it without understanding why it was created. Old technologies shouldn’t be dogmatic defaults, but they should be respected reference points that help us build smarter, more grounded systems.

The danger isn’t in the tools; it’s in the stagnant mental models. Relying on ‘what worked 10 years ago’ means you are likely solving problems that no longer exist while ignoring the constraints of the modern era.
Ten years ago, we architected systems around the limitations of physical hardware or early-stage cloud providers. We over-indexed on manual ‘plumbing’ because we had to. Today, the landscape is fundamentally different. If a developer applies a 2016 mindset to a 2026 project, they will likely over-engineer solutions that the platform now handles natively.
For example, in the Java world, the way we handled high-concurrency 10 years ago (complex thread pooling and reactive programming) has been revolutionised by Project Loom and Virtual Threads. Sticking to the ‘old way’ doesn’t just make you slower; it makes your system more complex and harder to maintain than it needs to be. The ultimate risk is intellectual debt: building a solution that is technically ‘correct’ by yesterday’s standards but a liability in today’s ecosystem.
Refusing to modernise creates a compound interest of risk across all three fronts:

In the next five years, I believe we will finally say goodbye to ‘Static Infrastructure Management.’ For years, even in the cloud era, we’ve still been ‘babysitting’ instances – worrying about heap sizes, container orchestration, and manual scaling limits. We are moving toward a ‘No-Ops’ reality for the application layer. Between the maturation of GraalVM Native Images (which allow Java to start instantly and consume minimal memory) and AI-driven autoscaling, the concept of ‘managing a server’ will become a relic.
I also believe we will see the sunset of complex Reactive Programming models (like WebFlux or RxJava) for standard enterprise apps.
Now that Project Loom and Virtual Threads have made high-concurrency code simple and readable again, the ‘reactive’ style – which is notoriously hard to debug and profile – is losing its primary reason for existing. We are returning to a ‘thread-per-request’ model that is as simple as it was 20 years ago, but with the performance of a modern asynchronous engine. We’re saying goodbye to complexity to improve performance.
Siarhei Oshyn, Head of Data / Data & AI Architect
Valdemaras Girštautas, Jr, JavaScript Software Engineer