Przejdź do treści
Biblioteka skilli
Programowanie · Przegląd i audyt

doubt-driven-development

/doubt-driven-development

Adwersaryjnie obala wybrane podejście przed zatwierdzeniem przy zmianach wysokiego ryzyka lub trudnych do odwrócenia: migracje schematu i danych, auth, płatności, publiczne API, operacje destrukcyjne i współbieżność.

Autor
etr ↗
Repozytorium
groundwork ↗
Licencja
MIT
Ostatnia zmiana repozytorium
22.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 22.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Adwersaryjnie obala wybrane podejście przed zatwierdzeniem przy zmianach wysokiego ryzyka lub trudnych do odwrócenia: migracje schematu i danych, auth, płatności, publiczne API, operacje destrukcyjne i współbieżność.

Oryginalny opis (EN)

Use when building a high-stakes or hard-to-reverse change - schema/data migrations, auth, payments, public API surface, destructive operations, or concurrency - to adversarially refute the chosen approach BEFORE committing to it

Jak działa

  1. Overview
  2. When to Use
  3. Process
  4. Rationalizations
  5. Red Flags - STOP
  6. Verification
Sekcje z nagłówków SKILL.md, w oryginale · 84 linii, 869 słów
Podgląd SKILL.md
---
name: doubt-driven-development
description: Use when building a high-stakes or hard-to-reverse change - schema/data migrations, auth, payments, public API surface, destructive operations, or concurrency - to adversarially refute the chosen approach BEFORE committing to it
---

# Doubt-Driven Development

## Overview

For most code, optimism is fine: try it, run the test, fix what breaks. For changes you cannot cheaply undo, optimism is a liability. Doubt-driven development inverts the default — you actively try to *refute* your chosen approach before you build it, and you require concrete evidence to clear each doubt.

**Core principle:** default to refuted when uncertain. A doubt you cannot disprove with evidence is a reason to choose a safer path, not a reason to proceed and hope.

This is review applied *during* the build, by you, before a single line is committed. It is distinct from [[validate]], the post-hoc multi-agent loop that runs after implementation — that catches what got built wrong; this catches what should never have been built that way.

## When to Use

Apply when the change is high-stakes or hard to reverse:

- **Schema / data migrations** — backfills, column drops, type changes, anything that mutates existing rows
- **Authentication / authorization** — session handling, token validation, permission checks
- **Payments / billing** — charges, refunds, idempotency, money math
- **Public API surface** — endpoints or contracts other teams or users depend on
- **Destructive / irreversible operations** — deletes, overwrites, bulk updates, cache purges
- **Concurrency** — locking, ordering, race-prone shared state

Routine, easily-reverted CRUD does **not** need this. Reserve the ceremony for blast radius.

## Process

### 1. Name the decision

State the high-stakes decision in one sentence, explicitly. "I will run the backfill in a single transaction over the whole table." Vague intent cannot be refuted. If you cannot name it crisply, you do not understand it well enough to commit to it.

### 2. Adopt the skeptic stance — refute, don't defend

Before implementing, switch jobs. Your job is now to *break* the chosen approach, not to justify it. Produce, in writing:

- **How it fails** — concrete failure modes, not "it should be fine"
- **What it breaks** — existing callers, data, invariants, in-flight requests
- **What would disprove it** — the specific observation that would prove the approach wrong (the row count mismatches; the lock is held > N seconds; the old client gets a 500)

A skeptic who lists zero failure modes is not trying. Push until you have real ones.

### 3. Demand evidence per doubt

Each doubt is cleared only by concrete evidence — a **test**, a **doc/spec**, or a **spike** (throwaway experiment against real-ish data). "I'm pretty sure" does not clear a doubt. If clearing a doubt requires a behavior, write the failing test first ([[test-driven-development]]) so the evidence is durable. Spike code lives in the task worktree (or a scratch worktree via [[use-git-worktree]]) and is never committed — never in the shared workspace, where it pollutes other work.

