Product
Platform Agentic Code Scanner Unified Runner Tomosu Agents Indexes Solutions
Get Started
Scan your repo VS Code plugin Tomosu MCP GitHub App CodeRabbit FAQ
Resources
Case Studies Governance Impact TCO Calculator Download / Free Trial
Company
About Blog Production Reliability series Production Debugging guides AI Observability News Contact Request Demo →
Field notes

Notes from the merge gate.

Research, observations, and design partner conversations
AI Reliability · Definition

What AI Reliability Actually Means

AI reliability has two halves: whether a model, LLM app or agent behaves correctly at runtime, and whether the code an agent writes survives production. Definitions, the SLIs to track, what uptime misses, and how to measure AI-authored changes.

Read
Production Debugging · Database pools

Connection Leak vs. Pool Exhaustion: How to Tell the Difference

Connection leak vs pool exhaustion: both end in the same timeout, but a leak ratchets in-use connections up until restart while exhaustion tracks load. How to tell them apart with pool counters and database sessions in Java, Node, Python, and Go.

Read
Production Debugging · Database indexes

Missing Database Indexes in a PR: What Reviewers Should Check

A missing database index rarely shows in a diff: it hides behind a new filter, sort, join, or background job that passes tests on small tables. What reviewers should check, the EXPLAIN evidence to ask for, and how to add the index safely.

Read
Production Debugging · Database queries

N+1 Queries That Pass Tests but Fail Under Production Traffic

N+1 queries pass tests because a one-row fixture makes them look identical to correct code. Why they fail under production traffic, how to catch them with scaling tests and strict loading, and how to fix them without over-fetching.

Read
Production Debugging · Node.js memory

Node.js Memory Keeps Growing in Production: A Step-by-Step Investigation

When Node.js memory keeps growing in production, the raw graph is not proof of a leak. Learn to read the post-GC heap floor, find which memory layer grows, compare three heap snapshots, and follow the retainer chain to the code.

Read
Production Debugging · Java resources

Resource Leaks in Java Services: Connections, Streams, Threads, and Executors

Java resource leaks exhaust pool slots, file descriptors, and threads long before the heap looks unhealthy. See how to spot the counter that ratchets with uptime, trace it to code, and fix connections, streams, threads, and executors for good.

Read
Production Debugging · Concurrency

Race Conditions That Only Appear Under Production Load

Race conditions that only appear under production load come from hot keys, longer read-to-write windows, retries, and replicas that tests never create. Learn how to reproduce an intermittent concurrency failure on purpose and remove it with atomic updates.

Read
Production Debugging · Concurrency

Why “Check Then Insert” Creates Duplicate Records

Check then insert creates duplicate records when two requests pass the existence check before either one writes. Learn why transactions and SELECT FOR UPDATE miss it, and how unique constraints, upserts, and targeted locks fix it.

Read
Production Debugging · Queues

SQS or Kafka Message Processed Twice: Designing Safe Consumers

An SQS or Kafka message processed twice is normal at-least-once delivery, not a broker bug. See how visibility timeouts, crashes, and rebalances cause duplicates, and how to build idempotent consumers that stay correct.

Read
Production Debugging · Queues

Dead-Letter Queue Keeps Growing: Where to Start

A dead-letter queue that keeps growing is a symptom, and redriving first usually refills it. Learn to read the growth shape, sample messages safely, classify the failure, and redrive only after the cause is fixed.

Read
Production Debugging · API timeouts

API Timeouts After Deployment: A Practical Triage Checklist

API timeouts after deployment need mitigation first and diagnosis second. This triage checklist shows when to roll back, how to find where the time goes, and how to separate new code, resource starvation, contention, shared causes, and config drift.

Read
Production Debugging · API timeouts

How to Set Timeouts Across a Chain of Microservices

Timeouts across microservices only work when they are nested and each hop gives up before its caller. Learn how to build a timeout budget from the edge inward, propagate deadlines over gRPC or HTTP, and fit retries and fan-out inside it.

Read
Production Debugging · API resilience

Circuit Breaker vs. Retry vs. Load Shedding: Which Failure Needs Which Control?

Circuit breaker vs. retry vs. load shedding is a question about the failure, not the pattern. Learn which control fits a brief blip, a failing dependency, or an overloaded server, and how to combine them without making an incident worse.

Read
Production Debugging · Caching

Stale Data After a Release: How to Debug Cache Invalidation

Stale data after a release usually means a cache the new code no longer invalidates. Find which layer answered (CDN, Redis, per-pod cache, replica), then the write path, key change, or evict-before-commit race that broke invalidation.

