Tüm Yazılar
KategoriVibe Coding
Okuma Süresi
13 dk
Yayın Tarihi
2025-11-18
Kelime Sayısı
2.925kelime

Kahveni hazırla - bu içerikli bir makale!

Vibe Coding'den Spec-Driven Development'a Geçiş

Özet

Spec-driven development nedir, vibe coding neden ölçekte kırılıyor ve ikisini ne zaman birlikte kullanman gerekir? Spec → plan → task → kod döngüsünü ve hibrit modeli anlatıyorum.

Vibe Coding'den Spec-Driven Development'a Geçiş

"Bana bir uygulama yaz" demek kolay; onu üretime taşımak başka bir şey. Vibe coding küçük prototiplerde harika sonuç verirken, kod tabanı büyüdükçe mimari sapma, bağlam kaybı ve tekrar eden hatalar ortaya çıkıyor — spec-driven development nedir sorusu tam da bu noktada anlam kazanıyor. Bu yazıda vibe coding'in nerede kırıldığını, spec-driven development'ın (SDD) ne olduğunu ve ikisini ne zaman birlikte kullanman gerektiğini adım adım anlatıyorum.

💡 Pro Tip: Spec yazmayı "ekstra iş" değil, agent'a verdiğin talimatın sözleşmesi olarak düşün — spec ne kadar net olursa, gözden geçirmen gereken kod o kadar az olur.

İçindekiler

Vibe coding neden ölçekte kırılıyor

Terimin kendisi Şubat 2025'te OpenAI'nin kurucularından ve eski Tesla AI lideri Andrej Karpathy tarafından ortaya atıldı. Karpathy, AI ile sohbet eder gibi konuşup gerisini modele bırakma pratiğini tarif ediyordu; kısa sürede "kodu tam anlamadan, sonuçlara ve takip prompt'larına güvenerek" çalışma biçimi olarak yaygınlaştı.

GitHub'ın Spec Kit lansman yazısı, kırılma noktasını net tarif ediyor: "Bazen kod derlenmiyor. Bazen problemin bir kısmını çözüyor ama asıl niyeti kaçırıyor. Yığın veya mimari seçmeyeceğin bir şey olabiliyor." Yazıya göre sorun agent'ın kodlama yeteneği değil, bizim yaklaşımımız: "Coding agent'ları arama motoru gibi kullanıyoruz, oysa onlara daha çok her şeyi harfi harfine alan çift-programlama ortakları gibi davranmamız gerekiyor."

Bu, hızlı prototipte sorun değil. GitHub'ın kendi ifadesiyle bu "vibe-coding" yaklaşımı "hızlı prototipler için harika olabilir, ama ciddi, kritik-görev uygulamaları inşa ederken veya mevcut kod tabanlarıyla çalışırken daha az güvenilir." Kod tabanı büyüdükçe, agent'a verdiğin doğal dil talimatı belirsizleştikçe, her yeni prompt bir öncekinin varsayımlarını unutuyor — mimari tutarlılık kayboluyor.

Geliştirici Simon Willison'ın erken dönemde dile getirdiği ve Wikipedia'nın "vibe coding" maddesinde aktarılan uyarı da aynı noktaya işaret ediyor: "Production bir kod tabanına vibe coding ile ilerlemek açıkça risklidir. Yazılım mühendisi olarak yaptığımız işin çoğu, mevcut sistemleri evrilmekten ibarettir; burada altta yatan kodun kalitesi ve anlaşılabilirliği kritik önem taşır." Bu cümle, vibe coding'in neden "yeni bir şey yazmak" ile "mevcut bir sistemi büyütmek" arasında farklı davrandığını özetliyor — spec-driven development'ın asıl değer ürettiği yer de ikinci senaryo.

Spec-driven development tam olarak nedir

