poniedziałek, 22 czerwca 2026

{dev} forge - Jak pisać specyfikacje pod AI?

Jednym z największych nieporozumień ery AI-assisted development jest przekonanie, że wystarczy nauczyć się pisać lepsze prompty.

Przez ostatnie dwa lata internet zalały poradniki o prompt engineeringu:

  • jak pisać prompty,
  • jak używać odpowiednich słów,
  • jak budować role,
  • jak poprawnie instruować modele.

To wszystko jest przydatne.

Ale w większych projektach problem szybko przestaje dotyczyć promptów.

Problemem staje się jakość specyfikacji.



Bo niezależnie od tego, czy używasz Codex, Claude Code, Cursor, Gemini CLI czy OpenSpec – wszystkie te narzędzia mają jedną wspólną cechę:

Jakość wyjścia jest ograniczona jakością wejścia.

I właśnie dlatego umiejętność pisania specyfikacji pod AI staje się jedną z najważniejszych kompetencji nowoczesnego software engineeringu.

Największy błąd: traktowanie AI jak człowieka

Większość źle napisanych specyfikacji wynika z jednego założenia:

Autor zakłada, że AI rozumie kontekst tak samo jak człowiek.

To nieprawda.

Doświadczony developer potrafi:

  • dopytać o szczegóły,
  • wyłapać nieścisłości,
  • domyślić się intencji biznesowej,
  • rozpoznać brakujące wymagania.

AI działa inaczej.

Jeśli czegoś nie opiszesz, model najczęściej:

  • założy własną interpretację,
  • uzupełni luki statystycznie,
  • wygeneruje „najbardziej prawdopodobne” rozwiązanie.

To właśnie dlatego dobra specyfikacja dla AI musi być bardziej precyzyjna niż specyfikacja dla człowieka.

Zasada #1: Zacznij od intencji, nie od rozwiązania

Najczęstszy antywzorzec wygląda tak:

Dodaj tabelę customer_discount
oraz endpoint GET /discounts.

Problem?

Opisujesz rozwiązanie, a nie problem.

Znacznie lepiej napisać:

Intent:
Klienci premium powinni otrzymywać rabaty
zależne od wartości zakupów.

Business Goal:
Zwiększenie retencji klientów premium.

Success Metric:
Wzrost liczby ponownych zakupów o 10%.

W ten sposób AI rozumie nie tylko co ma zrobić, ale również dlaczego.

Zasada #2: Opisuj domenę przed implementacją

Większość projektów nie upada przez błędne API.

Upada przez błędne zrozumienie domeny.

Zanim opiszesz endpointy, opisz:

  • encje,
  • relacje,
  • słownik pojęć,
  • reguły biznesowe.

Przykład:

Entities:
- Customer
- LoyaltyAccount
- LoyaltyTransaction

Rules:
- Jeden klient może mieć tylko jedno konto lojalnościowe
- Punkty wygasają po 365 dniach
- Zwrot zamówienia usuwa przyznane punkty

AI dużo lepiej radzi sobie z implementacją, gdy najpierw rozumie model domenowy.

Zasada #3: Używaj przykładów zamiast opisów

To jedna z najważniejszych lekcji wyniesionych z BDD i Specification by Example.

Zamiast pisać:

System powinien poprawnie naliczać punkty.

Napisz:

Scenario:
Customer places order worth 100 PLN

Given:
Customer is Premium

When:
Order is completed

Then:
100 loyalty points are added

Dla AI przykład jest znacznie bardziej jednoznaczny niż ogólny opis.

Zasada #4: Dokumentuj edge case'y

Większość błędów nie pojawia się w głównym scenariuszu.

Pojawia się na obrzeżach systemu.

Dlatego dobra specyfikacja zawsze zawiera sekcję:

Edge Cases

Na przykład:

Edge Cases:

- Refund after points were spent
- Customer account merged
- Loyalty account deleted
- Promotion expired during checkout

Jeśli nie opiszesz edge case'ów, AI je wymyśli.

I nie zawsze będą to właściwe założenia.

Zasada #5: Definiuj kontrakty

AI świetnie generuje kod.

Jeszcze lepiej generuje kod na podstawie kontraktów.

Dlatego specyfikacja powinna zawierać:

  • API Contract
  • Event Contract
  • Data Contract

Przykład:

POST /loyalty/points

Request:
{
  "customerId": "123",
  "orderValue": 100
}

Response:
{
  "pointsAdded": 100,
  "currentBalance": 1200
}

To eliminuje ogromną część niejednoznaczności.

