Date: 2026-06-10
Accepted
In an agentic development workflow, it is easy to begin implementation before requirements are fully understood. An AI assistant will produce working code from a vague prompt — but working and correct are not the same thing. Without a forcing function that requires requirements to be stated explicitly before implementation begins, scope creep, rework, and misaligned implementations are likely outcomes.
GitHub Issues provide a natural spec artifact: persistent, linkable, and — critically — they survive session boundaries. In a workflow where context is lost between sessions, an Issue that captures the agreed approach and acceptance criteria before implementation begins serves as the durable contract between intent and implementation.
All new features and non-trivial changes follow a three-step workflow:
- Discuss — describe the requirement in Claude Code Plan mode; explore alternatives and consequences before committing to an approach
- Specify — create a GitHub Issue as the spec artifact, capturing the agreed approach, acceptance criteria, and any constraints
- Implement — work against the Issue; commits reference it via
the
(#issue)suffix in the Conventional Commits format
Trivial changes (documentation updates, formatting fixes, dependency bumps) may skip the Issue step at the developer's discretion.
- Requirements are stated explicitly before implementation; the agent works against a written spec rather than an interpreted prompt
- Issues survive session boundaries — a new session can resume from the Issue rather than reconstructing intent from scratch
- The implementation trail (Issue → branch → PR → commit) is traceable without relying on session memory
- Adds upfront overhead for changes that feel small; the Issue step can seem bureaucratic for straightforward work
- The line between "spec-worthy" and "trivial" is judgment-dependent and not enforced by tooling
- GitHub Issues double as the project backlog; SDD and backlog management share the same artifact
- Plan mode discussion is ephemeral — not persisted outside the session; the Issue is the only durable record of the pre-implementation reasoning