Read
Production Debugging · Deployment

A PR Passed CI but Broke Production: What Did the Tests Miss?

When a PR passed CI but broke production, the failure usually lives in something CI does not model: real data, volume, concurrency, config, dependencies, or deploy order. Classify the escape, then add the cheapest check that can see it.

Read
Production Debugging · Deployment

How to Decide Whether to Roll Back a Release

How to decide whether to roll back a release during an incident: check that impact started with the deploy, that the old version can run on data the new one wrote, and whether a flag or traffic shift is a narrower lever.

Read
Production Debugging · Incident response

How to Write an RCA That Connects the Trigger, Code Path, and User Impact

How to write an RCA that reads as a causal chain: the trigger, the code path that turned it into a failure, and measured user impact. Includes a copyable root cause analysis template, a worked example, and action items that break a named link.

Read
Production Debugging · Code review

AI Code Review False Positives: How to Verify a Reliability Finding

Most AI code review false positives on reliability come from context outside the diff. Verify a finding in six steps: restate the claim, check library semantics, reachability, and guards elsewhere, then link the evidence that settles it.

Read
Production Debugging · Code review

What a Repository-Wide Review Finds That a PR Diff Misses

A PR diff shows changed lines, not the callers, shared config, and sibling code that decide whether they are safe. What a repository-wide review finds that a PR diff misses, and how to classify new, activated, and pre-existing findings.

Read
Production Debugging · Governance

Should a Reliability Finding Block a Merge? A Severity Framework

Should a reliability finding block a merge? Only when the PR owns it, the evidence checks out, and its severity is high. A four-level framework for block, override, warn, or track, with overrides, CI enforcement, and a report-only rollout.

Read
Production Debugging · HikariCP

HikariCP “Connection Is Not Available, Request Timed Out”: How to Find the Real Cause

The same pool timeout comes from a leak, a slow query, a long transaction, a pool deadlock, a connection creation failure, or an undersized pool. The evidence that tells them apart, and the code paths to map before changing a setting.

Read
Production Debugging · Kubernetes memory

Kubernetes OOMKilled: Memory Leak, Memory Limit, or Something Else?

OOMKilled tells you where a container died, not what used the memory. How to tell a leak from a load spike, off-heap or tmpfs memory, eviction, or a limit that is simply too low, and why your dashboard said memory looked fine.

Read
Production Debugging · API latency

Why an API Is Slow in Production but Fast Locally

The same code runs against bigger, skewed data, different plans, real networks, and real concurrency. A trace-first workflow for finding why an API or database query is slow only in production, from plan flips and N+1 round trips to pool, lock, and CPU contention.

Read
Production Debugging · Webhooks

How to Prevent Duplicate Webhook Processing and Duplicate Side Effects

Webhooks arrive at least once, so duplicates are normal; they become harmful when a handler ships, pays, or emails before it records the event. Insert-first dedupe, fast acks, idempotency keys on every side effect, and a PR review that finds the missing boundary.

Read
Production Debugging · Retry storms

Retries Can Cause an Outage: How to Spot a Retry Storm Before Merge

A three-line retry decorator can turn one failing call into 27 once it sits on top of the gateway and client retries already there. The multiplication math, backoff with jitter, retry budgets and deadlines, and a checklist for reviewing a PR before merge.

Read
Production Debugging · Suspect commits

Which Commit Caused the Production Incident? A Practical Investigation Workflow

Work from time to code: pin the first bad time, map it to deploy SHAs, list the commits in the window, and keep the PRs that touch the failing path. Then confirm the top suspect with a revert, a flag flip, or git bisect run.

Read
Production Debugging · Launch readiness

Production Readiness Checklist for a Backend Service

A free, downloadable production readiness checklist for backend services: 51 checkable items across ownership, observability, reliability, dependencies, data, security, deployment, capacity, and runbooks, each with why it matters and the evidence to ask for.

Read
Production Debugging · Code review

How to Review a Pull Request for Production Reliability Risks

Most incident-causing pull requests were reviewed and green in CI. A production code review checklist for spotting changes to resource use, failure handling, and downstream load in a diff, with an annotated example and a PR template.

Read
Production Debugging · Incident correlation

How to Correlate Logs, Traces, and a Code Change During an Incident

A failing request, a pile of logs, and today’s deploys only connect through shared keys. Put trace ids in logs, stamp the git SHA into service.version, and follow the join chain from error to pull request to blast radius.

Read
Production Debugging · Caching

Cache Stampede: Why a Healthy Cache Can Overload Your Database

