-
Software Development

Linearizability vs Serializability: The Distinction Most Engineers Conflate
Two words, one letter apart in spirit, and yet they describe different promises. Teams often use them as synonyms in…
Read More » -
Software Development

Zero-Downtime Migrations: The Expand and Contract Pattern with Flyway or Liquibase
Picture a normal Tuesday deploy. Your new service version starts, your old one is still serving traffic, and a migration…
Read More » -
Core Java

Kotlin Coroutines vs Virtual Threads: Two Answers to Cheap Concurrency
Every few months, someone on a team asks the same question: now that Java has virtual threads, do we still…
Read More » -
Core Java

In-Process Inference vs Calling a Service: ONNX Runtime and DJL Against a Remote Model
Every Java team that adds a machine learning model faces the same early choice. Do you load the model inside…
Read More » -
Core Java

Time Zones as a Data Problem: tzdata Updates, java.time, and the Bugs That Survive
Most developers treat time zones as arithmetic. In reality, they are laws, and laws change on short notice. That makes…
Read More » -
Software Development

The Outbox Pattern and Change Data Capture: Solving the Dual-Write Problem with Debezium
Saving an order and announcing it to the rest of your system sounds like one job. In reality, it is…
Read More » -
Core Java

Vector Search for Java Developers: HNSW Intuition and pgvector in Practice
Search used to mean matching words. Today it often means matching meaning, and that is where vectors come in. An…
Read More » -
Core Java

The Disruptor and Mechanical Sympathy: Ring Buffers Against Queues
Most Java developers reach for a queue whenever two threads need to talk. It feels natural, and it usually works…
Read More » -
Core Java

Coordinated Omission: Why Your Latency Benchmark Flatters You
Your load test says the 99th percentile is fine. Meanwhile, a thousand requests quietly vanished from the results. The Benchmark…
Read More »