GitHub, Spec Kit'i duyururken spesifikasyonları yeniden tanımlıyor: "Statik dokümanlar olarak değil, projeyle birlikte evrilen canlı, çalıştırılabilir artifact'lar olarak." Spec'ler paylaşılan doğruluk kaynağı hâline geliyor: "Bir şey mantıklı gelmediğinde spec'e dönersin; proje karmaşıklaştığında onu inceltirsin; görevler çok büyük hissettirdiğinde onları parçalara ayırırsın."

Spec-driven development'ı "vibe coding'in karşıtı" olarak görmek yanıltıcı — daha çok onun disiplinli hâli. Merriam-Webster'ın Mart 2025'te "slang & trending" listesine aldığı tanıma göre vibe coding'de "geliştirici kodun nasıl veya neden çalıştığını anlamak zorunda değildir ve genellikle belirli sayıda bug ve aksaklığın var olacağını kabul etmesi gerekir." SDD tam olarak bu kabulü ortadan kaldırmayı hedefliyor: kod yazılmadan önce ne inşa edildiğinin, neden inşa edildiğinin ve kabul kriterlerinin yazılı hâle gelmesi.

Thoughtworks'ün Kasım 2025 Technology Radar'ı (Vol. 33) konuyu şöyle çerçeveliyor: "Spec-driven development, AI-destekli kodlama iş akışları için yükselen bir yaklaşım... genellikle yapılandırılmış bir fonksiyonel spesifikasyonla başlayıp, onu daha küçük parçalara, çözümlere ve görevlere ayıran çok adımlı bir süreçle devam eden iş akışlarını ifade eder." Aynı rapor üç farklı yorumu karşılaştırıyor; Spec Kit satırındaki faz adlarını GitHub'ın kendi lansman yazısından tamamlıyorum:

Araç
Yaklaşım
Aşamalar
Amazon Kiro
Kullanıcıyı üç aşamadan geçirir
Requirements → Design → Tasks
GitHub Spec Kit
Benzer süreci "daha zengin orkestrasyon, yapılandırılabilir prompt'lar" ile genişletir
Specify → Plan → Tasks → Implement + "anayasa" (değişmez ilkeler)
Tessl Framework
Spesifikasyonun kendisini asıl bakımı yapılan artifact hâline getirir (Eylül 2025 itibarıyla özel beta)
Spec-merkezli, koddan bağımsız bakım

Üçü de aynı temel fikri paylaşıyor — spesifikasyonu koddan önce ve koddan ayrı bir artifact olarak ele almak — ama "ne kadar katı" sorusuna farklı cevap veriyorlar. Spec Kit'in "anayasa" kavramı özellikle dikkat çekici: bu, projenin asla ihlal edilmemesi gereken ilkelerini (örneğin "her API endpoint testli olmalı") ayrı bir dosyada tutup her plan ve task adımında referans olarak kullanmak anlamına geliyor.

Spec → plan → task → kod döngüsü

GitHub'ın Spec Kit'i dört net kontrol noktalı bir süreç izliyor: "Dört fazda, net kontrol noktalarıyla çalışır... mevcut görev tam olarak doğrulanmadan bir sonrakine geçmezsin." Yayınlanan sıra şöyle:

  1. Specify — üst düzey hedefini agent'a doğal dilde anlatırsın; agent bunu yapılandırılmış bir spesifikasyona dönüştürür.
  2. Plan — spesifikasyon, teknik bir plana (mimari kararlar, veri modeli, arayüz sınırları) dönüşür.
  3. Tasks — plan, küçük ve doğrulanabilir görevlere bölünür.
  4. Implement — agent görevleri tek tek uygular; sen her adımda gözden geçirirsin.

Bu döngünün pratikteki en büyük farkı gözden geçirme biçiminde. GitHub'ın ifadesiyle: "Bin satırlık kod dökümlerini incelemek yerine, sen — geliştirici — belirli problemleri çözen odaklı değişiklikleri gözden geçirirsin." Yani spec, agent'ın ürettiği diff'i küçük ve izlenebilir parçalara bölen bir filtre görevi görüyor.

Kendi spec dosyanı yazarken aşağıdaki gibi minimal bir iskelet işe yarar — amaç, agent'a "ne", "neden" ve "ne zaman bitti" sorularını baştan cevaplamak:

