Skip to main content

Documentation Index

Fetch the complete documentation index at: https://www.aidonow.com/llms.txt

Use this file to discover all available pages before exploring further.

Executive Summary

This analysis documents a production configuration incident in which every failure mode was accurately predicted by AI clarifying questions that were dismissed before implementation. A configuration merging system was implemented with underspecified merge semantics; the AI raised five distinct questions identifying the exact conditions that later caused a production outage; all five were answered with insufficient precision and the conversation was terminated to proceed with implementation. The incident confirms a structural pattern: when AI agents ask clarifying questions that appear pedantic, they are frequently pattern-matching against documented failure modes in their training data. The appropriate response is systematic specification, not impatience. This analysis presents a framework for evaluating AI clarifying questions as a form of design review and documents the changes to prompting practice that followed the incident.

Key Findings

  • All five failure conditions that produced the production incident were explicitly raised by the AI before implementation and dismissed as edge cases.
  • “Obviously” is a reliable indicator of underspecification: every use of the word in the design conversation corresponded to an ambiguity that was not resolved and that contributed to the production failure.
  • AI pattern recognition operates over a broader experience base than individual practitioner intuition — the AI had effectively seen failure patterns across thousands of configuration system implementations; the practitioner had designed approximately a dozen.
  • Treating AI clarifying questions as design review rather than implementation obstacles would have prevented a three-hour production debugging session in exchange for twenty additional minutes of specification work.
  • The effective fix required systematically answering every question the AI originally asked, confirming that the questions were not pedantic but were precisely targeted at unresolved design gaps.

1. Introduction

1.1 Context

A configuration management system required three-layer merging: default configuration shipped with the application, environment-specific configuration (development, staging, production), and runtime overrides applied through an administrative interface. The pattern is common; the practitioner had implemented similar systems previously. Implementation was initiated with a prompt specifying the merge strategy as “standard merge.”

1.2 The Design Conversation

The AI’s response to the implementation request was a series of clarifying questions spanning the following design dimensions:
  1. How should nested objects merge — deep recursive merge or shallow replacement?
  2. What is the expected behavior when an environment configuration removes a key present in defaults?
  3. Should runtime overrides support key removal, or only key addition and modification?
  4. How should type conflicts be handled when a key exists with different types in different layers?
  5. When conflicting representations exist for the same logical configuration (e.g., a connection URL versus its component fields), which takes precedence?
Each question was answered with a brief assertion and the conversation was advanced toward implementation. Twenty minutes of clarifying discussion occurred before the AI was directed to implement the specified behavior.

2. Incident Analysis

2.1 The Production Failure

A production outage occurred two weeks after deployment. The error:
ERROR: Database config has both 'url' and individual components
ERROR: Cannot determine connection strategy
FATAL: Application startup failed

2.2 Root Cause

The default configuration contained a database url field. The production configuration contained individual component fields (host, port, database, user) without a url field. The deep recursive merge combined both representations into the final configuration:
[database]
url = "postgres://localhost/dev"  # from defaults
host = "prod-db.example.com"      # from prod.toml
port = 5432                        # from prod.toml
database = "prod_db"               # from prod.toml
user = "app_user"                  # from prod.toml
Validation was designed to detect this condition and fail fast. However, validation executed after merging, and the staging environment used a URL-format configuration consistently — so the conflict was never encountered in pre-production testing. The production infrastructure had been configured using individual components by a separate team six months earlier, creating a condition invisible to staging.

2.3 The Conversation Record

Review of the design conversation established that the AI had raised this exact failure condition explicitly:
AI: What if default config has url but prod config has individual components? After merging, the final config has both. Which one does the database connection use? Response: I’ll add validation. If both exist, throw an error. Developer fixes their config. Problem solved.
This answer did not resolve the ambiguity. It deferred it to a runtime error that would only surface when both representations were present simultaneously — which was not testable in environments where all configurations used the same representation format.

