RƏSƏDXANA

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)
Bu kod deyil — plandır. Amma kodun hansı halları daşıyacağını burada həll edirsən.

Ç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 knows

Sə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 frontend

Sə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

specification
Nəyin, niyə və hansı sərhədlərlə qurulacağını deyən sənəd — koddan əvvəl.
acceptance criteria
İşin bitdiyini göstərən, əllə yoxlana bilən şərtlər.
problem decomposition
Böyük işi hər biri ayrıca yoxlanılan kiçik addımlara bölmək.
vertical slice
Bir funksiyanın bütün qatlardan (UI, API, DB) keçən ən kiçik işlək hissəsi.
scope creep
İşin yolda səssizcə böyüməsi — AI ilə çox tez baş verir.
plan mode
Agentin kodu dəyişmədən yalnız plan qurduğu rejim; təsdiqdən sonra icra edir.

İ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.

prompt
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

  1. 1Kiçik yeni bir funksiya seç və şablonla şərtnamə al.
  2. 2Şərtnamədə razı olmadığın ən az iki şey tap və düzəlt.
  3. 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