markdown
1# Spec: Kullanıcı bildirim tercihleri
2 
3## Problem
4 
5Kullanıcılar hangi bildirim türünü alacağını seçemiyor.
6 
7## Kabul kriterleri
8 
9- Kullanıcı e-posta/push/hiçbiri arasında seçim yapabilir
10- Tercih değişikliği anında kaydedilir
11- Varsayılan: tüm bildirimler açık
12 
13## Kapsam dışı
14 
15- Bildirim sıklığı ayarı (sonraki iterasyon)

Küçük işte spec yazmanın maliyeti — ne zaman gerekmez

Spec yazmak ücretsiz değil. Thoughtworks'ün Kasım 2025 Technology Radar'ı, SDD'yi bilinçli olarak temkinli bir halkaya — "Assess" (dene ama henüz genel kabul önerme) — yerleştirdi ve şu notu düştü: "Bu alanı büyüleyici buluyoruz, ancak iş akışları hâlâ karmaşık ve fikir sahibi (opinionated). Bu araçlar görev boyutuna ve türüne göre çok farklı davranıyor; bazıları incelemesi zor uzun spec dosyaları üretiyor."

Bu, "her işte spec yaz" demek değil. Ben genelde şu ayrımı kullanırım: tek dosyalık bir bug fix, bir buton rengi değişikliği veya izole bir yardımcı fonksiyon için spec yazmak, çözdüğü sorundan daha pahalıya mal oluyor — orada doğrudan "vibe" ile ilerlemek daha rasyonel. Spec'in değeri, iş büyüdükçe, birden fazla dosyayı/servisi etkiledikçe ve "kabul kriteri" belirsizleştikçe artıyor.

Pratikte spec gerektirmeyen işler genelde şu ortak özelliği taşır: kapsamı tek oturuşta gözden geçirilebilir, geri alması ucuz ve mimari kararı yok. Spec gerektiren işler ise: birden fazla katmanı (API + DB + UI) etkiliyor, "kabul edildi" tanımı tartışmalı, ya da agent'ın önceki denemede yanlış varsayımla ilerlediği bir alan.

Kabaca şu tabloyla karar verebilirsin:

Durum
Spec gerekli mi
Neden
Tek dosyalık bug fix
Hayır
Kapsam tek oturuşta gözden geçirilir
Yeni buton/stil değişikliği
Hayır
Geri alması ucuz, mimari etkisi yok
Çok-katmanlı yeni özellik (API+DB+UI)
Evet
Kabul kriteri katmanlar arası tutarlı olmalı
Mevcut kod tabanına entegrasyon
Evet
Agent mevcut varsayımları bilmiyor
Hızlı prototip / kanıt-amaçlı demo
Hayır
GitHub'ın kendi ifadesiyle "hızlı prototipler için harika"
Kritik-görev / production akışı
Evet
Aynı kaynağa göre "daha az güvenilir" olduğu alan

CLAUDE.md / kural dosyaları ile SDD akışını kurmak

Spec-driven araçların ortak noktası, agent'a tek seferlik değil kalıcı bir bağlam vermesi. GitHub'ın Spec Kit'i bunu Claude Code, GitHub Copilot ve Gemini CLI dahil birden fazla ajanla çalışacak şekilde tasarladı — yani spec dosyaları, tek bir aracın değil, projenin ortak sözleşmesi.

Claude Code'da bu mekanizma zaten var: proje kökündeki CLAUDE.md dosyası, her oturumda otomatik yüklenir ve agent'a projenin kurallarını, dizin yapısını ve "yapma" listesini anlatır. SDD ile CLAUDE.md'yi birlikte kullanmanın en pratik yolu, ikisini farklı katmanlarda tutmak: CLAUDE.md kalıcı proje kurallarını (tech stack, deploy akışı, yasaklar) taşırken, spec dosyası o anki işin kabul kriterlerini taşır.