Zasada #6: Opisuj ograniczenia architektoniczne

AI nie zna architektury Twojej organizacji.

Dlatego trzeba ją opisać.

Na przykład:

Constraints:

- Java 21
- Spring Boot 3
- PostgreSQL
- Event-driven architecture
- Kafka only
- No synchronous communication

Dzięki temu AI nie zaproponuje rozwiązania sprzecznego z kierunkiem architektonicznym organizacji.

Zasada #7: Opisuj kryteria walidacji

Jednym z największych błędów jest kończenie specyfikacji na implementacji.

Dobra specyfikacja odpowiada również na pytanie:

Skąd będziemy wiedzieć, że rozwiązanie jest poprawne?

Przykład:

Validation:

- Unit tests coverage > 80%
- Integration tests pass
- API contract tests pass
- Loyalty points calculation verified

To pozwala AI nie tylko wygenerować kod, ale również zrozumieć sposób jego weryfikacji.

Przykład pełnej specyfikacji pod AI

Intent:
Introduce loyalty program.

Business Goal:
Increase customer retention.

Entities:
Customer
LoyaltyAccount
LoyaltyTransaction

Rules:
1 point per 1 PLN.
Points expire after 365 days.

Scenario:
Given Premium Customer
When Order Completed
Then Points Added

API:
POST /loyalty/points

Edge Cases:
Refunds
Expired points

Constraints:
Java 21
Spring Boot 3
Kafka

Validation:
Unit Tests
Contract Tests
Integration Tests

Zauważ, że taka specyfikacja jest:

  • krótka,
  • jednoznaczna,
  • łatwa do wersjonowania,
  • czytelna dla człowieka,
  • bardzo czytelna dla AI.

Najważniejsza zmiana mentalna

Przez wiele lat specyfikacja była czymś, co prowadziło do kodu.

W erze AI zaczyna być czymś więcej.

Specyfikacja staje się:

  • kontraktem,
  • źródłem prawdy,
  • interfejsem pomiędzy człowiekiem a AI.

I właśnie dlatego coraz częściej słyszymy o Spec-Driven Development.

Nie dlatego, że AI wymaga więcej dokumentacji.

Ale dlatego, że AI wymaga lepszej dokumentacji.

Podsumowanie

Jeśli miałbym sprowadzić cały artykuł do jednego zdania, brzmiałoby ono tak:

Nie pisz specyfikacji tak, jakby czytał ją człowiek. Pisz ją tak, jakby miała zostać wykonana przez maszynę.

Bo właśnie do tego zmierza nowoczesny software engineering.

Coraz częściej nie programujemy bezpośrednio systemów.

Projektujemy specyfikacje, które systemy budują.

piątek, 19 czerwca 2026

{dev} forge – Developer czy Spec Engineer? Jak AI zmienia rolę programisty

Przez ostatnie kilkadziesiąt lat odpowiedź na pytanie „czym zajmuje się programista?” była stosunkowo prosta.

Programista analizował wymagania, projektował rozwiązanie i pisał kod.

Oczywiście w zależności od doświadczenia dochodziły dodatkowe obowiązki związane z architekturą, analizą biznesową czy mentoringiem, ale rdzeń zawodu pozostawał ten sam:

Developer był przede wszystkim producentem kodu.




Dziś jednak znajdujemy się w momencie, który może okazać się jedną z największych zmian w historii software engineeringu.

Po raz pierwszy od dekad produkcja kodu przestaje być głównym ograniczeniem procesu wytwarzania oprogramowania.

Modele takie jak Codex, Claude Code, Gemini CLI czy Cursor potrafią wygenerować w kilka minut ilość kodu, której napisanie zajmowało kiedyś wiele godzin.

To prowadzi do bardzo ciekawego pytania:

Czy przyszłością programisty jest bycie lepszym coderem, czy raczej lepszym projektantem specyfikacji?

Od rzemieślnika kodu do projektanta systemów

Przez wiele lat produktywność programisty była mocno związana z szybkością tworzenia kodu.

Znajomość frameworków, języków programowania i bibliotek była głównym źródłem przewagi.

Dziś sytuacja zaczyna się zmieniać.

Coraz częściej obserwujemy, że największą wartość dostarcza nie osoba, która najszybciej pisze kod, ale osoba, która najlepiej definiuje problem.

AI potrafi napisać endpoint.

AI potrafi wygenerować testy.

AI potrafi stworzyć dokumentację.

