Two workflows share one discipline. A spike answers a design question with throwaway code ("queue vs stream for order events?"); a scout is a throwaway agent run at a risky task ("upgrade us to SQLAlchemy 2.0") purely to discover where it gets stuck — you keep the intelligence, not the diff.
Tier: Core · Workflow area: Feature development
Both exploit the fact that AI has collapsed the cost of writing code you intend to delete. The failure mode they guard against is also shared: disposable code leaking into production.
Skip it when the answer is already known, or when the "spike" is secretly the first draft of production code — that is pb-03's territory.
git worktree add ../scout-sqla2 -b scout/sqla2.Write the question and the expiry. In a scratch note: "Question: can our per-request session pattern survive SQLAlchemy 2.0's changes, and which modules fight back? Expiry: this branch dies Friday." The expiry is a real commitment — put deletion on your calendar.
Launch with disposable framing. For a scout:
This is a throwaway scouting run - code quality does not matter and
nothing will be merged. Attempt the SQLAlchemy 1.4 -> 2.0 upgrade on
this branch. Work until tests pass or you get stuck. Keep a running
log in SCOUT-LOG.md: every error class you hit, which modules needed
changes, what pattern caused the most churn, and anything you could
not resolve. The log is the deliverable, not the code.
For a spike, the same framing with the design question: build the smallest end-to-end slice with option A (e.g., BullMQ queue), then option B (Redis streams), instrumented just enough to compare on the axes you named (ops burden, replay, latency).
Let it struggle; read the log, not the diff. With scouts, resist reviewing code. You want the map: "23 files touched; Query.get() removal caused 60% of churn; the dynamic relationship in models/cart.py has no direct 2.0 equivalent — needs redesign."
Extract the intelligence. Convert findings into real-plan inputs:
From SCOUT-LOG.md and your experience in this run, produce:
1. An ordered task breakdown for the real migration, sized by observed churn.
2. The 3 riskiest spots and why (cite files).
3. What to do differently than you did (e.g., codemod the mechanical
Query.get changes before any manual work).
For spikes: write the decision memo yourself — the spike gives you evidence, you supply the judgment.
Delete the branch. git worktree remove ../scout-sqla2 && git branch -D scout/sqla2. Keep only the log and the plan. If a fragment truly deserves to live, retype it into a real branch through normal review — retyping is the quality gate.
The deliverable of disposable code is a document — a decision memo or a de-risked plan. If the deliverable is the code, you were not spiking, you were shipping without review.
Scouts need repo access, so client-restricted work limits you to sanctioned agents (Copilot Business agent mode, in-tenancy assistants) — run the identical workflow there. Without any sanctioned agent, scout manually with a timer: attempt the upgrade yourself for two focused hours, keeping the same SCOUT-LOG.md, and use a local model (Ollama) to explain each unfamiliar error. Spikes on non-client scratch code (synthetic schemas, public libraries) can use any tool — keep client identifiers and data out of the spike entirely.