A hot key expires, hundreds of requests miss at once, and the database runs the same query hundreds of times. How to prevent a cache stampede with single-flight, Redis SET NX PX locks, TTL jitter, soft TTLs, and XFetch.

Read
Production Reliability · Definition

What Is Production Reliability in Software Engineering?

Tests passing, CI green, and review approved each answer a narrower question than production does. What production reliability means at the level of a single change, and how it differs from DORA, error budgets, code review, and observability.

Read
Production Reliability · Comparison

Production Reliability vs Code Review

Code review asks whether a change looks correct. Production reliability asks what it could mean for a running system. A small, correct diff to a shared library shows why you want both answers.

Read
Production Reliability · Observability

Production Reliability vs Observability

A system can be fully observable and still ship a change nobody assessed. Where dashboards, logs, and traces stop, where change level reliability starts, and the feedback loop between them.

Read
Production Reliability · Static analysis

Production Reliability vs Static Analysis

A change can compile, pass every rule, and still sit on a critical path with a history of incidents. What static analysis sees, what it can't see from source alone, and where the two meet.

Read
Production Reliability · How-to

How to Assess Production Reliability Before Deployment

A pull request can pass CI and review and still cause a production problem. Six areas to assess before deployment, scope, dependencies, verification, production behavior, history, and rollback, and how to turn uncertainty into an action.

Read
Production Reliability · Measurement

How to Measure Software Change Reliability

There's no universal formula for the reliability of a single change. Seven signals you can measure before and after deployment, where a summary score helps, and what makes a reliability measurement trustworthy.

Read
Production Reliability · Pre merge

Pre Merge Reliability Analysis: How to Evaluate a Change Before Merge

Tests, static analysis, and review answer different questions. How to judge a change's scope, dependencies, production behavior, history, and blast radius while you can still change it, split it, or hold it back.

Read
Production Reliability · Blast radius

How to Assess the Blast Radius of a Code Change

A two line change to a shared library can reach dozens of services. How to map dependencies, production usage, history, and deployment conditions to see where a change can travel before it merges.

Read
Production Reliability · Pull requests

How to Identify High Risk Pull Requests

A five line change to a shared auth library can deserve more scrutiny than a 500 line change to an internal tool. Ten signals that separate high risk pull requests from routine ones.

Read
Production Reliability · Prioritization

How to Prioritize Risky Pull Requests

Diff size is the easiest signal and the least useful one. How to weigh impact, evidence, uncertainty, and deployment control to decide which PRs need more attention, and what to do about each.

Read
Production Reliability · Change risk

Change Risk Management in Software Engineering

Software changes create risk because they change something already running. The signals that matter, a practical workflow, and why the response should match the evidence rather than the diff size.

Read
Review · Distributed teams

The Best Code Review Tools for Distributed Teams

Four layers, four different questions, AI review, reviewer routing, merge automation, and production risk analysis. Most comparisons treat them as one category, which is why they produce a ranking that doesn't help you choose.

Read
Governance · Buyer's guide

How to Evaluate an AI Governance Layer: A Buyer's Checklist

Seven questions to ask any vendor, including us. Where in the lifecycle the decision happens, whether it explains why, whether it survives being wrong, and what it costs you to not have it.

Read
Observability · Definition

What Is AI Observability? A Definition for Engineers

An AI system can return 200 and still be wrong. What to capture across prompts, tool calls, retrieved context, and agent decisions, and the point where observability stops and a merge decision starts.

Read
Observability · Tooling

LLM Observability Tools Compared: Datadog, Arize, and Langfuse

A large shared centre and three different edges. What each one actually tracks, which stack each one suits, and the question none of the three were built to answer.

Read
AI Agents · Observability

Why Agentic AI Needs a Different Kind of Observability

A single LLM call has one output. An agent has a sequence of decisions, and the failure is rarely at the step where it became visible. Plus the gap between an agent's summary of its run and the logs of it.

Read
Evaluation · Tooling

The Best AI Evaluation Tools for Production in 2026

Evidently, Galileo, Arize, DeepEval, and OpenAI Evals, sorted by what a failing eval should actually do. Plus the six things a perfect eval score still doesn't tell you about shipping the change.

Read
Testing · AI Agents

What a Flaky Test Actually Costs You When AI Wrote the Code

A person sees a flaky test and investigates. An agent optimizing for “make the suite green” can retry it, weaken the assertion, or delete it. Three routes to green, and the build status looks identical for all of them.

Read
Cost · Risk

The Real Risk of AI Coding Assistants

