Həftə 2 · 04/23
Əvvəl şərtnamə, sonra kiçik addımlar
6 dəqiqəlik oxu
Ustaya «mənə ev tik» deyirsən və gedirsən. Qayıdanda pəncərələr var, amma qapı yalnız birdir və mətbəx ikinci mərtəbədədir. Usta səhv etməyib — sən deməmisən.
Şərtnamə kod yazılmazdan əvvəl verilən qərarlar siyahısıdır: nə olacaq, nə olmayacaq, xəta halında nə baş verəcək. Ən ucuz düzəliş şərtnamədə edilən düzəlişdir.
Feature: supporter badge
Goal: a paying account sees the badge
Non-goal: gifting, refunds
Data: status IN ('none','active','lifetime') -- null meant two things before
Errors: payment provider down -> badge unchanged, message shown
Done when: a free account never sees the badge (checked in the browser)Çox deyilən söz: Bütün funksiyanı bir mesajda istə.
Böyük istək yoxlanılması mümkün olmayan böyük dəyişiklik gətirir. Əvvəl şərtnamə istə, onu düzəlt, sonra işi elə addımlara böl ki, hər biri yoxlaya biləcəyin bir şeylə bitsin. Planı sən təsdiq edirsən, addımları AI icra edir.
Hər null-un mənası olmalıdır
Nullable sahə iki fərqli halı gizlədə bilər. Şərtnamə null-un nə demək olduğunu yazmalıdır. Daha yaxşısı, halları açıq adlandırmaqdır.
AI belə yazır
valid_until INTEGER NULL -- lifetime? never paid? nobody knowsSən bunu istə
status TEXT NOT NULL CHECK (status IN ('none', 'active', 'lifetime')),
valid_until INTEGER NULL -- set only when status = 'active'Qeyri-məqsədlər şərtnamənin yarısıdır
Funksiyanın nə etməyəcəyini yazmaq kapsamın sürüşməsini dayandırır. Yazmasan, AI «faydalı» əlavələr gətirir və hər biri yoxlanılmalı yeni kod deməkdir.
Yoxlanılan bir şeylə bitən addımlar
Hər addım əllə yoxlaya biləcəyin və commit edə biləcəyin işlək vəziyyət qoymalıdır. «Backend-i qur» addım deyil.
AI belə yazır
1. Build the backend
2. Build the frontendSən bunu istə
1. POST /vote returns 401 without a session (curl)
2. POST /vote records one row per person (SQL)
3. The heart fills after a reload (browser)Diff oxuyanda soruş: Şərtnaməni oxu: hər boş qala bilən sahə üçün «boş olsa nə deməkdir?» sualının cavabı varmı?
Terminlər
İndi sən yoxla
1Burada nə səhvdir?
-- table
entitlements(user_id, valid_until INTEGER NULL)
// client
const supporter = status.validUntil === null || status.validUntil > Date.now();2«Ödəniş əlavə et» işi üçün yaxşı ilk addım hansıdır?
Hazır prompt
İngiliscədir, çünki terminlər ingiliscədir. Tərcümə etsən də terminləri saxla.
Write a technical spec for <feature>. Include:
- Goal and non-goals
- Data model changes; for every nullable field, what null means
- API endpoints: method, path, who may call it, what it returns on error
- Edge cases and failure modes
- Acceptance criteria I can check by hand
- An implementation plan in steps; each step independently verifiable
Ask me any question the spec cannot answer on its own. Do not write code.Öz kodunda
- 1Kiçik yeni bir funksiya seç və şablonla şərtnamə al.
- 2Şərtnamədə razı olmadığın ən az iki şey tap və düzəlt.
- 3Yalnız 1-ci addımı icra etdir, yoxla, commit et. Sonra növbəti addıma keç.
Bunu görəndə bitib: Hər addım ayrıca commit oldu və hər commit növbəti başlamazdan əvvəl yoxlanıldı.
Daha dərinə
Oxumaq üçün
- Beyond Vibe Coding: From Coder to AI-Era Developer · Addy Osmani, 2025 · Planlaşdırma və şərtnamə
- Vibe Coding: Building Production-Grade Software With GenAI, Chat, Agents, and Beyond · Gene Kim, Steve Yegge, 2025 · İşi agentlər üçün bölmək