The Missing Control Group in AI Assisted Thinking

Nan Wang

Hatched by Nan Wang

Aug 25, 2026

11 min read

94%

0

What happens when you ask an intelligent system to criticize a decision without telling it what reality would have looked like if you had chosen differently?

You may get a fluent answer. You may even get useful objections. But you will not necessarily get a reliable analysis. You will get something closer to a judgment formed without a counterfactual, a comparison case, or a clear account of what evidence matters.

This is the hidden connection between two practices that rarely appear in the same conversation: improving AI assisted software work with documentation, and estimating causal effects with synthetic controls. Both are attempts to solve the same fundamental problem:

Good reasoning does not begin with more intelligence. It begins by constructing the right comparison.

A coding assistant that sees only a prompt has no grounded sense of what your system is supposed to preserve. A researcher who compares one treated region with one arbitrarily chosen control has no grounded sense of what would have happened without the intervention. In both cases, the central failure is not computational weakness. It is an absent world.

The question behind every critique

When someone asks an AI assistant to “grill” an idea, the apparent task is to generate objections. The deeper task is to determine whether the idea survives contact with its relevant context.

That distinction matters. A generic critic can ask whether an API is too complicated, whether a database migration is risky, or whether a product feature lacks safeguards. But it cannot know whether complexity is deliberate, whether a migration is constrained by a legacy integration, or whether an apparently missing safeguard is handled in another bounded part of the system.

Without that context, critique becomes a performance of skepticism. The system produces plausible concerns because plausible concerns are easy to generate. Yet plausibility is not the same as relevance. A question can be intelligent in the abstract and completely wrong for the system in front of you.

Causal inference has a parallel problem. Suppose a city introduces a policy and researchers want to know whether it changed cigarette sales. Looking only at the treated city after the policy tells us almost nothing. Sales might have changed because of the policy, the economy, national trends, weather, advertising, or any number of other forces.

The missing quantity is the counterfactual: what would cigarette sales in that same city have been during the same period if the policy had not been introduced? That outcome cannot be directly observed. The treated city occupies only one path through history.

A synthetic control addresses this by combining several untreated units into a weighted comparison that resembles the treated unit before the intervention. The weights are constrained: they are nonnegative and sum to one. This prevents the comparison from becoming an imaginary extrapolation built from arbitrary offsets. The resulting control is not a perfect duplicate. It is a disciplined reconstruction of the road not taken.

The same logic applies to software reasoning. A reviewer needs more than the proposed change. It needs the local rules that reveal what a safe alternative would look like. Documentation, domain language, architectural decisions, tests, and neighboring code provide the donor pool from which a meaningful counterfactual can be constructed.

Context is a synthetic control for decisions

Consider a developer proposing a new way to calculate a customer’s eligibility. A generic review might raise familiar concerns:

  • Is the function name clear?
  • What happens with null values?
  • Is this logic in the correct layer?
  • Could the query be slow?
  • Should this be asynchronous?

These are not useless questions. They are simply underweighted. The important question may be entirely local: in this domain, “eligible” does not mean financially qualified. It means legally permitted under a rule that is intentionally evaluated before identity resolution. Moving the logic into a shared service would look cleaner while quietly violating the system’s boundaries.

Only the codebase’s ubiquitous language can reveal that mistake. The term “account,” “member,” or “active” may carry a precise meaning that is invisible from the function under review. A bounded context is not merely an organizational label. It is a region in which words, invariants, and acceptable tradeoffs cohere.

This is why the thinnest layer of documentation can have disproportionate value. A page that defines the meaning of “reservation,” records why two services do not share a database, or explains why an apparently redundant validation exists may outperform a large volume of generic documentation. It tells the reviewer what would otherwise be surprising.

The parallel with synthetic control becomes clearer if we map the elements:

  • The proposed code change is the intervention.
  • The current system before the change is the pre intervention trajectory.
  • Relevant code patterns, domain rules, tests, and architectural decisions form the donor pool.
  • Documentation specifies which characteristics predict acceptable outcomes.
  • The reviewer’s questions are an attempt to estimate what would happen under alternative implementations.
  • Tests, staged rollouts, and reversibility checks are falsification exercises.

A decision review therefore improves when it can answer two questions. First, what features of the existing system must the change preserve? Second, which existing examples are genuinely comparable to this change?

The second question is often neglected. Developers commonly search for a single precedent: “Find me another endpoint that does this.” But one precedent can be misleading. It may belong to a different context, embody a temporary compromise, or solve a problem whose constraints have changed.

A synthetic precedent is safer. It combines several relevant examples, each contributing a specific property. One may show the correct transaction boundary. Another may demonstrate the accepted error model. A third may reveal how authorization is expressed in this domain. None is copied wholesale. Together they form a better counterfactual for the decision at hand.

The best review does not ask, “Does this resemble one existing example?” It asks, “Which combination of existing examples best predicts that this will belong here?”

Why explicit weights improve judgment

The most useful feature of a synthetic control is not merely that it uses multiple comparison units. It makes their contribution explicit. A city in the donor pool receives a weight because it predicts the treated city’s pre intervention behavior. A unit with no relevant similarity receives zero weight. The method forces the researcher to explain what each comparison is doing.

Software teams need the same discipline. When a reviewer says, “This feels inconsistent with the codebase,” the judgment may be correct but opaque. Which part is inconsistent? Naming? Ownership? Failure handling? Persistence? Security? Operational cost? Without decomposition, the critique is difficult to verify and easy to dismiss.

A lightweight decision record can act as a weighting scheme. Instead of recording every implementation detail, record the choices that would be surprising without context, difficult to reverse, or costly because of their downstream consequences. For each choice, identify the evidence that supports it and the alternative that was rejected.