3. Failure Mode Classification

3.1 Five Unresolved Design Decisions

The following table maps each AI question to the production failure mode it was identifying and the response that left it unresolved:
AI QuestionFailure Mode IdentifiedResponse GivenResolution Status
How should nested objects merge?Inconsistent behavior at different nesting depths”Deep merge, recursively”Partially resolved — depth semantics still ambiguous
What happens when environment config removes a default key?Keys present in defaults cannot be suppressed”Can’t unset required fields”Unresolved — no mechanism for explicit removal
Can runtime overrides remove keys?Explicit removal semantics undefined”No, set to false instead”Unresolved — no null/unset semantic defined
How to handle type conflicts?Implicit type coercion behavior undefinedNot directly answeredUnresolved
Both url and individual components?Direct cause of production failure”Validate and error”Unresolved — validation timing not specified

3.2 The “Obviously” Pattern

An analysis of the conversation transcript reveals a consistent linguistic marker preceding each unresolved ambiguity:
  • “Obviously it merges” — did not specify merge depth
  • “Obviously keep the defaults” — did not define precedence rules for conflicting representations
  • “Obviously throw an error” — did not specify when validation executes relative to merging
The word “obviously” in a design conversation typically signals that a decision is being assumed rather than made. When AI raises a question that prompts an “obviously” response, the response should be treated as a red flag indicating that the design decision has not been formally specified — not as evidence that the question was unnecessary.

4. Pattern Recognition vs. Practitioner Intuition

4.1 The Experience Asymmetry

The practitioner’s intuition that “config merging is simple” was based on prior experience implementing approximately a dozen configuration systems, all of which worked without incident on the happy path. The AI’s pattern recognition was based on training data containing a much larger sample of configuration system implementations, including the failure modes that emerge in production. The AI was not applying superior intelligence to the problem. It was applying a broader empirical base. The questions it asked were not generated by deep analysis — they were generated by pattern matching against documented failure modes in similar systems.

4.2 Implications for AI Collaboration

This asymmetry has a precise implication for how AI clarifying questions should be evaluated:
When an AI agent asks a question that feels pedantic — that is, when the question appears to be asking about an edge case that “obviously” will not occur — the appropriate analytical response is to ask whether the AI may have seen this edge case occur in a similar system. The question’s apparent pedantry is evidence of pattern recognition, not evidence of the AI failing to understand the problem.
The practitioner in this case was applying intuition: “I have done this before and it worked.” The AI was applying pattern recognition: “Systems like this fail at these specific points.” Both are valid inputs to a design decision. The failure was in treating them as competing rather than complementary.

5. The Correct Design

Following the production incident, the design conversation that should have occurred before implementation was completed. The proper specification required twenty minutes of systematic work:
Merge Semantics:
  1. Objects: Deep recursive merge
  2. Primitives: Replace — later layer wins
  3. Arrays: Replace entirely — no append or merge semantics
  4. Explicit null: Remove the key from the final configuration
Conflict Resolution:
# Use _strategy suffix for conflicting representations
[database]
_strategy = "url"  # or "components"
url = "..."        # used if strategy=url
host = "..."       # used if strategy=components
Required Fields:
# Schema defines required vs optional
[database]
_required = ["url OR (host AND port AND database)"]
Explicit Key Removal:
# Explicit removal using null value
[feature_flags]
beta_apis = null  # removes from final configuration
Validation:
  • Validate after each individual layer merge, not only after full merge
  • Fail fast with actionable errors that identify the conflicting configuration sources
The reimplementation took four hours — primarily because existing configurations required migration to the new strategy syntax. No configuration-related incidents have occurred since deployment.

6. Revised Prompting Practice

The incident produced a direct change to the implementation request format: Previous approach:
Implement config merging. Three layers: defaults, environment, runtime.
Standard merge strategy.
Current approach:
Implement config merging system.