Token spend is easy to instrument, so it gets a dashboard. Revert rate, review time, and incidents traced to agent runs are harder, so they don't. What to measure on the other side of the ledger.

Read
Incident response · AI Agents

The Postmortem Template for Incidents an AI Agent Caused

A free template built on the standard postmortem format, plus the fields you need when an agent made the change, execution path, tool-calling trace, human checkpoint, and whether the agent's own account matches the logs.

Read
Review · Automation

Code Review Automation Fixed the Wrong Problem

Time remaining in code review is up 441.5% year over year and PRs merged with no review at all are up 31.3%. Automating a comment is not the same as automating a review, and the constraint was never the comment.

Read
Integrations · Observability

The Code Review Observability Checklist Most Teams Skip

Pulling production signal into a PR comment is a good instinct. The pitfalls show up after the demo, stale service maps, one-way sync, alert-shaped noise, attribution collisions in a monorepo. Six things to verify before you turn the integration on.

Read
Review · AI Code

AI-Generated Code Needs a Different Kind of Pre-Screening

Code review assumed a human wrote it. AI-generated code fails differently, confident, clean, and plausible right up until it isn't. What pre-screening has to catch, why it's a different job from review, and why the teams getting this right review unevenly on purpose.

Read
Reliability · Metrics

MTTR Is the Wrong Number to Stare At

MTTR tells you how long an incident lasted, not why it happened or whether the fix addressed the cause. Faster rollbacks make the dashboard look great while the same class of bug keeps resurfacing. What automated root cause analysis has to do to be worth anything, and the metric that beats MTTR: recurrence.

Read
Validation · Supabase

Stop Having Your Customer Find Your Bugs

A validated study on the open-source Supabase repository: Tomosu produced 114 reliability findings, and 59 corresponded to defect classes already documented in public GitHub issues. Cron was the most failure-concentrated feature, three merged fixes for one header-handling bug over three months. Evidence that blast radius, not line count, should decide what a change must prove before it merges.

Read
New Category · AI Era

The Missing Layer in Modern Software Engineering: AI Governance

Every wave of software delivery removed a bottleneck, cloud, CI/CD, observability, AI coding. AI removed the last one. What is left is the confidence to govern the output. Software Governance is the new category above the pipeline: it orchestrates every tool's intelligence into one production decision.

Read
Governance · Strategy

A Signal Is Not a Gate

Harness acquired Codecov to turn coverage into enforceable decisions. The problem: a signal and a gate are structurally different objects, and no acquisition closes the gap. The next decade of software delivery hinges on getting clear about which is which.

Read
Industry · Observability

New Relic May See It. Tomosu Will Decide It.

New Relic launched AI Coding Observability and confirmed what the merge-gate category has been arguing for a year. Visibility is half the answer. Tomosu has been building the other half.

Read
Operations · Leadership

Production Resilience Is the Thing You Stopped Buying When You Bought Velocity

The velocity dashboard looks great. The on-call rotation is on fire. These two things are now happening at the same time in roughly every enterprise that has adopted autonomous coding agents at scale.

Read
Architecture · Strategy

When the Agent Has an OS and Production Has No Gate, the Gate Is the Product

RTX Spark and Bedrock AgentCore ship substrate governance. The harder problem is what governs the artifact after it crosses a boundary. Every substrate converges at one universal layer: the merge gate you own.

Read
Research · Risk

The Verification Debt Nobody Put on the Balance Sheet

AI agents now initiate 96% of the work in collaborator-driven repos. Almost none of it is governed by anything other than a human glancing at a diff. The gap between those two numbers is where risk quietly accumulates.

Read
Research

The Agency-Governance Split Is Real, and the Audit Trail Wasn't Designed for It

Agentic pull requests now constitute a substantial share of code authoring. Terminal merge approval remains almost exclusively human. The audit infrastructure most enterprises rely on was built before that split existed.

Read
Architecture

Two Halves of a Merge Gate, and the Layer That Sits On Top

Credo AI argues for policy-as-code upstream. Qodo argues for diff-aware analysis at the gate. Both are right. Neither captures the human governance decision itself, and that layer needs its own infrastructure.

Read
Strategy

Shift Left, Shift Right, and the Governance Layer Between Them

AI compressed both ends of the software lifecycle. The governance layer that holds the middle has not caught up. What that means for engineering, product, marketing, sales, and support in a SaaS company, and why the TCO case favours planning it in now.

Read
Governance Thinking

The Merge Decision Has a Half-Life

A merge gate governs one moment. Drift measures how far production has walked from the gate since. Every merge decision has a half-life, and making that aging visible is the next layer of governance.

Read