Three Streams, Three Worlds, Java Streams vs Reactive Streams vs Kafka Streams
Java 8 Streams, Reactive Streams, and Kafka Streams often get mixed together because of the name — but they solve completely different problems, follow different execution models, and have no technical relationship to each other...
Read Post
December 20, 2025
Being Reactive Even When Your Upstream Isn't
You don’t need the whole world to be reactive before you adopt reactive technologies...
Read Post
December 6, 2025
If You Don’t Practice TDD, Do This Instead
Most developers learn testing by example (copy, paste, and tweak until it works). That approach makes tests pass, but it rarely makes testing fun...
Read Post
October 25, 2025
Making the Invisible Visible
Dashboards are all green. Logs are endless. Customers are angry. You know something’s wrong but you can’t see where...
Read Post
October 8, 2025
Don’t Let Your Java Debugger Fool You
If you’ve ever set a breakpoint in your IDE and stepped through some Java code, you might have assumed you were literally running that source line by line...
Read Post
September 6, 2025
Defending Against XSS in React and JSP
Cross-Site Scripting (XSS) is one of the most common and dangerous vulnerabilities in web applications...
Read Post
August 16, 2025
Staying on Track When a Ticket Gets Complicated
Here are some simple and helpful tips to keep moving when a ticket starts dragging on...
Read Post
August 5, 2025
Don't Mix Up Polling and Pooling
In system design, two similar-sounding terms often cause confusion...
Read Post
July 23, 2025
How to Scale Spring Boot for High Concurrency
Should you increase the Tomcat thread pool size? How do you determine the right number of threads?...
Read Post
July 4, 2025
How Threads Share Code in Java
In this post, we answer a key question: how do threads work with a singleton instance in Java?...
Read Post
June 28, 2025
Java’s Mission: No More Excuses
Java isn't trying to be the flashiest language or lead every trend — it’s focused on one strategic goal: removing every valid excuse not to use it...
Read Post
May 23, 2025
Java Concurrency 5 - How Virtual Threads Make Java Concurrency Effortless
Virtual threads let you write code in a familiar, blocking style — without managing callbacks or chaining...
Read Post
May 17, 2025
Java Concurrency 4 - Goodbye Threads, Hello Streams!
We’ll dive into reactive concurrency in Java with Project Reactor and explore how it transforms the way we handle asynchronous, concurrent tasks—especially in high-throughput systems...
Read Post
May 4, 2025
Java Generics: A Compile-Time Gift With a Runtime Disguise
Generics weren't added to Java just for nicer-looking syntax. They were introduced to solve real problems — but with very real trade-offs...
Read Post
May 3, 2025
Java Concurrency 3 - Mastering CompletableFuture
In my latest post, I walk through CompletableFuture, how it compares to JavaScript's Promise, and show a real-world example of handling file imports asynchronously...
Read Post
April 26, 2025
Mock vs Spy in Mockito — Never Ask Again
Ever mixed up @Mock and @Spy in your unit tests? You're not alone. Here, I explain the difference with a memory trick you'll never forget...
Read Post
April 12, 2025
Java Concurrency 2 - Multithreading in Tomcat
We look at how Apache Tomcat, a popular Java HTTP server, uses thread pools internally to manage concurrent HTTP requests...
Read Post
April 6, 2025
Java Concurrency 1 - ExecutorService and ForkJoinPool
When building concurrent applications in Java, managing threads properly is crucial. Spawning raw threads by new Thread(...) works for simple cases, but it's inefficient and hard to scale...
Read Post
April 1, 2025
How Web Servers Handle Logging Efficiently
Have you ever wondered how web servers generate log files so quickly, even though writing to files is known to be an expensive operation?...
Read Post
February 22, 2025
Don’t Mix Up "Aggregates" and "Aggregators"!
While they may sound similar, they serve entirely different purposes...
Read Post
February 16, 2025
Setting Up Azure AD as a Federated Identity Provider
Imagine you run a growing organization where employees need access to AWS services...
Read
Post
February 8, 2025
Using Nginx to Front Both Backend and Frontend
When setting up a web application with a Spring Boot backend and a React frontend, you can choose to deploy
them directly or use Nginx as a reverse proxy...
Read Post
January 25, 2025
PostgreSQL Transactions - Part 2
How transactions, isolation levels, locking mechanisms ensures data consistency, reliability, and optimal
performance in database operations...
Read Post
January 19, 2025
PostgreSQL Transactions - Part 1
When we think about database transactions, the focus is often on INSERT, UPDATE, or DELETE queries. But did
you know that...
Read Post
December 15, 2024
Stay Friends with the Console
IntelliJ makes running applications effortless, but it often abstracts the underlying commands developers
should understand...
Read Post
December 6, 2024
Invisible Ownership Subtasks
The best developers recognize that visible subtasks are only part of the picture. There's another category...
Read Post
November 30, 2024
Correlating Bamboo Concepts with AWS ECS
When managing CI/CD pipelines with Atlassian Bamboo and deploying containerized workloads using AWS Elastic
Container Service...
Read Post
November 27, 2024
How Singleton Components Work with Thread Pools
Spring’s component model is built on the principle of singletons for many of its core beans, ensuring
efficiency and consistency across your application...
Read Post
November 23, 2024
How HashMap Handles Collisions
Collisions in a HashMap occur when multiple keys hash to the same bucket index...
Read Post
November 19, 2024
Method-Level Authorization in Spring Security
In this post, we'll explore how to use Spring Security to control access both at the endpoint and method
level using a sample project...
Read Post
November 16, 2024