markdown
1# CLAUDE.md (proje-geneli kural dosyası — kalıcı)
2 
3- Tech stack: Next.js + Prisma, testler Vitest
4- Yeni özellik önce spec.md ile başlar, sonra plan+tasks
5- Kritik akışlarda (ödeme/auth) spec zorunlu; küçük fix'te opsiyonel

Bu ayrım, agent'ın her seferinde "bu proje nasıl çalışıyor" sorusunu yeniden sormasını engelliyor; spec dosyası ise "bu iş ne zaman bitti" sorusunu cevaplıyor.

Bir spec dosyasının kod incelemesinde nasıl kontrol noktası olarak kullanılacağını kısa bir örnekle göstereyim — kabul kriterlerini bash içinde yorum satırı olarak tutup, gözden geçirirken tek tek işaretleyebilirsin:

bash
1# review-checklist.sh — spec.md'deki kabul kriterlerini PR'a karşı işaretle
2# [ ] Kullanıcı e-posta/push/hiçbiri arasında seçim yapabiliyor mu?
3# [ ] Tercih değişikliği anında kaydediliyor mu?
4# [ ] Varsayılan tüm bildirimler açık mı?
5# Her satır agent'ın ürettiği diff'te karşılığını bulmadan PR onaylanmaz

Spec'i canlı tutmak: kod değişince spec de değişmeli

GitHub'ın Spec Kit yazısındaki en kritik cümlelerden biri şu: spec'ler "statik dokümanlar değil, projeyle birlikte evrilen canlı, çalıştırılabilir artifact'lar." Bu, geleneksel PRD'lerin düştüğü tuzağın tam tersi — yazılıp bir kere onaylandıktan sonra rafa kaldırılan, koddan giderek kopan bir doküman değil.

Pratikte bu şu anlama geliyor: "Bir şey mantıklı gelmediğinde spec'e dönersin; proje karmaşıklaştığında onu inceltirsin; görevler çok büyük hissettirdiğinde onları parçalara ayırırsın." Yani spec tek yönlü bir girdi değil, geri besleme döngüsünün parçası. Agent bir varsayımla çakışan bir kod yazdığında, önce spec'i düzeltirsin, sonra kodu yeniden ürettirirsin — kodu elle yamayıp spec'i eski hâliyle bırakmazsın.

Bunu disipline etmenin en basit yolu: spec dosyasını kodla aynı pull request'te tutmak. Spec değişmeden kod değişiyorsa, o PR'da bir tutarsızlık var demektir — review sırasında ilk bakılacak yer de burası.

Hibrit model — keşifte vibe, teslimde spec

GitHub'ın kendi çerçevesi burada da yol gösterici: "Bu 'vibe-coding' yaklaşımı hızlı prototipler için harika olabilir, ama ciddi, kritik-görev uygulamaları inşa ederken veya mevcut kod tabanlarıyla çalışırken daha az güvenilir." Bu tek cümle aslında hibrit modelin tarifi — hangi aşamada hangi modun kullanılacağını söylüyor.

Pratikte üç aşamalı bir akış işe yarıyor:

  • Keşif (vibe): "Bu nasıl görünür, bu API nasıl davranır" sorularını hızlıca cevaplamak için agent'a doğrudan doğal dille prompt at, kodu çalıştır, at, tekrar dene. Amaç öğrenmek, üretmek değil.
  • Karar (spec): Keşifte netleşen yaklaşımı spec.md'ye yaz — kabul kriterleri, kapsam dışı, mimari kısıtlar.
  • Teslim (implement): Spec'e göre agent'tan küçük, gözden geçirilebilir diff'ler iste; her diff'i spec'e karşı doğrula.

Bu üç aşama arasında geçiş maliyeti düşük tutulduğu sürece hibrit model, "ya hep vibe ya hep spec" ikileminden kurtarıyor.

