The Most Dangerous Code Is the Code That Assumes

Every system has invariants—conditions that must always be true. The most dangerous ones are the implicit invariants that nobody writes down.

July 29, 2026 ·  3 min read  · Tags: architecture, rails, sidekiq, engineering, system-design

AISpec: RSpec for AI Behavior, Not AI Outputs

LLM outputs vary, but system rules shouldn't. AISpec brings invariant contracts, confidence intervals, and Rails-native testing to your LLM pipeline.

July 26, 2026 ·  6 min read  · Tags: ruby, rails, ai-engineering, testing, aispec, llm

Why AI Doesn't Replace Software Architecture — It Makes It More Valuable

AI can generate a thousand lines of code in a minute. It still can't tell you whether those lines belong in your system. As code becomes abundant, software architecture becomes the scarce resource.

July 25, 2026 ·  6 min read  · Tags: ai-engineering, systems-thinking, software-design

The Two Sources of Noise Every LLM Evaluation System Must Handle

LLM evaluation is probabilistic. If you treat your LLM judges like unit tests, you'll chase ghosts. Here is how to separate the two sources of noise and build an evaluation pipeline you can trust.

July 22, 2026 ·  4 min read  · Tags: llm, testing, evaluation, reliability, architecture

The Outbox Pattern Isn't Free

The Outbox Pattern solves the dual-write problem, but it isn't free. From database write amplification to retention strategies and duplicate execution, here are the real costs of transactional reliability.

July 8, 2026 ·  5 min read  · Tags: patterns, distributed-systems, rails, reliability, architecture

Why Performance Improvements Compound

Mature systems rarely waste time inside algorithms. They waste time moving data between them—and that is why performance fixes compound.

July 6, 2026 ·  3 min read  · Tags: performance, systems, engineering, optimization

Stop Sending Embeddings as JSON: A Faster Binary Serialization Pattern for AI APIs

JSON is one of the most expensive ways to move embedding vectors. Here's how switching to binary Base64 float buffers cut payload size by 75% and reduced serialization latency by 98%.

July 2, 2026 ·  8 min read  · Tags: performance, serialization, rails, binary, network

More Threads, Less Throughput: When AI Servers Fight the Scheduler

When you need more throughput, adding threads seems obvious. But under the wrong conditions, concurrency can grind your system to a halt. Here is why your AI server is fighting the scheduler—and how to fix it.

June 27, 2026 ·  8 min read  · Tags: concurrency, performance, optimization, system

Why Most Technical Migrations Fail (And How to Run Them)

Every senior engineer has lived through a migration that got 80% finished, stalled for a year, and left the team maintaining two versions of the same system forever. Migrations rarely fail because the new architecture is bad; they fail because of incorrect system boundaries, lack of dual-writing strategy, and ignoring human momentum.

June 26, 2026 ·  3 min read  · Tags: leadership, collaboration, modularity, migrations

Lessons from Leading a Production Incident (Triage under Pressure)

When the database CPU spikes to 99% or your background job queue has a backlog of 200,000 tasks, your engineering skills are only half the battle. Leadership during an incident is about command, communication, and systematic triage. Here is what I've learned from managing production fires.

June 20, 2026 ·  3 min read  · Tags: leadership, operations, observability, resilience