Build1 distinct publisher3 min readUpdated
A solo developer's schema asked a vendor for 66 optional fields where 24 were allowed. His Playwright suite never noticed, because in test mode it was talking to a mock he wrote himself.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A mock is a written record of what its author assumes an API does, which is the developer's own description of the artifact his suite consulted 155 times without once disagreeing with him, in an account he published on dev.to for its Summer Bug Smash [4] [15]. It was accurate about everything he knew. It was silent about the two things that decided the feature: which structured-output configurations get refused at validation time, and how many optional fields the service will accept [6] [7].
The second one is worth the arithmetic. The request asked for 66 optional fields against an allowance of 24 [7], which is 42 fields over the line, or 2.75 times the ceiling [1]. No amount of local reasoning gets you to 24. It is not a property of contracts or of wizards; it is a number somebody at a vendor picked, and the mock had no opinion about field counts because its author had none when he sat down to write it [8].
The shape of the failure is the expensive part. Three walls stood stacked, each invisible until the one in front of it came down [9]. Clearing the validation refusal did not produce a working feature, it produced the next refusal, and flattening the schema only bought passage to a timeout [9] [10]. A debugging run in that shape gives you no signal about how much is left.
The third wall is where the week goes. The policies step carries twenty interlocking fields and never came back inside the client's sixty second timeout, which was configured with a single retry [10]. A comfortable reading was available, which is that twenty interlocking policy fields are genuinely hard to reason about and the model wants longer than a minute, and that reading points straight at the dial [11].
He sent a control instead: one field, trivial content, same code path. Just as slow [12]. That ends the difficulty story. If a one-field request and a twenty-field request burn the same wall clock, the cost is not in reasoning about content, it is in forcing the output to satisfy the shape [13]. The schema was the bill.
The repair touched neither the model nor the prompt. Three changes, all to the shape of the conversation, chief among them one call per wizard step, each seeing only its own fields rather than the whole sixty-odd input vocabulary in a single request [14] [5]. Look at what that does to the number that broke everything: the largest step described, policies at twenty fields, now sits under the 24-field allowance with four fields of headroom [3]. The schema ended up sized to the limit that exists rather than to the layout of the wizard.
And 155 was always a count of spec files, never a measurement of the provider seam. That seam had exactly one branch that mattered, the line handing back a mock whenever NODE_ENV was test [3], and nothing on the far side of it could be reached by adding another spec. The instrument that found the truth was a single request with one field in it.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author concludes that equal wall clock time for a one-field and a twenty-field request means the cost is not in the reasoning but in forcing the output to satisfy the shape, making the schema itself the expense.
GigLegal is a contracts tool for freelancers built by a solo developer on Next.js 15 with Prisma, carrying 155 Playwright end-to-end spec files.
Every real request to the model provider failed, one hundred percent of them, while all 155 spec files stayed green and reported the feature as fine.
The provider resolver function returns 'mock' when process.env.NODE_ENV === 'test' (and 'disabled' otherwise absent an explicit provider), so the tests never touched the real service.
The author describes a mock as not a copy of an API but a written record of what you assume the API does, and says his suite read his assumptions back to him as results 155 times without once disagreeing.
The first version asked for the wizard's sixty odd inputs in a single structured-output call.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed first-hand account, single unverifiable source
The post supplies unusually specific and internally consistent artifacts: the resolver function source, the client timeout and retry configuration, exact field counts (66 requested versus 24 allowed), and a described control experiment. All of it, however, is self-reported by one author about one private codebase, the provider and API are never named so the field limit cannot be checked, and the causal conclusion about schema-shape cost rests on a single uncontrolled trial with no reported repetitions or latency figures.
One self-reported solo project
The only adoption signal is the author's disclosure of his own single-developer project and the fix he applied to it. There is no evidence of other teams hitting the same vendor limit, adopting the per-step pattern, or any usage, deployment, or benchmark data beyond this one codebase.
Mildly overstated generalization from n=1
The reported facts are modest and largely self-critical, and the dramatic headline framing is literally what the author says happened in his repository. The overreach is in generalization: a single control request is used to conclude that schema shape rather than reasoning drives latency, the fix's benefit is asserted qualitatively, and the unnamed vendor limit is presented as a general property of structured-output APIs. That is a small gap rather than a large one, since no product, funding, or performance claim is being sold.
Contest submission and personal-project visibility
The post opens by declaring itself a submission to DEV's Summer Bug Smash: Clear the Lineup, powered by Sentry, which rewards vivid, well-told bug narratives, and it doubles as exposure for the author's own product GigLegal. That is a real incentive toward a dramatic, tidy arc - though it pushes toward self-criticism rather than product boosterism, and no sponsor tooling is promoted in the body.
Low-moderate: single self-reported publisher
Confidence is limited by structure rather than by internal inconsistency. One publisher, one first-person source, an unnamed provider, no third-party verification, and a body text that is truncated before the author's closing reflection. The code and configuration excerpts and the arithmetic derived from them are the most trustworthy elements; the generalized latency conclusion is the least.
build
The 39 rows that vanished at per_page=100, and the 277 refusals that never raised1 distinct publisher
build
A #1 ranking only its author could see, and eleven days spent measuring the wrong end1 distinct publisher
build
The generator failed, committed half its writes, then used them to block the retry1 distinct publisher
build
The false green: a cached "connected" cleared a live health check before any model ran1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 24, 2026