Somut bir örnek üzerinden gidelim: diyelim ki mevcut bir e-ticaret uygulamasına "favori ürünler" özelliği ekleyeceksin. Keşif aşamasında agent'a "kullanıcı bir ürünü favoriye eklediğinde arayüz nasıl tepki vermeli" diye sorup birkaç hızlı prototip ürettirebilirsin — hangisi kullanıcı deneyimi açısından daha iyi hissettiriyor, bunu görmek istiyorsun, üretim kodu yazmıyorsun. Karar aşamasında bu keşiften çıkan yaklaşımı ("favori butonu optimistic update yapacak, backend hatası durumunda geri alınacak") spec'e yazarsın. Teslim aşamasında ise agent'tan bu spec'e göre önce veri modelini, sonra API endpoint'ini, sonra arayüz bileşenini ayrı diff'ler hâlinde ister ve her birini spec'teki kabul kriterine karşı kontrol edersin. Keşif aşamasında üretilen kodun hiçbiri doğrudan teslim aşamasına kopyalanmaz — yalnızca öğrenilen karar taşınır.

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

Okuyucu Ödülü

Bir sonraki özelliği agent'a yazdırmadan önce kullanabileceğin, spec-driven geçişin ilk on dakikasını kapsayan hızlı bir kontrol listesi hazırladım. Amaç, spec yazmayı bir formaliteye değil, gerçek bir karar anına dönüştürmek — her madde tek başına iki dakikada cevaplanabilir olacak şekilde seçildi.

SSS

Spec-driven development nedir?

Spec-driven development, AI-destekli kodlama iş akışlarında yükselen bir yaklaşımdır; genellikle yapılandırılmış bir fonksiyonel spesifikasyonla başlayıp bunu daha küçük parçalara, çözümlere ve görevlere ayıran çok adımlı bir süreçle devam eder (Thoughtworks Technology Radar Vol. 33 tanımı). GitHub'ın Spec Kit'inde bu süreç Specify → Plan → Tasks → Implement dört fazına karşılık gelir.

Vibe coding ile spec-driven development arasındaki fark nedir?

Vibe coding'de geliştirici hedefi doğal dille tarif eder ve kodun nasıl çalıştığını derinlemesine anlamadan sonuçlara güvenir; Merriam-Webster'ın tanımıyla "belirli sayıda bug ve aksaklığın var olacağını kabul etmesi gerekir." Spec-driven development ise kodu yazmadan önce kabul kriterlerini, kapsamı ve mimari kısıtları yazılı hâle getirir; GitHub'ın ifadesiyle gözden geçirme "bin satırlık kod dökümleri" yerine "odaklı değişiklikler" üzerinden yapılır.

Hangi projelerde spec-driven development kullanılmalı?

Thoughtworks'e göre araçlar "görev boyutuna ve türüne göre çok farklı davranıyor." Pratikte birden fazla katmanı etkileyen, mevcut kod tabanına entegre olan veya kabul kriteri tartışmalı işlerde spec değerli; GitHub'ın tarifiyle "ciddi, kritik-görev uygulamaları" bu kategoriye giriyor.

Spec yazmak vibe coding'i yavaşlatır mı?

Kısa vadede evet, çünkü kodlamaya başlamadan önce düşünme adımı ekler. Ancak Thoughtworks'ün temkinli notu da gösteriyor ki bu bir ödünleşim: "iş akışları hâlâ karmaşık ve fikir sahibi." Küçük, tek dosyalık işlerde bu maliyet karşılığını vermez — spec'i yalnız kapsamı büyük ve geri alması pahalı işlerde kullanmak, toplam hızı düşürmek yerine artırır.

Spec dosyasını nerede tutmalıyım?

Kodla aynı depoda, ilgili pull request ile birlikte. Böylece spec ile kod arasındaki tutarsızlık review sırasında hemen görülür; CLAUDE.md gibi proje-geneli kural dosyaları kalıcı kuralları taşırken, spec dosyası o anki işin kabul kriterlerini taşır.

Güncelleme (Eylül 2026)

Bu yazının gövdesi 18 Kasım 2025 itibarıyla geçerli bilgilerle yazıldı. O tarihten bu yana hem vibe coding'in riskleri hem de spec-driven araçların kapsamı somut biçimde genişledi.