Ale nadal nie potrafi samodzielnie odpowiedzieć na pytania:

  • Jaki problem biznesowy rozwiązujemy?
  • Jakie są reguły domenowe?
  • Jakie są granice systemu?
  • Jakie kompromisy architektoniczne akceptujemy?
  • Jak zmierzymy sukces rozwiązania?

I właśnie tutaj zaczyna pojawiać się nowa specjalizacja.

Kim jest Spec Engineer?

Nie jest to jeszcze oficjalny zawód.

Nie znajdziesz go w większości struktur organizacyjnych.

A jednak coraz więcej zespołów zaczyna wykonywać dokładnie tę pracę.

Spec Engineer to osoba odpowiedzialna za stworzenie specyfikacji, która pozwala ludziom i AI budować rozwiązania w sposób przewidywalny.

Jej zadaniem nie jest przede wszystkim pisanie kodu.

Jej zadaniem jest zaprojektowanie warunków, w których poprawny kod może powstać.

To subtelna, ale fundamentalna różnica.

Nowy łańcuch wartości

Przez lata dominował model:

Requirements → Developer → Code

W świecie AI coraz częściej wygląda to tak:

Requirements → Specification → AI → Code

Lub nawet:

Business Intent
        ↓
Specification
        ↓
Plan
        ↓
Tasks
        ↓
AI Agents
        ↓
Validation
        ↓
Production

Zauważmy coś ciekawego.

Kod nie zniknął.

Ale przestał być centralnym artefaktem procesu.

Coraz częściej staje się produktem ubocznym dobrze przygotowanej specyfikacji.

Dlaczego seniorzy nadal są tak cenni?

Jednym z argumentów często pojawiających się w dyskusjach o AI jest:

„Skoro AI potrafi pisać kod, to po co nam doświadczeni developerzy?”

To pytanie wynika z błędnego założenia.

Zakłada bowiem, że główną wartością seniora jest szybkość kodowania.

W rzeczywistości seniorzy od dawna zarabiają na czymś innym.

Na podejmowaniu decyzji.

Doświadczony architekt lub senior developer potrafi:

  • zidentyfikować ryzyka,
  • zauważyć brakujące wymagania,
  • przewidzieć skutki decyzji architektonicznych,
  • rozpoznać błędne założenia biznesowe,
  • zaprojektować rozwiązanie możliwe do utrzymania za kilka lat.

To są kompetencje, których nie zastępuje automatyczne generowanie kodu.

Wręcz przeciwnie.

Ich znaczenie rośnie.

Czy juniorzy mają problem?

To jeden z najbardziej kontrowersyjnych tematów związanych z AI.

Przez lata junior zdobywał doświadczenie poprzez pisanie dużej ilości kodu.

W ten sposób poznawał:

  • wzorce projektowe,
  • architekturę systemów,
  • debugowanie,
  • integracje,
  • procesy jakościowe.

Jeśli znaczną część tej pracy przejmie AI, pojawia się pytanie:

Skąd przyszli seniorzy będą zdobywać doświadczenie?

Moim zdaniem odpowiedzią jest zmiana sposobu nauki.

Przyszły senior będzie musiał szybciej rozwijać:

  • myślenie systemowe,
  • analizę domenową,
  • modelowanie procesów,
  • projektowanie specyfikacji.

Kod pozostanie ważny, ale przestanie być jedynym źródłem nauki.

Najcenniejsze kompetencje dekady AI

Jeżeli miałbym wskazać kompetencje, których warto rozwijać najwięcej w latach 2026–2030, byłyby to:

1. Domain Modeling

Rozumienie biznesu i domeny problemowej.

2. Systems Thinking

Myślenie o zależnościach między elementami systemu.

3. Architecture

Projektowanie rozwiązań odpornych na zmiany.

4. Specification Design

Umiejętność tworzenia jednoznacznych specyfikacji dla ludzi i AI.

5. Validation Engineering

Definiowanie sposobów walidacji i kontroli jakości.

Warto zauważyć, że tylko jedna z tych kompetencji dotyczy bezpośrednio kodowania.

Spec Engineer jako naturalna ewolucja developera

Nie sądzę, aby zawód developera zniknął.

Nie wierzę również w wizję świata, w którym wszyscy staną się wyłącznie analitykami piszącymi prompty.

Bardziej prawdopodobny wydaje się inny scenariusz.

Developerzy będą stopniowo przesuwać się wyżej w stosie abstrakcji.

Tak jak kiedyś przeszliśmy od assemblera do języków wysokiego poziomu.

Tak jak później przeszliśmy od ręcznego zarządzania serwerami do chmury.

