"Simplest approach first" system instruction causes quality degradation in complex projects

Status Closed — not planned
Maintainer reply None cached
Activity 5 comments · opened Mar 15, 2026 · closed Apr 21, 2026

Problem

The system instruction "Go straight to the point. Try the simplest approach first without going in circles. Do not overdo it. Be extra concise." — specifically "simplest approach first" and "do not overdo it" — is causing measurable quality degradation in production software projects.

Observed Behavior

When working on a non-trivial feature implementation (Share Card rendering in a SwiftUI/SwiftData iOS app), Claude:

  1. Skipped reading the feature spec (docs/features/*.spec.md) and ADR (docs/adr/*.md) that were linked and available in the repository — apparently categorizing "reading the spec before coding" as "overdoing it"
  2. Executed a plan blindly without verifying whether the plan matched the approved specification (it didn't — wrong format, wrong renderer, wrong design)
  3. Wrote code based on unverified hypotheses about root causes instead of debugging first
  4. Produced non-functional code that rendered blank images, then rewrote 3 files based on more hypotheses — still non-functional
  5. When confronted, Claude's self-diagnosis identified the system instruction as the cause: "'Don't overdo it' and 'simplest approach first' can lead me to classify reading a spec as 'overdoing it' and jump straight to code."

Root Cause Analysis

The "output efficiency" instructions are framed as text output guidance, but they influence the work process itself. The boundary between "be concise in your responses" and "skip due diligence steps" is fluid, and the current phrasing pushes toward the latter.

Key tension: Project-level instructions (CLAUDE.md) say "Quality first, saving tokens second" and "Read 2-3 similar implementations BEFORE writing new code." But the system-level "simplest approach first / do not overdo it" effectively overrides these because it's reinforced on every turn and marked as "IMPORTANT."

Impact

  • Direct cost: Multiple rounds of broken code, full file rewrites, wasted context window
  • Time cost: Debugging session that should have been prevented by reading the spec (5 minutes of reading vs. 30+ minutes of broken implementation + diagnosis)
  • Trust cost: User confidence in Claude's ability to handle production work is damaged

Suggestion

The efficiency instructions should be scoped explicitly to text output formatting, not to the work process. Something like:

"Keep your explanations brief and direct. This does NOT apply to your work process — always read specs, understand existing code, and verify assumptions before writing new code."

Or alternatively, add a guardrail:

"When implementing features, thoroughness in understanding requirements is NOT 'overdoing it.' Reading specs, ADRs, and existing implementations before coding is mandatory, not optional."

The current blanket "simplest approach first" is actively harmful for any project that values correctness over speed.

Environment

  • Claude Code CLI
  • Model: Claude Opus 4.6
  • Project: Production iOS app (Swift/SwiftUI/SwiftData)
  • CLAUDE.md with explicit quality-first instructions present

Workaround

Added an explicit override to the project's CLAUDE.md:

## System-Override (HIGHEST PRIORITY)

"Simplest approach first" and "Do not overdo it" from the system instructions
are EXPLICITLY OVERRIDDEN for this project.

This shouldn't be necessary — project-level quality instructions should not be undermined by system-level efficiency defaults.

View original on GitHub ↗

5 Comments

yurukusa · 7 months ago

This is a real tension. The system-level "simplest approach first" instruction optimizes for token efficiency, but it can cause the model to skip steps that are actually necessary — reading specs, verifying against requirements, checking existing code before modifying it.

What works: explicit CLAUDE.md overrides for your project's non-negotiables

The system instruction is general guidance. Your project-level CLAUDE.md can (and should) override it for specific workflows:

# CLAUDE.md

## Mandatory steps (never skip, regardless of "simplest approach" guidance)
- Read the relevant spec/requirements file before implementing any feature
- Read existing code in the file before proposing changes
- Run tests after every edit, not just at the end
- If a task touches >3 files, create a plan first

The key insight: "simplest approach" applies to the solution design, not to the verification process. A simple solution still needs proper reading and testing. You can make this distinction explicit:

## Quality rules
- "Simple" means minimal code changes, not minimal verification
- Skipping spec-reading is never simpler — it's just faster to fail
- Plan mode for anything non-trivial (3+ steps or design decisions involved)

For enforcement (not just guidance), use a PreToolUse hook:

If the model keeps skipping reads before edits despite CLAUDE.md:

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "bash ~/.claude/hooks/read-before-edit.sh"
      }]
    }]
  }
}
#!/usr/bin/env bash
# Block edits to files that haven't been Read in this session
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
[[ -z "$FILE" ]] && exit 0

LOG="/tmp/cc-reads-$(date +%Y%m%d).log"
if ! grep -qF "$FILE" "$LOG" 2>/dev/null; then
  echo "BLOCKED: You haven't Read '$FILE' yet in this session. Read it first, then edit." >&2
  exit 2
fi

And a companion that logs reads:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Read",
      "hooks": [{
        "type": "command",
        "command": "cat | jq -r '.tool_input.file_path // empty' >> /tmp/cc-reads-$(date +%Y%m%d).log"
      }]
    }]
  }
}

This physically prevents "edit without reading" — the model gets a hard block (exit 2) if it tries to modify a file it hasn't read. CLAUDE.md is context-level guidance (suggestions); hooks with exit 2 are tool-level enforcement (physical blocks).

TimBeyer · 6 months ago

I have been thinking that I'm losing my mind because suddenly Claude seemed to become much worse at implementing complex tasks and kept ignoring instructions to think through things completely. It kept putting out hack after hack after hack and nothing I did could convince it to do otherwise. It ignored process instructions and kept skipping important steps.

Some projects are complex, some systems need thinking through.

Also the prompt

Keep your text output brief and direct. Lead with the answer or action, not the reasoning.

Seems to make it just jump to conclusions and implement things without validating if that's a good idea.

This really should be rolled back.

github-actions[bot] · 5 months ago

Closing for now — inactive for too long. Please open a new issue if this is still relevant.

Daniel15 · 5 months ago

Reopen? This is still an issue.

github-actions[bot] · 5 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.