For example:

  • Decision: Keep billing state in the billing context rather than the customer context.
  • Relevant evidence: Billing state follows payment events, has different consistency requirements, and is governed by a separate operational team.
  • Rejected alternative: Store the status on the customer record for simpler reads.
  • Tradeoff: More complex queries in exchange for clearer ownership and fewer cross context invariants.
  • Reversal cost: High, because several reports and external integrations depend on the current ownership boundary.

This record gives an AI assistant, a new developer, or a future reviewer something far more valuable than a style guide. It supplies the weights. It says which similarities matter and which apparent similarities should be ignored.

The choice of weights is never perfectly objective. In synthetic control, the result depends partly on the distance function and on the researcher’s choice of how much importance to assign to different predictors. In software, the equivalent choices are also judgment laden. Do performance and conceptual clarity matter equally? Is local consistency more important than a company wide convention? Should a rare security invariant outweigh a common implementation pattern?

Pretending these choices do not exist does not remove subjectivity. It hides it. Making them explicit turns vague intuition into inspectable reasoning.

This also explains why documentation should not aspire to describe everything. Excess documentation can bury the high value signals under low value repetition. The goal is not maximal coverage. The goal is predictive coverage: recording the facts that help someone forecast the consequences of a new decision.

The danger of a convincing but invalid comparison

Synthetic controls are powerful precisely because they can produce a close pre intervention fit. But a good fit is not automatically a valid causal explanation. The method still requires checks. Researchers may use placebo exercises, compare pre and post prediction errors, and test whether the apparent effect is unusually large relative to effects assigned to untreated units.

AI assisted reasoning needs equivalent safeguards. An answer that sounds specific may still be hallucinated. A review that cites several files may still confuse two bounded contexts. A recommendation that matches common patterns may still violate an architectural decision that the assistant has not found.

The remedy is not to distrust every answer. It is to test the answer against the system’s own history.

One practical technique is the falsification review. Before accepting a proposed change, ask the assistant to identify cases where its recommendation would fail. Ask it to find existing code that contradicts its general rule. Ask which assumptions are supported by documentation and which are inferred. Ask what evidence would change its mind.

Another technique is the pre intervention fit check. Give the assistant a set of known decisions and ask it to explain them using only the available documentation and code. If it cannot reconstruct why existing boundaries, names, or patterns exist, it is not ready to advise on a new change. Its model of the codebase has not fit the past well enough to justify predictions about the future.

A third technique is to inspect the assistant’s donor pool. For every recommendation, ask:

  1. Which files, decisions, or domain definitions influenced this conclusion?
  2. Which examples were considered and given zero weight?
  3. What important difference makes the closest precedent imperfect?
  4. Is the proposed change an interpolation within established practice, or an extrapolation beyond it?

That last distinction is especially important. Interpolation is generally safer because the decision lies within a region the system has already demonstrated it can handle. Extrapolation can be necessary, but it deserves stronger review because the supporting evidence is thinner.

A team that treats every new architecture as a clean slate is constantly extrapolating. A team that blindly copies old patterns is constantly overfitting. The mature position lies between them: synthesize precedent, expose the tradeoffs, and test the recommendation against cases that could disprove it.

From better prompts to better institutional memory

The immediate benefit of documentation aware questioning is better answers from an AI assistant. The larger benefit is that it reveals what the organization itself does not yet know how to explain.

If a reviewer repeatedly asks why a boundary exists and nobody can answer, the problem is not merely prompt quality. The system has an undocumented causal history. Perhaps a past incident led to the boundary. Perhaps a team made a tradeoff under a constraint that no longer exists. Perhaps a temporary workaround hardened into architecture. In each case, the missing explanation makes future reasoning fragile.

This suggests a useful cycle:

  1. Ask for a critique grounded in the codebase and domain documentation.
  2. Separate generic objections from context dependent objections.
  3. Investigate disagreements by tracing them to definitions, precedents, or decisions.
  4. Record only the surprising, consequential, and difficult to reverse findings.
  5. Use the updated record to improve the next review.

The documentation becomes better because it is tested by decisions. The questioning becomes better because it has a richer donor pool. The organization gradually converts tacit knowledge into reusable predictive structure.

This is also why specialized modes of interaction are valuable. A general purpose critique is appropriate when no system context exists. Once code, domain language, and architectural history are available, the task changes. It is no longer simply “grill my idea.” It becomes “construct the strongest context grounded counterfactual for this change, then attack it.”

The distinction is not cosmetic. It separates generic productivity from situated reasoning.

Key Takeaways

  • Treat context as evidence, not background. Give reviewers the domain definitions, architectural decisions, tests, and local conventions that determine what a good change must preserve.
  • Build a synthetic precedent. Combine several relevant examples instead of copying one superficially similar implementation.
  • Make weights visible. Explain why performance, ownership, consistency, security, or reversibility matter in a particular decision.
  • Run falsification exercises. Ask where the recommendation fails, which existing cases contradict it, and what evidence would change the conclusion.
  • Document predictive facts. Record decisions that are surprising, hard to reverse, or consequential, rather than attempting to describe the entire system.

The deepest lesson is that intelligent critique is a counterfactual technology. It does not merely find flaws in what exists. It estimates the consequences of alternatives by reconstructing the world that the alternative would enter.

That reconstruction is only as good as its comparison group. Without context, an AI assistant is like a researcher comparing a treated city with an arbitrary city because both appear in the same dataset. With carefully selected documentation, explicit tradeoffs, and tests against contrary cases, it can reason more like a disciplined analyst of one particular institutional world.

The future of AI assisted work may therefore depend less on teaching systems to criticize harder than on teaching organizations to preserve their causal memory. The question is not whether the machine can generate more objections. It is whether we have given it enough of the past to imagine the consequences of a different future.

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