Requirements:
- Three layers: defaults, environment overrides, runtime overrides
- Must handle nested objects, arrays, and primitives
- Must support explicit removal of default values
- Must detect and report conflicting config keys

Before implementing, ask:
1. What are the merge semantics for each type?
2. How should conflicts be resolved?
3. What validation happens, and when?
4. What are the failure modes?

After you have asked questions and I have answered, confirm your understanding
with 2-3 example scenarios showing the final merged config.

Then implement.
The structural change: AI clarifying questions are now explicitly requested rather than implicitly discouraged. Questions are treated as design validation artifacts rather than as obstacles to implementation. Confirmation examples are required before implementation begins.

7. A Framework for Evaluating AI Clarifying Questions

Based on this analysis, the following framework distinguishes productive AI clarifying questions from unproductive ones:
Question CharacteristicAssessmentResponse
Targets a specific edge case with a concrete exampleProductive — pattern recognition in actionAnswer with a complete specification, not an intuitive assertion
References a potential conflict between two stated rulesProductive — identifies logical inconsistencyResolve the conflict explicitly before proceeding
Asks for the behavior when a precondition is violatedProductive — identifies missing validationSpecify the validation behavior and its execution timing
Asks for clarification on terminology already definedPotentially unproductive — may indicate context confusionClarify, then reassess
Repeats a question that has been answeredIndicator of insufficient answerProvide a more specific answer, not the same answer more emphatically
When an AI session raises five or more clarifying questions on a single design decision, treat this as an indicator that the design is underspecified rather than as evidence that the AI does not understand the problem. The question count is proportional to the number of unresolved design decisions, not to the AI’s comprehension failure.

8. Recommendations

  1. Establish a pre-implementation specification requirement for any system involving merge semantics, conflict resolution, or hierarchical precedence rules. These categories of decision are reliably underspecified in initial prompts and reliably cause production incidents when left ambiguous.
  2. Treat AI clarifying questions as a design review mechanism with a cost structure. Twenty minutes of specification work before implementation is preferable to three hours of debugging after a production incident. Quantifying this trade-off explicitly shifts the incentive structure away from implementation velocity and toward specification completeness.
  3. Require AI agents to produce confirmation examples before beginning implementation. Two to three concrete examples showing the expected output of the system under representative inputs — including edge cases raised during the clarifying question phase — verify that the specification is complete and that the AI’s understanding of it is accurate.
  4. Flag “obviously” as a review trigger in design conversations. When a response to an AI question begins with or implies “obviously,” the response should be reviewed for whether it contains a complete specification or an intuitive assertion. Intuitive assertions are not specifications.
  5. Validate after each configuration layer merge, not only at the end. The production failure was partly attributable to validation that executed after all merging was complete. Per-layer validation would have detected the conflict before it produced an unresolvable final state.
  6. Document AI clarifying questions as design review outputs. The questions raised during an AI design session represent a structured identification of unresolved design decisions. Archiving these questions — and their complete answers — creates a lightweight design record that supports future maintenance and auditing.

9. Conclusion

The incident documented in this analysis is not exceptional. It represents a recurring pattern in human-AI collaboration: practitioner intuition based on limited prior experience dismissing AI pattern recognition based on a broader empirical base. The failure is not in the AI’s capability — the AI identified every failure mode accurately and in advance. The failure is in the practitioner’s evaluation framework for AI clarifying questions. As AI-assisted development becomes more prevalent, the practitioner skill of distinguishing productive AI clarifying questions from unproductive ones will become increasingly valuable. The evidence from this analysis suggests that the default assumption should be that a clarifying question is productive until it can be demonstrated otherwise — not the reverse. The cost of answering an unnecessary question is minutes; the cost of dismissing a necessary one can be measured in production incidents.
All content represents personal learning from personal projects. Code examples are sanitized and generalized. No proprietary information is shared. Opinions are my own and do not reflect my employer’s views.