Your API Was Designed for Servers, Not Clients
Most APIs are designed from the data model out. Clients need action-oriented, client-shaped responses. N+1 and over-fetching aren't frontend failures.
Tag
25 posts on Engineering
Most APIs are designed from the data model out. Clients need action-oriented, client-shaped responses. N+1 and over-fetching aren't frontend failures.
Green CI doesn't mean working software. Flaky tests, mocked dependencies, and coverage theater have turned CI into a checkbox ritual.
LLMs have finite context. Managing what goes in — and when — is now a first-class engineering concern, not a prompt hack.
Feature flags start as a deployment safety tool and end as permanent conditionals no one understands. Here is how to prevent the graveyard.
Engineers pipe LLM output into downstream systems as if it were structured data. It isn't. That mismatch is a whole class of production bugs.
Lines of code, PRs merged, story points, even DORA metrics can be gamed or mislead. Most orgs measure activity and call it productivity.
The polyrepo vs monorepo debate seemed like a draw for years. It isn't anymore. The tooling closed the scalability gap and AI development broke the balance.
Paging fatigue isn't a staffing problem. It's a design problem. Systems that generate noise do so because they weren't designed for operability.
Every team believes their staging environment reflects production. Almost none of them do. Here is how to test in production safely instead.
Tech debt is framed as a developer failing, but the accumulation pattern is always managerial. Fix the incentives, not just the code.
Application code that breaks can be rolled back in seconds. A migration that breaks has already changed your data. Migrations deserve more caution than any other code in your pipeline — and usually get less.
Story points, t-shirt sizes, and ideal days all try to predict how long work will take by guessing harder. The data your team already has predicts better than any guess — if you stop estimating and start counting.
Retries, timeouts, and health checks are supposed to make systems resilient. Configured naively, they turn a recoverable blip into a self-sustaining outage. The resilience code becomes the incident.
Staging exists to catch problems before production. Most staging environments catch the wrong problems and miss the real ones, because they differ from production in exactly the ways that matter.
When you give an AI agent access to your tools, you've created a privileged insider. The threat model is different from a compromised service — because the agent acts non-deterministically, at scale, on your behalf.
A 10-step AI agent pipeline at 90% per-step reliability succeeds only 35% of the time. This is the compounding reliability math that explains why 78% of companies run pilots but only 14% ship agents to production — and the architecture that closes the gap.
Threat intelligence was built on the assumption that your analysis layer is neutral. LLMs trained on public CTI reports aren't neutral — they've absorbed adversarial narratives, attribution biases, and threat actor disinformation before you wrote a single query.
Traces, metrics, and logs were designed for deterministic systems. When an agent makes 40 tool calls across three services to complete a task, your existing observability stack tells you almost nothing useful.
In 2002, SQL injection was a known attack that most developers dismissed as someone else's problem. By 2010 it was the top cause of data breaches. Prompt injection is at the 2002 stage. The trajectory is the same.
IAM roles, network policies, secrets rotation schedules — all designed for humans or static services. AI agents are neither. They're dynamic, non-deterministic actors with legitimate credentials, and your current policy model doesn't account for them.
SWE-bench Verified is broken. OpenAI officially stopped using it. The same models scoring 80%+ on Verified score only 23% on the contamination-resistant version. Here's what happened, why it matters, and how to actually evaluate AI coding tools.
AI agents don't make your messy codebase invisible — they make it expensive. When 78% of Claude Code sessions involve multi-file edits, your architecture quality is no longer a code-quality concern. It's a cost and velocity concern.
Long-running agents fail 90% more often without state persistence. This is the memory architecture — working, episodic, semantic, procedural — that makes stateful AI production-ready.
Anthropic's 2026 Agentic Coding Trends Report shows devs use AI in 60% of their work but fully delegate only 0–20% of tasks. Here's the exact playbook to close that gap with Claude Code Agent Teams.
The 6-week sprint was invented because execution was expensive. AI coding agents just made execution cheap. Here's what that means if you're a product manager.