LVL 12 · JAVA DEV

Hi, I'm Vitalii 👋

I'm a Java developer who loves new features and new trends. I learn something new, try it for real, and write about it here. When I'm not writing backend code, I make games.

☕ Java 🤖 AI 🎮 Games 🇺🇦 Ukraine 🇬🇧 UK

RAG in Java with LangChain4j: Teaching a Local LLM About a Company That Doesn’t Exist

Chunks, vectors, a bit of geometry, and no magic. Everything runs on your laptop. Ask an LLM “When does the nightly settlement batch run at Harbourline Payments?” and one of two things happens. The polite model says it doesn’t know. The confident model says “Usually around midnight!” with the energy of a student who didn’t read the book but really wants a good mark. Both are fair, because Harbourline Payments doesn’t exist. I made it up. It’s a fictional company with a fictional engineering handbook: founders, services, deploy rules, on-call pay, and even a famous incident called “the Double Tap”. No model has seen this text during training. ...

October 17, 2026 · 12 min · Vitalii Sukach

Building an MCP Server in Java with Spring AI: Let Claude Code Use Your Database Without Seeing a Password

Four annotated methods, one security config, and no JSON-RPC code of your own. In my previous article I built an MCP server from scratch in Python. I wrote the JSON-RPC 2.0 message handling, declared tool schemas by hand and wired up the STDIO transport myself. It’s a good way to learn how the protocol works on the wire. Python isn’t the only option, though. Most of the systems I work on are Java and Spring, and that’s where the data lives. So this time I built the same kind of server in Java. ...

September 25, 2026 · 10 min · Vitalii Sukach

The Java Memory Model, Explained Without the Headache

What actually happens to your data between two threads — and the small set of tools that let you control it Ask ten Java developers what “the Java Memory Model” means and you’ll get two different answers. Half of them will draw a box called Heap and another called Stack. The other half will start talking about volatile and happens-before. Both groups are talking about something real, but only the second group is talking about the actual Java Memory Model (JMM). The first group is describing the runtime data areas — where objects physically live. ...

September 3, 2026 · 9 min · Vitalii Sukach

Your DELETE + INSERT Is Burning PostgreSQL’s CPU. Here’s What’s Actually Happening on the Page.

A deep dive into MVCC, heap pages, vacuum, and what to do when you have billions of rows to update. The symptom You have a table that stores user state. Something happens — an event arrives — and your code does the obvious thing: BEGIN; DELETE FROM user_state WHERE user_id = $1; INSERT INTO user_state (user_id, state, score, updated_at) VALUES ($1, $2, $3, now()); COMMIT; It’s clean. It’s idempotent. It doesn’t require you to think about which columns changed. For a long time it works fine. ...

August 17, 2026 · 23 min · Vitalii Sukach

DateTime Handling in Java and PostgreSQL: A Practical Guide

Everything I wish someone had told me before I stored a meeting time in a timestamp column. There is a specific kind of bug that only shows up in production, only in October, and only for users in one country. It gets closed as “not reproducible” twice before someone finally sits down with a coffee and reads the column definition. It is almost always a datetime bug. The frustrating part is that both Java and PostgreSQL have excellent date/time support. java.time is one of the best-designed APIs in the JDK. PostgreSQL’s temporal types are precise and well documented. The bugs happen at the seam — in the assumptions each side makes about what the other means, and in the two or three words in the type names that mean the opposite of what you’d guess. ...

August 15, 2026 · 16 min · Vitalii Sukach

Debugging Postgres: The System Tables That Actually Tell You What’s Wrong

When a migration hangs, a query slows to a crawl, or a deploy just sits there, most people reach for the same first move: kill it and try again. That works about as often as it doesn’t. Postgres already knows what’s wrong — it’s just keeping the answer in a handful of system catalogs and stats views that almost nobody looks at until things are already on fire. This is a walkthrough of the tables I actually check, in the order I check them, when something breaks — with a running example: a migration that adds a NOT NULL column and backfills it on a 20-million-row orders table, which has been “running” for 25 minutes with no sign of finishing. ...

August 2, 2026 · 7 min · Vitalii Sukach

From Source to Running JVM: How Gradle Builds Your Java Application

Build phases, task graphs, dependency resolution, and what actually happens when the JVM opens your JAR You type gradle build, wait a few seconds, and out comes a JAR. Most Java developers use this pipeline every day without ever looking inside it. But when a build gets slow, a dependency conflict appears, or a NoClassDefFoundError shows up in production at 2 AM, understanding the machinery underneath is the difference between guessing and fixing. ...

July 19, 2026 · 8 min · Vitalii Sukach

Claude Skills: The Reusable Knowledge Modules That Make AI Truly Powerful

How Claude loads specialised instructions on demand — and how you can write your own to transform workflows forever. Every time you open Claude and ask it to create a Word document, build a data analysis pipeline, or write presentation slides — something invisible happens first. Claude scans a directory of skills, finds the most relevant one, reads it, and only then starts working. This system is called Claude Skills. It is one of the most underappreciated features in the entire Claude ecosystem. And once you understand how it works, you will see why it changes everything about how you build AI-powered workflows. ...

June 21, 2026 · 9 min · Vitalii Sukach

MCP: The Protocol That Finally Taught AI to Stop Being Useless

A beginner’s guide to Model Context Protocol — the thing that lets your AI assistant actually do stuff, not just talk about doing stuff. Picture this: you’ve got the most brilliant assistant in the world. Knows everything. Speaks 50 languages. Can explain quantum physics and write poetry at the same time. But here’s the catch — they’re locked in a glass box. They can see your computer screen. They can describe what they’d do if they could reach it. But touch anything? Nope. Read a file? Uh-uh. Check your calendar? Dream on. ...

June 15, 2026 · 17 min · Vitalii Sukach

Claude Code: The Complete Guide Nobody Wrote

The Agentic Loop (How Claude Actually Thinks) Before anything else, you need to understand what makes Claude Code different from your IDE’s autocomplete. Autocomplete guesses the next word. Claude Code runs a loop — it gathers context, takes action, verifies results, then repeats until the task is done. Think of it less like a text editor feature and more like a developer who works asynchronously while you make coffee. ...

June 2, 2026 · 9 min · Vitalii Sukach