Five questions that catch an expensive SaaS mistake before you sign

A mid-market ops team signed a three-year, six-figure contract for a scheduling platform to replace a system three people privately hated maintaining. The demo was clean, the sales engineer was sharp, and the pricing page said “unlimited API calls.” Four months in, a webhook integration that mattered to the business — real-time sync with a field-service app their techs used daily — started tripping a rate limit nobody had mentioned in the sales cycle. “Unlimited” turned out to mean unlimited requests, not unlimited concurrent webhook deliveries, and the difference cost them 40% of the contract’s first-year value in overage fees before anyone caught it.

How we vet an MCP server before it touches a client's codebase

Every MCP server you install is a program with unreviewed access to whatever the agent can already reach — your filesystem, your git credentials, your production database if you’ve been careless about scoping. Most teams install them the way they installed npm packages in 2016: the README looked fine, the demo worked, npm install and move on.

We audited our own conversion funnel — and shipped nine fixes the same afternoon

Thirteen findings. Nine fixes merged the same day. Zero manual conflict resolution, even though four of those nine PRs independently touched the same file. Those are the numbers. The site they’re about is this one.

How AI in the loop changes a technology hiring decision

A founder we talked to last quarter was about to sign offers for two senior engineers. Mid-market SaaS, real revenue, board pressure on roadmap. The plan was sensible by 2022 standards — double the senior bench, halve the time to the next big release. By the end of the conversation, she’d torn up one of the offers, signed the other, and routed the difference — roughly $280k all-in — into tooling, an agent setup, and a six-month engagement with someone who could teach the rest of the team how to operate the new stack.

A field guide to AI coding-agent failure modes

The first time we lost four hours to a silent stall, it felt like a fluke. The second time it happened, we named it. The third time, we had a watchdog wired up and a one-line entry in AGENT_COMMS.log told us within ninety seconds where the run was actually parked. That’s the difference naming makes — “the AI is being weird” becomes “this is a silent stall, here’s the recovery move,” and the conversation gets twenty minutes shorter.

The MCP servers worth installing (and the ones that aren't)

The right three MCP servers will save you more time than the wrong fifteen. We’ve installed close to 40 different ones across client engagements in the last year, and the working set we keep coming back to is small — five, maybe six, depending on the project. Everything else either added noise to the agent’s tool list, added auth complexity nobody wanted to maintain, or sat unused after the demo wore off.

The harness matters more than the model

Two agents, same model, same prompt — one ships the change and reports back in 14 minutes, the other quietly idles in a worktree for an hour and leaves uncommitted files spread across two branches. The only difference between them is the harness. That experience has repeated enough across Bout Labs work over the last six months that we have stopped recommending coding tools by model and started recommending them by harness — Claude Code, Cursor, Codex CLI, Aider, Continue, and whatever ships next.

The three rails every AI development loop needs

The first time an AI coding agent silently lied to us, it cost about four hours. The wrapper reported “running in the background, I’ll notify you when it’s done.” It never notified. The agent had stalled inside its own sandbox, half a commit deep, with uncommitted files smeared across two ticket branches because three parallel runs were sharing one working tree. By the time we untangled it, we’d touched five PRs and salvaged maybe 60% of what the agent had actually produced.

Token cost is now an engineering metric

The agent ran for nineteen minutes, produced a fourteen-line pull request, and cost $47. The PR was correct — passed CI, merged clean, did the thing it was supposed to do. The bill was the surprise. Up to that point on the engagement, everyone on the team had been quoting the per-task cost in pennies, because most of the per-task costs had been in pennies. This one wasn’t. Nine of those minutes turned out to be a tool-call retry loop the agent had spun on quietly. Another four were sub-agent fan-out nobody had asked for. Fourteen lines of output. Nowhere near fourteen lines of work.