Kanıtlar ağırlaştı. Aralık 2025'te CodeRabbit'in 470 açık kaynak GitHub pull request'i üzerinde yaptığı analiz, üretken AI ile birlikte yazılan kodun insan yazımı koda kıyasla yaklaşık 1,7 kat daha fazla "major" sorun içerdiğini ortaya koydu; yanlış yapılandırmalar %75 daha sık, güvenlik açıkları ise 2,74 kat daha yüksek çıktı. Aynı dönemde Orchids adlı bir vibe coding platformunda güvenlik araştırmacısı Etizaz Mohsin tarafından keşfedilen bir açık, Şubat 2026'da BBC News'e gösterildi.

Vibe coding ana akıma iyice yerleşti. Ocak 2026'da Linus Torvalds'ın, hobi projesi bir ses efekti üretici için görselleştirme aracını Google Antigravity ile "vibe-coding" yöntemiyle yazdığı ortaya çıktı; Torvalds bunu projenin README dosyasında sınırlı Python bilgisine bağladı.

Spec Kit tek akıştan çoklu giriş noktasına genişledi. Bugün (23 Eylül 2026) itibarıyla projenin güncel README'si artık yalnız "spec ile inşa et" değil, "bug fix" ve "fikir değerlendirmesi" gibi bağımsız giriş noktalarını da tanımlıyor ("Build with a spec, fix a bug, or assess an idea"). Yıldız sayısı aynı tarihte 139k'ye ulaştı; Kasım 2025'te Thoughtworks Radar'da karşılaştırılan Amazon Kiro'nun herkese açık geri bildirim deposu ise 4,3k yıldızda — bu depo ürünün kendi kaynak kodu deposu değil.

Bu üç gelişme birlikte okunduğunda tablo net: vibe coding'in ölçek sorunları veri ile daha somut hâle geldi, spec-driven araçlar ise yalnız "yeni özellik yaz" senaryosunun ötesine (bug fix, fikir değerlendirmesi) genişleyerek disiplinli akışı daha geniş bir iş yelpazesine taşıdı.

Sonuç

Vibe coding ile spec-driven development bir rekabet değil, aynı iş akışının iki farklı aşaması. Keşifte hız için vibe'a güvenip, teslimde kabul kriterlerini yazılı hâle getirerek spec'e geçmek, agent'ın gücünden vazgeçmeden mimari sapmayı önlüyor. Eğer Claude Code kullanıyorsan bu ayrımı kurmanın en doğal yolu, kalıcı kuralları CLAUDE.md dosyasında tutup, o anki işin kabul kriterlerini ayrı bir spec dosyasında taşımak.

Bir sonraki adım olarak, agent'a büyük bir özelliği tek seferde yazdırmadan önce işi nasıl planladığını Claude Code Plan Mode ile deneyebilir, birden fazla agent'ı paralel çalıştırman gerekiyorsa Multi-Agent Teams rehberine bakabilirsin. Vibe coding ile başlayıp production'a taşırken karşılaşacağın tuzakları Vibe Coding MVP'sini Production'a Taşıma Rehberi ve Vibe Coding Güvenlik Kontrol Listesi ayrıntılı biçimde ele alıyor. Spec-driven akışta agent'ın ürettiği kodu nasıl test ettireceğini merak ediyorsan AI Destekli Unit Test Üretimi rehberi de bu yazının doğal devamı.

Kaynaklar

Etiketler

#vibe coding#spec-driven development#AI kodlama#Claude Code#CLAUDE.md#spec kit#yazılım mimarisi
Muhittin Çamdalı

Muhittin Çamdalı

Lead Mobile Engineer

12+ yıllık deneyime sahip Lead Mobile Engineer. Swift, SwiftUI, Kotlin ve Flutter ile iOS, Android ve cross-platform mimarilerde uzman. Performanslı ve kullanıcı dostu mobil uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

İlgili İçerik