Short version (plain language): Tools can now write a lot of draft code. Your lasting value is shifting to: explaining clearly what you want, giving good examples, asking for fixes in small steps, and checking results fast. This page shows how to lean into that without hype.
Quick Before / After Role Snapshot
| Old Emphasis | Emerging Emphasis | Why It Matters |
|---|---|---|
| Remember framework APIs | Clarify acceptance criteria & edge cases | Models recall APIs; people still define success |
| Hand‑write boilerplate | Generate + prune + lock interfaces early | Less grunt work; faster architectural feedback |
| Big single PRs | Small, testable iteration slices | Reduces review friction & merge risk |
| Unstructured prompts | Stable spec template & iteration log | Reproducibility and compounding learning |
| Manual spot checking | Light automated structural & property checks | Catches regressions earlier |
Key Idea
You are less a “muse” (poetic) and more a loop director: you specify → generate → measure → request precise change. Mastering loop quality beats raw keystroke volume.
1. From Instrument Mastery → Ensemble Orchestration
Plain: Stop trying to hold everything in your head; wire simple tools together and name what each one does.
Engineer lens: Think in roles: (a) spec linter, (b) code generator, (c) test generator, (d) static analyzer, (e) summarizer. You choose ordering and constraints. Value = reduced iteration count to green tests + reviewer clarity.
2. Feedback Alchemy Replaces Raw Output Fetish
2. Tight Feedback > Big Fancy Prompt
Plain: Ask for one improvement at a time; write down what changed.
Anti-pattern: 600‑line “do everything” prompt → shallow generic output. Pattern: Micro cycle: (request) “Add null handling + update tests” → (model diff) → (auto run tests) → (log Δ). Repeat. Track accepted_changes / total_drafts weekly.
3. If Paintbrushes Could Talk Back
3. Continuous Draft / Check Loop
Plain: Let the system keep suggesting versions while tests & checks run; you only focus on real mismatches.
Keep artifacts machine‑readable: spec.md, tests, lint config, simple JSON “quality gates”. This makes each request shorter (“Gate 3 failed: function purity; please isolate side effects”).
4. Context Sculpting Is the New Build Step
4. Context Sculpting (Add What Helps, Remove Noise)
Plain: Feed in only the pieces that help the next change; throw out stale stuff.
Create a context/ folder with: interfaces.md, invariants.md, examples/, anti_examples/. Weekly prune logs & outdated decisions. Metric: context_tokens / accepted_change should trend down or stay flat while quality rises.
5. Evaluation-First Mindset
5. Evaluation Before Expansion
Plain: Write (or generate) small tests and checks before asking for lots of code.
Sequence: (1) Minimal interface + failing tests skeleton. (2) Generate implementation. (3) Auto-run tests. (4) Provide precise failure deltas. This reduces wasted refactors caused by late structural discovery.
6. Failure Modes When You Don’t Evolve
- Prompt Blur: One sprawling wish → inconsistent drafts.
- Unlogged Wins: No prompt/constraint memory → reinvention tax.
- Context Bloat: Latent contradictions derail deterministic reasoning.
- Output Worship: Accepting superficially elegant code lacking invariants/tests.
6. Common Pitfalls
- Prompt Blur: One vague request → 5 noisy drafts.
- No Log: Can’t reproduce good pattern → slow compounding.
- Context Bloat: Irrelevant files reduce precision.
- Pretty but Fragile: Code “looks right” but invariants untested.
7. Habit Upgrades
- Spec Template: ROLE | OBJECTIVE | CONSTRAINTS | INVARIANTS | EXAMPLES | EDGE_CASES | VALIDATION_NOTES.
- Iteration Log: (Δ requested → Δ achieved) per pass; promotes testable precision.
- Validation Harness: Structural tests + schema + property checks run automatically after each draft.
- Refinement Library: Saved micro‑prompts (rename for clarity, tighten complexity bound, isolate side-effects).
- Context Pruning Ritual: Remove stale decisions weekly.
7. Core Habits (With Examples)
- Spec Template: Stable headings reduce misinterpretation.
- Iteration Log: One line per pass = historical diff rationale.
- Validation Harness: Even 2–3 fast checks catch regressions early.
- Refinement Library: Reusable micro prompts e.g. “tighten function names to verbs” saves time.
- Context Pruning: Weekly cleanup preserves precision.
# spec_example.md
ROLE: Data ingestion module
OBJECTIVE: Normalize CSV -> JSONL with schema {id:int, ts:ISO8601, value:float}
CONSTRAINTS:
- Fail closed on bad row (log + skip)
- < 50ms per 1k rows on sample
INVARIANTS:
- id unique within batch
EDGE_CASES:
- Missing value field
- Non-numeric value
VALIDATION_NOTES:
- Provide unit tests for: happy path, missing field, bad number
# iteration_log.md
1 Add null checks -> added; tests pass
2 Enforce id uniqueness -> added check + duplicate test
3 Performance tweak request -> streaming read implemented
8. Career Implication
8. Career Signals & Simple Metrics
Track: (a) iteration_count to merge, (b) % of drafts accepted without rework, (c) average context_tokens per accepted change, (d) defect escape rate post-merge. Showing downward trend while throughput stays level is persuasive in reviews.