Context engineering for coding agents
adoptCurate the smallest set of high-signal instructions, docs and examples an agent sees, and version them with the code.
Prompting has turned into curating context. I run my whole second brain through a single constitution file and a few slash-command skills, and the quality of the agent’s work tracks how well that context is written, not how clever the prompt is.
Thoughtworks now puts context engineering and curated shared instructions for teams in Adopt. The flip side, which they flag as a caution, is instruction bloat: a 2,000-line rules file is the agent equivalent of a training plan with fifteen exercises. Fewer, sharper cues win.
Golden paths
adoptAn opinionated, supported default that takes a team from nothing to a deployed, observable service. Optional but attractive.
A golden path is the calisthenics Recommended Routine of engineering. It’s a sensible default that beginners can follow without making fifty decisions, and experts can leave once they know why. I’ve built one for designers on a low-code workflow platform, and I’m building a “golden path for one” for my side projects.
The rules I keep coming back to: keep them thin and versioned, reference shared modules rather than copying code into templates, and measure whether teams actually find them faster. A golden path should never become a cage.
Platform as a product
adoptTreat internal developers as customers: research, roadmap, adoption metrics, no mandates.
Every platform I’ve seen fail was built for developers rather than with them. The ones that work do user research, publish a roadmap and earn adoption by being the easiest option. If people have to raise a ticket to get something done, it’s a service desk, not a platform.
Recent industry surveys point the same way: platform maturity seems to be part of what separates teams getting real value from AI from teams just adding noise, yet plenty of platform teams still don’t measure their success at all. Adoption, lead time and developer satisfaction are the minimum I’d track.
Decouple the render loop from the data feed
adoptLet high-frequency streams update a store outside React and paint on animation frames, not on every message.
When a feed pushes hundreds of updates a second, re-rendering on every message is how you drop frames. The pattern I rely on for real-time trading UIs: write ticks into a store transiently, coalesce them, and let components read the latest state once per animation frame.
It’s backpressure on the client. The network can be as bursty as it likes, but the screen only needs 60 good frames a second. Measure it with the Performance panel and long-task tracking, not by eye.
Evals-driven development for LLM features
trialBuild an eval set from real traces before tuning prompts. Pass rate is a product decision, not a unit test.
Most LLM features I’ve seen stall at “vibe checks”. The way out is boring: collect traces, do error analysis, write targeted evals, then change prompts or models against that baseline. Evals are to AI features what a test pyramid is to a UI.
For a platform, this is a golden-path capability. Every assistant or agent a team ships should come with an eval harness and a release/rollback path by default, not bolted on later.
Feedback sensors for coding agents
trialGive agents deterministic checks such as type checker, linter, unit and e2e tests, so they self-correct before a human reviews.
This is “harness engineering”: guides (feedforward) shape what an agent does, and sensors (feedback) tell it when it went wrong. In a frontend repo the sensors already exist: tsc, ESLint, Vitest, Playwright. The work is wiring them in so the agent runs them itself and reads the output.
It feels exactly like handstand balance. You don’t hold still, you make small corrections from fast feedback. I’m trialling it on personal repos and want to see how much review steering it saves.
Durable execution for agent workflows
assessLong-running agents need to persist progress and resume after a failed model or tool call.
An agent that works in a demo is a happy-path workflow. In production, model calls time out, tools fail and runs span hours. That’s a distributed-systems problem we’ve solved before with workflow engines and sagas.
Thoughtworks lists ignoring durability as a caution and points to durable execution in frameworks and platforms like Temporal. Having worked on a BPMN workflow platform, I’m curious how far classic orchestration patterns carry over to agents.
Mutation testing
assessMutate the code and check the tests notice. A better signal of test quality than coverage, and a strong sensor for AI-written code.
Coverage tells you a line ran, not that anything checked it. Mutation testing flips operators and deletes branches, then asks whether a test failed. It’s an old idea that’s back because agents can write lots of tests that assert very little.
I want to try it (e.g. Stryker for TypeScript) on a well-tested component library and see whether the cost is worth it in CI, or whether it belongs as a nightly job.
Coding throughput as a productivity measure
holdLines, PRs or AI-accepted suggestions measure activity, not outcomes. Stick to DORA-style flow and reliability metrics.
With coding agents, throughput numbers go up whatever happens to quality. Measuring it rewards the wrong thing and builds what Thoughtworks calls codebase cognitive debt: code nobody on the team really understands.
As a lead I’d rather watch lead time, change failure rate and recovery time, plus a qualitative check on whether people still understand the system they own.
MCP by default
holdReach for a protocol layer only when you need interoperability. A good CLI with JSON output often serves agents better.
I like MCP and use it, but wrapping every internal API in an MCP server by reflex adds an “abstraction tax”: less fidelity, more moving parts, more permissions to govern. Thoughtworks puts “MCP by default” in Caution for the same reason.
My rule: if a well-documented CLI with structured output and clear errors does the job, start there. Use MCP when you need auth, multi-tenant governance or cross-tool interoperability.