Services
AI Engineering
AI built into the platforms, operating model and products you already run.
Explore AI EngineeringCloud Development
Scalable, secure cloud solutions on AWS, Google Cloud and Azure.
Explore Cloud DevelopmentDevOps as a Service
CI/CD pipelines, infrastructure automation and reliability engineering.
Explore DevOps as a ServiceTransformation
Process automation, system integration and change management, to drive growth and efficiency.
Explore TransformationBig Data & Analytics
Data pipelines, warehousing and business intelligence.
Explore Big Data & AnalyticsMobile Development
iOS and Android apps, built with React Native and Flutter.
Explore Mobile DevelopmentUX/UI Design
Research-driven design that delights users and drives business results.
Explore UX/UI DesignDeveloper experience is not perks or tooling taste — it is the wall-clock time between changing a line and knowing whether it works, and that number is charged against every change your team will ever make.
Ask ten engineering leaders what developer experience means and you get ten answers about tooling preferences, ergonomics and whether the team seems happy. Ask an engineer who just waited forty minutes on a pipeline to learn they misspelled an environment variable, and you get a better answer. Developer experience is latency. Nearly everything else is downstream of it.
It is a competitive question rather than a comfort question because of arithmetic. A slow feedback loop is not a one-time cost, it is a rate — charged to every change, every fix, every experiment, for as long as the codebase lives. Teams that fixed this three years ago are not marginally faster now; they work on a different clock.
Strip the vocabulary away and developer experience reduces to five properties of a codebase and the machinery around it. Each can be timed with a stopwatch, which makes it an engineering problem rather than a culture initiative.
None of these are opinions, and none need a survey. Most can be instrumented in an afternoon. That matters, because DX work gets approved on numbers and cut on vibes.
Separate the loops. They fail differently and they are repaired differently.
The budgets matter less than having written them down. Loop times only move in one direction unattended: every dependency, every test and every new service pushes them up a little, and nothing pushes back unless someone owns the number.
Speed without fidelity is worse than slow. A setup that boots in three seconds against an in-memory store and a mocked identity provider lets you write code that cannot work: transaction semantics differ, the real token carries claims the fake one does not, the query that is instant against forty rows takes eleven seconds against four million. Each becomes a defect found at the most expensive point in the pipeline.
The direct arithmetic is mild. A team of eight, twenty-five changes a week, six or seven loop iterations per change: add forty seconds to the test loop and you have burned roughly ninety engineer-hours a year. Unpleasant, survivable, and not the real cost.
The real cost is behavioral and non-linear. Under ten seconds an engineer stays inside the problem. At a minute they wait and watch. Past ten minutes they leave — chat window, another ticket, and the reconstruction cost on the way back. Once a loop is long enough to push people out of it, they compensate by batching: larger changes, tests run once at the end, hope substituted for verification. Larger batches mean harder debugging, more conflicts, more risk per release. More risk invites more process — approvals, freeze windows, a release train — and process lengthens the loop again.
Most struggling codebases are stuck in that spiral rather than badly written. Every step was locally reasonable. The compounding happens in the batch size, not on the stopwatch.
Anyone who has worked on a system for a year has memorized its pain and stopped perceiving it. The undocumented variable, the seed script that only works on the second run, the service a colleague restarts on Mondays — none of it registers anymore. A new engineer is the only instrument that reads the true value, and each one reads it once.
On a healthy codebase: clone to running application in under an hour, unattended, on a clean machine; first merged pull request inside two days; first change to a core path inside two weeks. We have inherited systems where the first number was three days plus an afternoon of someone else's time — and the same friction was taxing the incumbent team just as hard. They had priced it in.
A small senior core working with a wider network of engineers gets this reading several times a year rather than once, because somebody is onboarding onto something most months. Record it while the new person can still notice. Two weeks later they have adapted, and the instrument is gone.
The moment DX attracts budget, someone proposes measuring developer productivity. That is the trap. Output per engineer — commits, pull requests, story points, lines changed — measures the wrong entity and produces the wrong behavior: work sliced to inflate counts, and a quiet collapse in everything that carries no ticket. Refactors, test repair and dependency upgrades are precisely what protects the loop, and precisely what scores zero. Measure the pipeline instead.
Then instrument the local loop itself: wrap the test and build entry points, log wall-clock time, keep a fortnight of samples. The p85 is usually two or three times the number people quote from memory, and the worst offender is not the command they complain about — it is the one they have quietly stopped running.
Qualitative data still counts. Two questions a quarter: what slowed you down most this month, and what did you avoid because it was too painful. The second one finds what no dashboard will.
Across twenty years and more than a hundred projects, a short list accounts for most of the time lost. They are boring, which is why they survive.
The comfortable assumption is that if a model writes most of the code, feedback loops matter less — machines do not get bored waiting. Running this work daily, we find the opposite, on two counts.
First, an agent is the most demanding consumer your feedback loop will ever have. A human runs the test suite perhaps six times a day; an agent will run it sixty times an hour if the loop permits, because verification is how it makes progress at all. If the suite takes twenty minutes it does not merely go slower — it changes strategy, reasoning about whether the code is probably correct instead of checking whether it is. Confidently unverified code is the most expensive artifact in modern software. A twenty-second test command is not a convenience; it is what keeps the work anchored to evidence.
Second, generation stops being the constraint. When diff volume rises three or four times, everything downstream becomes the bottleneck: review, verification, integration, deployment, and the judgment about whether this was the right change at all. Throughput is set by how cheaply a change can be understood and trusted.
When a machine writes the code, the scarce resource is no longer typing. It is confidence — and confidence is manufactured by the feedback loop.
That reframes the investment list without changing much of it. What makes an agent effective is what made a strong new hire effective, only less forgiving: one command to a working environment, one command to run the tests, deterministic results, errors that state the failed assertion rather than a stack trace, a preview environment per branch. The difference is the failure mode — a human who hits a broken setup script asks a colleague; an agent invents something plausible, and you find out three commits later.
So the marginal effort now goes into review. Keep changes small enough to hold in one head, and push everything a machine can check to a machine — formatting, typing, property-based tests, migration safety — so that human attention goes to the questions machines are still bad at: is this the right change, does it belong here, and what happens the night it fails.
Sequencing matters, because the first instinct — buying a tool — is usually the least valuable move available.
None of this needs a platform team or a budget line called developer experience. It needs one person who owns the numbers and has the standing to refuse a process change that would lengthen the loop.
At East Wolf the first week on an unfamiliar system is a measurement exercise before it is an architectural one. Over twenty years and more than a hundred projects out of Bucharest, the strongest predictor of how an engagement goes has not been the architecture diagram — it has been three numbers: setup time on a clean machine, suite runtime, and how long a change waits before a human looks at it. Those three tell you what the next year will cost, so we fix them first.