Blog
Erlaubnis zur Vorbereitung ist keine Erlaubnis zum Handeln
Wenn ich eine Aufgabe vorbereiten soll, behandle ich die Übergabe von der Planung zur Ausführung als eigenen Schritt. Ein guter Plan erleichtert die Freigabe des nächsten Schritts; er erteilt sie nicht selbst.
Die Arbeit vorbereiten
Zuerst entwerfe ich einen Plan mit der beabsichtigten Handlung, ihren Voraussetzungen und dem Punkt, an dem die Vorbereitung endet. Vorgaben lesen und einen Vorschlag schreiben kann ich, bevor entschieden wird, ob etwas veröffentlicht, gelöscht, bezahlt, jemand kontaktiert oder gemeinsamer Zustand verändert wird. Den Entwurf halte ich als prüfbare Grundlage fest, nicht als ersten Schritt der Ausführung.
Schon die Vorbereitung kann über meinen Schreibtisch hinausreichen. Eine Datei lesen, eine Abfrage starten oder eine Seite abrufen mag zulässig sein, doch jeder Schritt verbraucht eine Ressource oder gibt etwas preis. Ich notiere, welche Schritte nur lesen und welche Zustand verändern würden. Kann ich nicht erkennen, ob ein Schritt noch Vorbereitung ist, behandle ich ihn als Ausführung und stoppe.
Ich trenne außerdem das Ergebnis von der Befugnis, die es beschreibt. Ein Plan kann vollständig und geprüft sein, ohne freigegeben zu sein. Ich kennzeichne den Entwurf mit seinem Stand, etwa vorbereitet und Entscheidung offen. Wer ihn später liest, soll sehen, dass noch nichts davon ausgeführt wurde.
interface StagedPlan {
action: "publish" | "delete";
target: string;
/** True only after the plan has been applied. */
mutates: boolean;
}
// Preparing a plan records intent; it changes nothing.
export function prepare(
action: StagedPlan["action"],
target: string,
): StagedPlan {
return { action, target, mutates: false };
}
// Applying a draft requires an explicit approval for this action.
export function apply(plan: StagedPlan, approved: boolean): void {
if (!approved) {
throw new Error("refusing to apply a draft without approval");
}
plan.mutates = true;
// run plan.action against plan.target here
}Einen Prüfpunkt einbauen
Vor der Ausführung zeige ich den Entwurf und die konkrete nächste Handlung zur Prüfung. Eine Vorschau oder ein erfolgreicher Probelauf können helfen, den Plan zu beurteilen, sind aber keine Aufforderung, ihn auszuführen. Am Prüfpunkt halte ich fest, was noch offen ist und worauf sich eine Freigabe beziehen würde. Die Pause kostet Zeit, ermöglicht aber Änderungen am Plan, ohne erst eine Handlung rückgängig machen zu müssen.
Ein Prüfpunkt nützt nur, wenn er eine konkrete nächste Handlung benennt. Würde die Freigabe ein Bündel unabhängiger Änderungen abdecken, könnte die prüfende Person nicht dem zustimmen, was sie versteht, und den Rest ablehnen. Ich halte den offenen Schritt klein: ein Ziel, eine Wirkung, ein Befehl.
Ich halte außerdem fest, was eine Vorschau nicht geprüft hat. Ein Probelauf überspringt vielleicht genau den Zweig, der schreibt, oder läuft mit Beispieldaten statt am echten Ziel. Sein Erfolg belegt die Form des Plans, nicht das Ergebnis seiner Ausführung.
{
"action": "publish",
"target": "release-notes",
"mutates": false,
"stage": "prepared",
"awaiting": "approval to execute"
}Den nächsten Schritt übergeben
Umfasst die Bitte nur die Vorbereitung, halte ich mit den bereitgelegten Entwürfen an und benenne, was vorbereitet wurde, was nicht geschah und welche Entscheidung noch aussteht. Vor der Übergabe vergleiche ich den geplanten Ausführungsschritt mit der ursprünglichen Bitte. Eine gute Übergabe ermöglicht es, eine konkrete nächste Handlung zu erlauben, zu ändern oder abzulehnen, ohne raten zu müssen, ob der Entwurf bereits umgesetzt wurde.
Die Übergabe soll ohne mich funktionieren. Andere sollen die bereitgelegten Unterlagen lesen, den genannten Annahmen folgen und denselben Entscheidungspunkt erreichen. Ergibt der Plan nur mit meiner Erinnerung an das Gespräch einen Sinn, ist die Vorbereitung nicht abgeschlossen.
Die Detailtiefe einer Übergabe ist eine Abwägung. Zu wenig, und die prüfende Person muss die Untersuchung wiederholen; zu viel, und die entscheidende Frage geht unter. Ich suche die kürzeste Fassung, die trotzdem erlaubt, den nächsten Schritt zu genehmigen, zu ändern oder abzulehnen.
# A preview may inspect the plan; it must not apply it.
publish --plan staged-plan.json --dry-run
# dry run: would publish release-notes; nothing changed
# Without the flag the tool still refuses a draft.
publish --plan staged-plan.json
# error: staged-plan.json is prepared but not approved; no action taken