Tak samo dziś przechodzimy od:

Code First

do:

Specification First

Nie oznacza to końca programowania.

Oznacza zmianę punktu ciężkości.

Podsumowanie

Największą zmianą, jaką przynosi AI, nie jest automatyczne generowanie kodu.

Największą zmianą jest przesunięcie wartości z implementacji na intencję.

Coraz mniej istotne staje się to, kto napisze kod szybciej.

Coraz ważniejsze staje się to, kto potrafi lepiej zdefiniować problem, ograniczenia i oczekiwany rezultat.

Dlatego uważam, że w ciągu najbliższych kilku lat będziemy obserwować narodziny nowej specjalizacji:

Spec Engineer – osoby odpowiedzialnej za projektowanie specyfikacji, na podstawie których ludzie i AI wspólnie tworzą oprogramowanie.

Bo jeśli software ma być kuty z pomocą AI, to ktoś musi najpierw przygotować formę, do której ten metal zostanie wlany.

poniedziałek, 18 maja 2026

{dev} forge – Jak budować specyfikację w OpenSpec pod AI coding agents

Do tej pory w serii {dev} forge – How software is forged with AI rozmawialiśmy głównie o ideach:

  • czym jest Spec-Driven Development,
  • dlaczego promptowanie nie skaluje się w projektach,
  • jak wygląda dobra specyfikacja,
  • oraz dlaczego AI potrzebuje kontraktu zamiast luźnej rozmowy.


Pora więc przejść do praktyki.

W tym artykule pokażę, jak wygląda realny workflow pracy z AI w podejściu spec-driven przy użyciu OpenSpec oraz Codex CLI.

I właśnie tutaj zaczyna się najciekawsza część całego trendu.

Bo kiedy pierwszy raz zobaczysz, że AI nie pracuje już na pojedynczym promptcie, tylko na uporządkowanej specyfikacji, bardzo szybko zrozumiesz jedną rzecz:

przyszłość AI-assisted development nie wygląda jak chat. Wygląda jak pipeline specyfikacji.

Czym właściwie jest OpenSpec?

OpenSpec to lekki framework do Spec-Driven Development, którego celem jest uporządkowanie współpracy z AI coding assistantami wokół trwałych artefaktów zamiast ulotnych rozmów.

Projekt wspiera wiele narzędzi AI, między innymi:

  • Codex,
  • Claude Code,
  • Cursor,
  • GitHub Copilot,
  • Gemini CLI.

OpenSpec opisuje się jako:

  • open source,
  • universal,
  • bez API keys,
  • bez MCP.

Najważniejsze jednak jest coś innego:

OpenSpec zamienia specyfikację w aktywny artefakt procesu developmentu.

Źródła:

Jak wygląda workflow OpenSpec?

Domyślny workflow wygląda mniej więcej tak:

Propose → Explore → Apply → Validate → Archive

Czyli:

  • najpierw definiujesz zmianę,
  • potem eksplorujesz rozwiązanie,
  • następnie AI implementuje zmianę,
  • na końcu walidujesz rezultat i archiwizujesz decyzję.

To jest ogromna różnica względem klasycznego „wrzuć prompt i zobacz co wyjdzie”.

OpenSpec wymusza bowiem myślenie o zmianie jako o procesie opartym o trwałe artefakty.

Instalacja OpenSpec

OpenSpec działa jako pakiet npm.

Instalacja jest bardzo prosta:

npm install -g @fission-ai/openspec@latest

Po instalacji możesz sprawdzić wersję:

openspec --version

Źródła:

Inicjalizacja projektu

Następnie przechodzisz do repozytorium projektu:

cd my-project

I uruchamiasz:

openspec init

OpenSpec skonfiguruje workflow oraz zainstaluje odpowiednie skills i komendy dla wybranego narzędzia AI.

Domyślnie aktywowany jest profil core, który zawiera workflow:

  • propose
  • explore
  • apply
  • sync
  • archive

Źródło:

OpenSpec + Codex

I tutaj robi się naprawdę ciekawie.

OpenSpec ma natywne wsparcie dla Codex.

Podczas inicjalizacji może instalować:

  • skills,
  • workflow commands,
  • spec-driven prompts.

Dla Codex instalowane są między innymi:

.codex/skills/openspec-*/SKILL.md

oraz workflow commands:

$CODEX_HOME/prompts/opsx-*

Źródło:

Jak działają skills?

Skills to jeden z najważniejszych elementów nowoczesnego AI-assisted development.

