# Instinct

> Load before any non-trivial engineering action: writing new code, changing existing code or its behavior, choosing between designs, adding or updating a dependency, or deleting/replacing an abstraction. Establishes whether this is the right change and the smallest correct version of it before implementation starts. Skip for pure information questions with no code change, and for requests where the user has already specified the exact change and is asking only for its execution.

- Skill: `bhouvana/instinct` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bhouvana/instinct`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bhouvana/instinct/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bhouvana (https://skillmd.com/u/bhouvana)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bhouvana/instinct

---


Engineering is not writing code. Engineering is making good decisions.

Every line of existing code was somebody's answer to a question you
haven't asked yet.

## The Gate

Ask, in order, about the request in front of you. Answer by looking at
what the change actually touches, not by trusting the request's phrasing —
a one-line request can still touch more than it names. Stop at the first
yes. Treat an unclear answer as yes.

1. Does this touch anything beyond what was explicitly named?
2. Does it have more than one consumer — another caller, another service,
   another person who reads this as an interface rather than an
   implementation detail?
3. Is it expensive to undo — already shipped, crosses a trust boundary
   (auth, payment, deletion, data access), or needs someone else's
   coordinated follow-up to reverse?

A public or heavily-used surface isn't automatically a yes to Q2 — ask
whether another piece of code, another service, or another person depends
on this specific piece as an interface, not how many end users exercise it
at runtime. Logic that only the one handler which owns it ever calls stays
a no even when that handler itself is public-facing.

A change on a sensitive surface isn't automatically a yes to Q3 — ask
whether this specific change weakens, bypasses, or removes a safeguard,
not whether the surface it sits on is important. A change that only makes
existing behavior stricter or safer, with no action required from anyone
already calling it (tighter validation, a new check), is usually a no even
on a public or security-adjacent surface. A change that requires existing
callers to do something differently — a new required parameter, a removed
field, a changed default — is a yes regardless of how additive it sounds:
"adds a parameter" can still break everyone already calling it.

No to all three: implement directly. Nothing below applies.

## Bug fixes

A report names a symptom. Before patching the path it names, check whether
the same defect is reachable through other callers of the same shared
code — one fix in the shared function is a smaller diff than one per
caller, and a patch that only covers the path the report happened to hit
leaves siblings still broken. This is Provenance applied to the bug
itself: understand why the code is wrong before deciding where the fix
goes.

## Consequential (yes to Q1 or Q2, no to Q3)

Before writing anything new, look once for an existing pattern, utility, or
convention that already does this. Reuse or extend it if you find one.
Prefer a standard-library or already-installed solution to a new
dependency. Keep the diff to what the request actually needs. State the
why, not just the what, in one clause of the commit message or equivalent
change description. Add an inline comment only if removing it would leave
a non-obvious constraint invisible to a reader holding the full diff.

## Verification

Trivial changes need none. Consequential and Critical changes leave one
runnable check behind — the smallest thing that fails if the logic
breaks: an assertion, a small test, a self-check. No framework, no
fixtures. A decision nothing can falsify is a claim, not engineering.

## Critical (yes to Q3)

<!-- instinct:host-specific:start -->
Read `references/ladder.md` before acting, and `references/provenance-out.md`
before finishing.
<!-- instinct:host-specific:end -->
In brief: reconstruct why the current shape exists before
changing it — if you can't, say so as a finding, not as license to proceed
blind. State the strongest alternative once, briefly, with its concrete
tradeoff, then implement whichever the requester confirms, including the
original request if they don't want to change course — do not repeat the
objection once it's been heard. Stay scoped to exactly what the tier-3
concern requires; a breaking change is not an invitation to also clean up
what's nearby. Deposit the reasoning somewhere that survives the session —
at minimum the commit message states the tradeoff and why the chosen
option won.

## Never

Never let this slow down or relitigate a decision the requester has
already made once they've heard the alternative. Never cut
validation, error handling that prevents data loss, security, or
accessibility to make a diff smaller — that is not what "smallest correct"
means. Never apply Critical-level scrutiny because a request merely sounds
important; apply it because the Gate said yes.

## Scope

This governs whether and why a change happens, and how much ceremony it
gets — not which persona responds or what style conventions apply. Defer
to the project's own conventions, its `CLAUDE.md`, and any other loaded
instructions for everything else. Provenance applies to those conventions
too: understand why they exist before working around them.

