A notification system often starts with a simple requirement: send an email, text message, or push notification when something happens in an application. For a small system, calling an external provider directly may be enough. As traffic grows, however, notification delivery becomes a distributed systems problem. A production notification platform needs to handle traffic spikes, provider failures, duplicate events, retries, delivery tracking, and multiple notification channels without slowing down the application that generated the notification.
This article explores how a scalable notification system can be designed using Spring Boot and Kafka, with a focus on asynchronous processing, fault tolerance, idempotency, retries, and horizontal scaling.
Agentic AI in the Software Development Lifecycle: 2026 Adoption and Impact Data
Agentic AI has moved well past the pilot stage for code generation, but adoption remains uneven across the rest of the software development lifecycle. Coding assistants are now mainstream; testing, code review, CI/CD, and incident response are each at very different points on the adoption curve, with very different levels of measured payoff. This report compiles current 2026 data on …
Java Trends of 2026: Market Position, Enterprise Adoption, Version Distribution, and the AI Acceleration Angle
2026 Java trends: TIOBE and Stack Overflow rankings, enterprise adoption by industry, Spring Boot and framework data, Java version distribution, AI/ML integration, and runtime performance benchmarks.
How We Used LLMs to Understand and Modernize a Legacy Delphi Application
Many legacy modernization projects start with a simple question: what does this thing actually do?
In this project, we were modernizing a decades-old Delphi application with limited documentation, no meaningful test coverage, engineers long since moved on, and significant unknowns about the environment in which it operated.
Modernizing legacy systems is challenging, particularly when documentation is limited and system knowledge has been lost over time. When LLMs and AI are applied thoughtfully, they can help teams understand legacy systems faster and reduce modernization risk.
This article focuses on how we used LLMs to understand, document, and de-risk an unfamiliar legacy system before modernization began. Once the application was understood and the architecture was defined, the team leveraged AI-assisted development workflows to accelerate the Delphi-to-.NET rewrite itself. Evan Sanning shares that side of the project in his companion article, How We Used LLMs to Rewrite a Legacy Delphi Application in C#.
Learning JavaScript After Java: 3 Key Reminders for Developers (From “Car” to “Carpet”)
In this post, I’ll walk through a few key reminders that helped me while making the transition from Java to JavaScript, especially while working with React and React Native.





