skills/incremental-implementation/SKILL.md
Delivers changes incrementally. Use when implementing any feature or change that touches more than one file. Use when you're about to write a large amount of code at once, or when a task feels too big to land in one step.
npx skillsauth add SystangoTechnologies/agent-skills incremental-implementationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build in thin vertical slices — implement one piece, verify it compiles, then expand. Avoid implementing an entire feature in one pass. Each increment should leave the system in a compilable state. Read pending tasks from specs/tasks/todo.md, process them in order, and update checkboxes as you complete work. This is the execution discipline that makes large features manageable.
When NOT to use: Single-file, single-function changes where the scope is already minimal.
┌─────────────────────────────────────────────────┐
│ │
│ Read task ──→ Identify domain ──→ │
│ Load domain skill ──→ Implement ──→ │
│ Verify build compiles ──→ │
│ Mark [x] in todo.md ──→ Next task │
│ │
└─────────────────────────────────────────────────┘
For each task:
specs/tasks/todo.md — description, acceptance criteria, files likely touchednpm run build) and type checking passes (npx tsc --noEmit)[x] in specs/tasks/todo.md immediately after verificationTasks come from {project-root}/specs/tasks/todo.md, generated by the planning-and-task-breakdown skill.
Open specs/tasks/todo.md and find the first unchecked task:
- [ ] Task 3: Add user authentication endpoint
Read the full task block: description, acceptance criteria, dependencies, and files likely touched. Confirm any listed dependencies are already checked before starting.
After each task's build verifies, update the todo immediately:
- [x] Task 3: Add user authentication endpoint
Do this before starting the next task — the checkbox is durable across context compaction; in-progress code is not.
If a task is only partially implemented when a session ends, do NOT mark it [x]. Leave it unchecked so the next session resumes from a clean starting point.
Stop and run the planning-and-task-breakdown skill first to generate it.
When reading a task, two things must be skipped — both are reserved for the /test phase:
npm test commands, skip those. Only run npm run build and npx tsc --noEmit as verification.**Unit Tests (deferred):** block with a - [ ] Tests written checkbox and notes on what to test. Do NOT write those tests during the build phase. Do not create test files. Do not write test code. Do not check the Tests written checkbox. Treat the entire section as read-only context for the future /test phase.Before writing any code for a task, complete this checklist:
specs/tasks/todo.md — including the **Domain skill:** field
1.5 Read project context — check .context/conventions.md for project-specific naming and pattern rules that apply to this task. Check .context/concerns.md for known hazards in the files you'll touch.**Domain skill:** field, use it directly. If the field is missing or says None, check which applies:
frontend-ui-engineeringapi-and-interface-designsecurity-and-hardeningapi-and-interface-design for this task (from Domain skill field)."Skipping steps 2 and 3 is a process violation. "I'll apply the patterns intuitively" is not a substitute for loading the skill. If the task's **Domain skill:** field names a skill, you must load it — no exceptions.
Before writing any code for a task, identify its domain and load the corresponding skill. Domain skills encode patterns that prevent entire categories of bugs.
| If the task involves… | Load this skill |
|---|---|
| UI components, layouts, responsive design, accessibility, state management | frontend-ui-engineering |
| API endpoints, REST design, TypeScript interfaces, module boundaries, type contracts | api-and-interface-design |
| Authentication, authorization, input validation, PII, session management, external integrations | security-and-hardening |
Look at the task's description and files likely touched:
components/, pages/, views/, .tsx/.jsx → frontend-ui-engineeringroutes/, api/, controllers/, services/, types/, interfaces/ → api-and-interface-designsecurity-and-hardeningA task may span more than one domain. Load both skills and apply each where relevant.
Pure infrastructure tasks (build config, migrations with no auth surface, utility functions) do not require a domain skill. Proceed directly to implementation.
Build one complete path through the stack:
Slice 1: Create a task (DB + API + basic UI)
→ Tests pass, user can create a task via the UI
Slice 2: List tasks (query + API + UI)
→ Tests pass, user can see their tasks
Slice 3: Edit a task (update + API + UI)
→ Tests pass, user can modify tasks
Slice 4: Delete a task (delete + API + UI + confirmation)
→ Tests pass, full CRUD complete
Each slice delivers working end-to-end functionality.
When backend and frontend need to develop in parallel:
Slice 0: Define the API contract (types, interfaces, OpenAPI spec)
Slice 1a: Implement backend against the contract + API tests
Slice 1b: Implement frontend against mock data matching the contract
Slice 2: Integrate and test end-to-end
Tackle the riskiest or most uncertain piece first:
Slice 1: Prove the WebSocket connection works (highest risk)
Slice 2: Build real-time task updates on the proven connection
Slice 3: Add offline support and reconnection
If Slice 1 fails, you discover it before investing in Slices 2 and 3.
Before writing any code, ask: "What is the simplest thing that could work?"
After writing code, review it against these checks:
SIMPLICITY CHECK:
✗ Generic EventBus with middleware pipeline for one notification
✓ Simple function call
✗ Abstract factory pattern for two similar components
✓ Two straightforward components with shared utilities
✗ Config-driven form builder for three forms
✓ Three form components
Three similar lines of code is better than a premature abstraction. Implement the naive, obviously-correct version first. Optimize only after correctness is proven with tests.
Touch only what the task requires.
Do NOT:
If you notice something worth improving outside your task scope, note it — don't fix it:
NOTICED BUT NOT TOUCHING:
- src/utils/format.ts has an unused import (unrelated to this task)
- The auth middleware could use better error messages (separate task)
→ Want me to create tasks for these?
Each increment changes one logical thing. Don't mix concerns:
Bad: One increment that adds a new component, refactors an existing one, and updates the build config.
Good: Three separate logical changes implemented in sequence, each tracked in todo.md as its own completed task.
After each increment, the project must build (npm run build) and type checking must pass (npx tsc --noEmit). Don't leave the codebase in a broken state between tasks. Tests are not run per-increment — they are deferred to a separate testing session.
If a feature isn't ready for users but you need to merge increments:
// Feature flag for work-in-progress
const ENABLE_TASK_SHARING = process.env.FEATURE_TASK_SHARING === 'true';
if (ENABLE_TASK_SHARING) {
// New sharing UI
}
This lets you merge small increments to the main branch without exposing incomplete work.
New code should default to safe, conservative behavior:
// Safe: disabled by default, opt-in
export function createTask(data: TaskInput, options?: { notify?: boolean }) {
const shouldNotify = options?.notify ?? false;
// ...
}
Each increment should be independently revertable:
When directing an agent to implement incrementally:
"Let's work through the tasks in specs/tasks/todo.md.
For each task: identify the domain (UI, API, or security/auth),
load the relevant skill, implement the slice, verify it compiles,
and mark it complete in todo.md.
Do not write tests during implementation."
Be explicit about what's in scope and what's NOT for each task. The agent should verify dependencies are complete before starting each task.
After each task, verify:
npm run build)npx tsc --noEmit)npm run lint)[x] in specs/tasks/todo.mdThis skill does not prescribe when or how to commit. When the user or project needs git workflow (branching, messages, atomicity), use the git-workflow-and-versioning skill.
| Rationalization | Reality |
|---|---|
| "I'll test it all at the end" | Bugs compound. A bug in Slice 1 makes Slices 2-5 wrong. Test each slice. |
| "It's faster to do it all at once" | It feels faster until something breaks and you can't find which of 500 changed lines caused it. |
| "These changes are too small to split" | Small, focused increments are easier to verify and roll back than one large mixed change. |
| "I'll add the feature flag later" | If the feature isn't complete, it shouldn't be user-visible. Add the flag now. |
| "This refactor is small enough to include" | Refactors mixed with features make both harder to review and debug. Separate them. |
| "I'll write tests for this later" | Correct — and intentional. The task's Unit Tests (deferred) section already captures what to test. Run /test after the build phase. Do not write tests now, even if the section makes it tempting. |
| "I should checkpoint in git before moving on" | Mark the todo checkbox when the task is verified — it is durable across compaction. Use git-workflow-and-versioning only when the user or project asks for commits. |
[x] in todo.mdapi-and-interface-design" before writing endpoint code is required, not optional)api-and-interface-design — the skill catches missing versioning, inconsistent error schemas, wrong status codes/test phase)Tests written checkbox in a task's Unit Tests section (only the /test phase does this)After all tasks in a session are complete:
[x] in specs/tasks/todo.mdnpm run build)npx tsc --noEmit)npm run lint)tools
Creates specs before coding with mandatory Jira MCP validation and story-key grounding. Use when starting a Jira-tracked feature or significant change and requirements are unclear, ambiguous, or incomplete.
devops
Prepares production launches and updates Jira ticket/task comments. Use when preparing to deploy to production and when launch readiness/progress must be communicated in Jira.
tools
Breaks Jira story work into ordered tasks. Use when you have a story spec and need to break work into implementable tasks with story-scoped files under `jira-spec/{story-id}/`. Use when a task feels too large to start, when you need to estimate scope, or when parallel work is possible.
development
Discovers and invokes agent skills. Use when starting a session or when you need to discover which skill applies to the current task. This is the meta-skill that governs how all other skills are discovered and invoked.