### 4. Resolve: clear, refute, or escalate

- **Cleared** — evidence disproves the doubt. Proceed on that point.
- **Refuted** — evidence confirms the failure, or you cannot get evidence after honest effort. Pick a safer, reversible path (expand/contract migration instead of in-place; feature flag; dry-run mode; smaller batches) or **escalate to the human** with the doubt and what you tried.

Uncertainty after honest effort counts as **refuted**, not as permission to proceed.

## Rationalizations

| Excuse | Reality |
|--------|---------|
| "I'm pretty sure it works" | Certainty without evidence is a guess. Get the test, doc, or spike. |
| "It's probably fine, low risk" | You put it on the high-stakes list. Probably-fine is the exact failure this catches. |
| "[[validate]] will catch it later" | Validate runs after the irreversible thing already happened. Doubt runs before. |
| "Refuting my own plan wastes time" | A bad migration or auth bug costs far more than the spike that would have caught it. |
| "I can't prove it's safe, but I can't prove it's unsafe either" | Default to refuted. The burden is on the approach to clear the doubt, not on you to disprove it. |
| "Adding a flag / dry-run is over-engineering" | For irreversible work, reversibility is the requirement, not a luxury. |

## Red Flags - STOP

- Listing only reasons the approach works, none of how it fails
- "Should be fine" / "I'm pretty sure" / "probably" as the basis to proceed
- Clearing a doubt with reasoning instead of a test, doc, or spike
- Treating "I couldn't find a problem" as "there is no problem"
- Running the irreversible step with no dry-run, no flag, no rollback
- Proceeding while a named doubt is still open

## Verification

Before committing the high-stakes change:

- [ ] The decision is named in one explicit sentence
- [ ] At least one concrete failure mode and its disproving observation are written down
- [ ] Every doubt is either cleared by evidence (test/doc/spike) or marked refuted
- [ ] No open doubt remains; uncertain ones were treated as refuted
- [ ] If refuted, a safer reversible path was taken or the human was escalated to
- [ ] The irreversible step has a rollback, dry-run, or flag — or proof it needs none

Can't check every box? The doubt is not cleared. Do not commit.

Wersje

RepozytoriumWynikLicencja
Ta strona · etr/groundwork100MIT
lucasouzadev/agent-kit-skill100MIT
zeative/satgas100AGPL-3.0
usermahiro/opencodee100MIT
drvoss/everything-copilot-cli100MIT
muhammadshaharyarnaeem/blackgoat-agentskills100MIT
vinvcn/addyosmani-agent-skills-zh100MIT
VorElze/hermes-office-skills100MIT
nasac0x/code-orchestrator100MIT

Migawka bazy z 13.11.2026 · wersja paczki 357d33fc02f1 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 90approach
    Ocenia, czy proponowana architektura, plan lub poprawka to najczystsze i trwałe podejście przed zatwierdzeniem.
  • 90acme-reversibility-stance
    Sprawdza migracje Acme Sync, zmiany wersji schematu i operacje destrukcyjne, czy da się je cofnąć bez interwencji.
  • 100forge-highstakes
    Wymusza punkt kontrolny przed nieodwracalnymi zmianami: migracjami schematu, usuwaniem plików, zmianą auth, konfiguracją produkcji.
  • 100sdlc-doubt
    Poddaje niezależnej, adwersaryjnej kontroli istotną decyzję techniczną, oddając ją osobnemu recenzentowi do szukania problemów.
  • 100api-key-auth-setup
    Prawdopodobnie konfiguruje uwierzytelnianie kluczem API i uruchamia się automatycznie na frazy związane z jego ustawieniem w kategorii rozwoju API.
  • 90prototype
    Buduje jednorazowy kod, który sprawdza, czy wybrane podejście, biblioteka lub maszyna stanów zadziała przed implementacją.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.