Skip to content
Independent Java Engineering Writing

Understand the Code
Underneath the Abstraction

Long-form Java writing from code that actually runs — chess engine internals, search algorithms, and the JVM exceptions that catch everyone out. For engineers who'd rather understand than skim.

12 Articles
2 Series
100% Free to Read
read & learn

Latest Posts

Tutorials, deep dives and field notes on languages, tools and the work of shipping software

python javascript rust go sql typescript tooling
A developer comparing the class file version stamped into a compiled Java class against the highest version the runtime JVM will accept
Aug 16, 2026 Engineering 14 min read

UnsupportedClassVersionError: Fixing Java Version Mismatches

Same LinkageError family, opposite problem — the class is right there and the JVM refuses to read it. What 61.0 and 65.0 actually mean, the three build topologies that open the gap, and why bumping -target is not a fix.

Read Article
A developer reading a Java heap dump, tracing a large retained size back to the single object holding it
Aug 11, 2026 Engineering 15 min read

OutOfMemoryError: Java Heap Space — Diagnosing With Heap Dumps

The line in the stack trace is a bystander — whoever allocated last pays for everyone else. Which OOME message you got, three real causes, how to read a dump with dominator trees and retained size, and why -Xmx belongs last.

Read Article
A developer reading a long truncated Java stack trace, looking for the small group of frames that repeats all the way down
Aug 6, 2026 Engineering 13 min read

StackOverflowError: Recursion Depth, JVM Stack Size, and How to Debug It

The repeating group of frames is the diagnosis, not the length of the trace. What a thread stack actually holds, why "how deep can I recurse" has no fixed answer, three real causes, and why raising -Xss belongs last.

Read Article
A developer tracing a missing class through the classpath, comparing the jar that was built against the jar that was deployed
Aug 1, 2026 Engineering 13 min read

ClassNotFoundException vs NoClassDefFoundError: The Difference Actually Matters

One is a checked exception you asked for, the other is an Error the JVM hands you — and "Could not initialize class" does not mean the class is missing at all. The three loading phases, three real causes, and the fixes with their costs.

Read Article
A Java developer debugging a for-loop that modifies an ArrayList while an iterator over it is still live
Jul 27, 2026 Engineering 12 min read

ConcurrentModificationException: Why Your For-Loop Breaks and Four Ways to Fix It

It has nothing to do with threads, and removing the second-to-last element does not throw at all — it silently skips the last one. The modCount machinery, three real causes, and four fixes with their actual costs.

Read Article
A developer reading a helpful NullPointerException message in Java 21 back to the chained call that threw it
Jul 22, 2026 Engineering 11 min read

NullPointerException in Java 21: Reading the Helpful Message

JEP 358 turned the emptiest stack trace in Java into a sentence. The grammar of that sentence, three production causes with the exact message each one throws, and the places it still leaves you stranded.

Read Article
A developer deploying a Java chess engine as a Lichess bot over the streaming HTTP API
Jul 17, 2026 Engineering 15 min read

Deploying a Lichess Bot: BOT Account, API Streaming, and What Broke

The engine played fine offline, then sat still in its first live game while the clock ran out. The irreversible BOT upgrade, two NDJSON streams, a systemd unit, and eight failures that only appear against real opponents.

Read Article
A developer implementing the UCI protocol for a Java chess engine over stdin and stdout
Jul 12, 2026 Engineering 14 min read

Implementing the UCI Protocol in Plain Java (No Frameworks)

Move generation, search and evaluation all worked, and Arena still showed the engine as not responding. The handshake, the position and go parsers, the worker thread that keeps stop readable, and the missing flush that lost a game on time.

Read Article
A developer writing piece-square tables and a tapered evaluation function for a Java chess engine
Jul 7, 2026 Engineering 15 min read

Writing a Chess Evaluation Function: Material, Piece-Square Tables, Mobility

A correct search that only counts material shuffles rooks, refuses to castle and parks knights on the rim. Piece values, 64 numbers per piece type, a midgame-to-endgame taper, a mobility term, and the symmetry test that caught three bugs in one assertion.

Read Article
A developer comparing measured minimax and alpha-beta node counts in a Java chess engine
Jul 2, 2026 Engineering 13 min read

Minimax to Alpha-Beta: Measuring the Actual Node Reduction

A correct move generator still plays random chess. So I wrote minimax, added alpha-beta, and counted every node instead of trusting the textbook square root. Move ordering turned out to do almost nothing from the start position and almost everything in a real midgame.

Read Article
A developer implementing en passant, castling rights and the halfmove clock in a Java chess engine
Jun 27, 2026 Engineering 9 min read

Handling En Passant, Castling Rights, and the 50-Move Rule Correctly

Three rules every tutorial hand-waves. They are not hard to understand, they are hard to get right, because none of them live on the board. A stale en passant square, rights that outlived a captured rook, and a clock counting the wrong thing.

Read Article
A developer debugging chess move generation against published perft node counts in Java
Jun 22, 2026 Engineering 11 min read

Perft Testing: How I Found 4 Move-Generation Bugs in One Afternoon

My engine played legal-looking chess, and legal-looking is not legal. Perft gave me a number that was either right or wrong, and perft divide told me exactly where the en passant, castling, promotion and file-wrapping bugs were hiding.

Read Article
A developer working through magic bitboard lookup tables and occupancy masks for a Java chess engine
Jun 17, 2026 Engineering 14 min read

Magic Bitboards in Java: What Finally Made Them Click

I closed the tab the first time I read about magic bitboards. Months later the same page made sense. The intuition behind occupancy masks and blockers, concise Java code, and every bug that cost me an evening.

Read Article
A developer working through rook, bishop and queen move generation for a Java chess engine
Jun 12, 2026 Engineering 14 min read

Generating Sliding Piece Moves Without Magic Bitboards (And Why I Started There)

Every resource jumped straight to magic bitboards. I skipped them and wrote the plain ray-walking generator instead — the direction arrays, the blocker logic, the bugs that ate two weekends, and why correctness beats clever optimisation.

Read Article
A developer working through the bitwise logic of representing a chess board in 64 bits
Jun 7, 2026 Engineering 12 min read

Bitboards Explained: Representing a Chess Board in 64 Bits

A chess board has 64 squares; a Java long has 64 bits. The explanation I wish I'd had — why engines switch from arrays to bitboards, the bitwise tricks, move generation, and the bugs that taught me how they really work.

Read Article
A developer at a laptop building a chess engine in Java instead of another CRUD application
Jun 2, 2026 Engineering 13 min read

Why I Built a Chess Engine in Java Instead of Another CRUD App

After a stack of Todo apps and inventory systems, I built a chess engine in Java. The design decisions, the minimax and alpha-beta code, the brutal bugs, and what a genuinely hard project actually teaches you.

Read Article
Get In Touch

Contact Us

Have questions? We'd love to hear from you!

Email Us

contact.us.GetUp@gmail.com

Visit Us

Bangalore, India

Follow on WhatsApp for Updates!