Można je traktować jak:

  • procedury operacyjne dla AI,
  • specjalizowane instrukcje,
  • trwałą wiedzę domenową.

Zamiast za każdym razem tłumaczyć AI:

  • jak wygląda architektura projektu,
  • jakie są standardy kodowania,
  • jakie obowiązują reguły bezpieczeństwa,
  • jakie są konwencje nazewnicze,

skills dostarczają ten kontekst automatycznie.

To właśnie tutaj zaczynamy odchodzić od „AI jako chat” w stronę „AI jako uczestnik procesu engineeringowego”.

Instalacja skills w Codex

Codex wspiera skills w bardzo podobny sposób do Claude Code.

Skills można instalować:

  • globalnie,
  • per projekt,
  • bezpośrednio z repozytoriów.

Przykładowo Codex wykrywa skills w katalogach:

~/.codex/skills/

lub:

.codex/skills/

Codex automatycznie ładuje skills przy starcie sesji.

Źródła:

Praktyczny przykład – budowa feature’a

Załóżmy, że chcemy dodać nowy feature:

„Program lojalnościowy dla klientów premium w sklepie online”

W klasycznym prompt-driven development moglibyśmy napisać:

Dodaj loyalty program dla klientów premium.

I AI prawdopodobnie wygenerowałoby jakiś kod.

W OpenSpec zaczynamy zupełnie inaczej.

Krok 1 – Propose

Najpierw definiujemy zmianę.

Powstaje proposal zawierający:

  • cel biznesowy,
  • zakres,
  • model domenowy,
  • scenariusze,
  • kontrakty API,
  • edge case’y.

Przykład:

# Premium Loyalty Program

## Goal
Introduce loyalty tiers for premium customers.

## Rules
- Customer earns points per order
- Premium threshold: 1000 points
- Discount applies only to eligible categories

## API
POST /loyalty/points
GET /loyalty/status

## Edge Cases
- Refund removes points
- Expired points cannot be reused

To jest gigantyczna różnica względem pojedynczego prompta.

AI dostaje:

  • intencję,
  • reguły,
  • kontrakt,
  • granice rozwiązania.

Krok 2 – Explore

Następnie AI eksploruje rozwiązanie.

To etap, w którym:

  • analizowana jest architektura,
  • sprawdzane są zależności,
  • identyfikowane są ryzyka.

To bardzo ważne, bo AI przestaje działać „na ślepo”.

Krok 3 – Apply

Dopiero teraz Codex przechodzi do implementacji.

I to jest moment, w którym naprawdę widać przewagę spec-driven development.

AI nie generuje już „jakiegoś rozwiązania”.

AI implementuje konkretną specyfikację.

To ogromna różnica jakościowa.

Krok 4 – Validate

Na końcu następuje walidacja:

  • czy feature spełnia scenariusze,
  • czy kontrakty API są poprawne,
  • czy edge case’y są obsłużone.

To właśnie tutaj wraca DNA V-Modelu i BDD.

Spec nie kończy się na implementacji.

Spec definiuje również sposób walidacji.

Największa zmiana mentalna

Najciekawsze w całym OpenSpec nie jest samo narzędzie.

Najważniejsza jest zmiana sposobu myślenia.

W klasycznym AI-assisted development często wygląda to tak:

Human → Prompt → AI → Code

W podejściu spec-driven wygląda to bardziej tak:

Human → Spec → Workflow → AI → Validate → Codebase

To zupełnie inny poziom dojrzałości procesu.

Dlaczego to jest ważne?

Bo AI coding assistants są coraz lepsze.

A im lepsze są modele, tym większe znaczenie ma jakość wejścia.

Prompt może wystarczyć do:

  • małego taska,
  • eksperymentu,
  • prototypu.

Ale jeśli chcesz budować:

  • większy system,
  • zespół AI-assisted developers,
  • powtarzalny proces engineeringowy,
  • kontrolę jakości i traceability,

to potrzebujesz czegoś więcej.

Potrzebujesz specyfikacji jako centralnego artefaktu procesu.

Podsumowanie

OpenSpec pokazuje bardzo wyraźnie, w jakim kierunku zmierza AI-assisted development.

Nie chodzi już tylko o „pisanie promptów”.

Chodzi o budowanie:

  • workflowów,
  • skills,
  • specyfikacji,
  • kontraktów,
  • procesów walidacji.

I właśnie dlatego uważam, że:

przyszłość AI programming nie będzie oparta o chat.

Będzie oparta o spec-driven workflows.

A OpenSpec jest dziś jednym z najciekawszych praktycznych przykładów tego kierunku.