GitHub’un Spec Kit’i - Yüksek Kaliteli Yazılımı Daha Hızlı Geliştirmek
(github.com/github)- Spec-Driven Development: Geleneksel geliştirmede yardımcı bir araç olan spec (şartname) kavramını çalıştırılabilir spec düzeyine çıkararak, spec’ten doğrudan çalışan bir implementasyon üretmeyi hedefleyen yaklaşım
- Kod merkezli alışkanlığı dönüştürerek önce ne ve neden sorularını tanımlayıp, daha sonra nasıl kısmını somutlaştıran niyet odaklı geliştirmeyi vurgular
- Temel fikir, spec aracılığıyla tutarlı çıktılar üretmek ve tekrar eden işleri otomatikleştirerek geliştiricinin ürün problemlerine odaklanmasını sağlamaktır
- Spec Kit, bu spec’leri çalıştırılabilir çıktılara dönüştürerek implementasyonu otomatikleştirmeye yardımcı olan bir araç setidir
- Kurulumdan sonra
/specifyile ne/neden anlatılır,/planile stack/mimari tanımlanır,/tasksile iş birimleri oluşturulur - Amaç, organizasyonların fark yaratmayan ortak kodu yazmaktan çıkıp ürün senaryolarına odaklanmasına yardımcı olmak; spec odaklı yaklaşımla hem kaliteyi hem de hızı artırmayı amaçlayan deneysel bir çerçeve sunmaktır
Temel felsefe: Core philosophy
- Niyet odaklı geliştirme ile neyi öne çıkaran ve nasıl kısmını daha sonra somutlaştıran spec önce düşünce yapısı
- Guardrail’ler ve kurumsal ilkeler içeren zengin spec’ler yazılır; tek seferlik kod üretimi yerine çok aşamalı rafinasyon süreci izlenir
- Gelişmiş yapay zeka modellerinin yorumlama yeteneğine aktif biçimde dayanarak spec’i çalıştırılabilir sonuçlara dönüştürmeyi hedefler
Spec Kit ile spec odaklı süreç
- Spec Kit, spec’i mühendislik sürecinin merkezine yerleştirir; implementasyon, checklist ve iş kırılımını bunun üzerinden yönlendirir, geliştirici ise çoğunlukla yönlendirici rol üstlenir
- Yazım işlerinin büyük kısmını coding agent üstlenir
- Süreç 4 aşamadan oluşur; her aşamada net kontrol noktaları vardır ve mevcut çalışma tamamen doğrulanmadan bir sonraki aşamaya geçilmez
- Specify aşaması: Yüksek seviyeli açıklama verildiğinde coding agent ayrıntılı bir spec üretir; bu, teknoloji stack’ine değil kullanıcı yolculuğuna, deneyime ve başarı metriklerine odaklanır
- Kullanıcının kim olduğu, hangi problemin çözüldüğü, etkileşim biçimi ve önemli sonuçlar haritalanır
- Bu, kullanıcıdan öğrenildikçe evrilen canlı bir artifact niteliği taşır
- Plan aşaması: İstenen stack, mimari ve kısıtlar verildiğinde coding agent kapsamlı bir teknik plan üretir
- Şirketin standart teknolojileri, legacy sistem entegrasyonu, mevzuat uyumu ve performans hedefleri buna dahildir
- Karşılaştırma için birden fazla plan varyasyonu istenebilir; iç dokümanlar sağlanırsa mimari kalıplar doğrudan entegre edilir
- Tasks aşaması: Spec ve plan temelinde coding agent işleri küçük, gözden geçirilebilir parçalara böler
- Her görev bağımsız şekilde implementasyon ve test edilebilir; yapay zekanın görevleri doğrulayıp takip edebilmesi için tasarlanır
- Örneğin “kimlik doğrulama kur” yerine “e-posta formatı doğrulaması yapan kullanıcı kayıt endpoint’i oluştur” gibi somuttur
- Implement aşaması: Coding agent görevleri tek tek ya da paralel işler, geliştirici ise odaklı değişiklikleri gözden geçirir
- Spec neyin inşa edileceğini, plan bunun nasıl inşa edileceğini, tasks ise hangi işlerin yapılacağını gösterir
- Her aşamada geliştirici düşünüp rafine eder; spec’in niyeti yakalayıp yakalamadığını, planın gerçek kısıtları dikkate alıp almadığını, eksik veya edge case olup olmadığını denetleyen bir doğrulayıcı rolü üstlenir
Agentic workflow içinde Spec Kit nasıl kullanılır
- Spec Kit, GitHub Copilot, Claude Code, Gemini CLI gibi coding agent’larla çalışır; basit bir komut dizisiyle agent’ı yönlendirip artifact’ler üretir
- Bu yaklaşım, muğlak prompt’ları net niyetlere dönüştürerek güvenilir icra sağlar
- Proje başlatıldıktan sonra
/specifykomutuyla yüksek seviyeli prompt verildiğinde coding agent projenin tüm spec’ini üretir ve projenin “ne” ve “neden”ine odaklanır /plankomutuyla yüksek seviyeli teknik yön verildiğinde coding agent mimariye ve kısıtlara saygı duyan ayrıntılı plan oluşturur/taskskomutuyla spec ve plan çalıştırılabilir görev listesine ayrıştırılır; coding agent da buna göre proje gereksinimlerini uygular
Geliştirme aşamaları: Development phases
- 0-to-1 (greenfield) aşaması: Yüksek seviyeli gereksinimlerden yola çıkarak spec oluşturma → plan yapma → production-grade uygulama üretme akışını destekler
- Yaratıcı keşif aşaması: Farklı stack/mimari ve UX pattern’lerini paralel implementasyon ile deneme sürecini öne çıkarır
- Kademeli iyileştirme (brownfield) aşaması: özellik ekleme, legacy modernizasyonu ve süreç uyarlamasını yinelemeli biçimde sürdüren evrimsel geliştirme yaklaşımı
Bu yaklaşımın iyi çalıştığı 3 senaryo
- Greenfield (zero-to-one): Yeni projeye başlarken hemen kod yazmak yerine önce spec ve plan hazırlanır; böylece yapay zekanın niyet edilen şeyi inşa etmesi sağlanır ve genel kalıplara dayalı sıradan çözümler yerine özelleştirilmiş sonuçlar elde edilir
- Mevcut sistemde özellik geliştirme (N-to-N+1): Karmaşık bir codebase’e özellik eklerken spec, yeni özelliğin mevcut sistemle etkileşimini netleştirir; plan ise mimari kısıtları kodlayarak sisteme doğal biçimde oturan kod üretilmesini sağlar
- Bu, sürekli geliştirmeyi daha hızlı ve daha güvenli hale getirir; gelişmiş context engineering teknikleri gerekebilir
- Legacy modernizasyonu: Legacy sistemi yeniden kurarken özgün niyet kaybolmuşsa, Spec Kit süreci temel iş mantığını modern spec’e taşır ve yeni bir mimari planlayarak yapay zekanın teknik borç olmadan yeniden inşa etmesini sağlar
Önkoşullar
- Linux/macOS veya Windows üzerinde WSL2 gerekir
- Yapay zeka agent’ı olarak Claude Code, GitHub Copilot, Gemini CLI, Cursor seçeneklerinden biri seçilir
9 yorum
Copilot Workspace'ı hatırlatıyor.
Doğal dil tabanlı yapay zeka programlamasının temeli olacak gibi görünüyor.
GitHub’un Spec Kit’inin avantajları GitHub Copilot’ta da kullanılabiliyor.
GitHub tarafından yapıldığı için elbette denebilir ama diğer araçların çoğu Claude tabanlıydı.
Kiro IDE'yi hatırlatıyor.
İlginçmiş. Mantıklı da geliyor.
Yazının ortasındaki SDD ayrıntılı tanıtım bağlantısındaki içerik oldukça iyi. Aşağıda bunu yapay zeka ile özetledim.
Spesifikasyon Odaklı Geliştirme (Specification-Driven Development, SDD)
Gücün Tersine Dönüşü
Pratikte SDD İş Akışı
SDD Neden Şimdi Önemli?
Temel İlkeler
Uygulama Yaklaşımları
Komutlarla SDD'yi Akıcı Hâle Getirmek
/specify: Özellik açıklamasını yapılandırılmış bir spesifikasyona dönüştürür; otomatik numaralandırma, branch oluşturma ve şablon tabanlı dizin kurulumunu otomatikleştirir/plan: Spesifikasyon analizi → anayasa uyumluluğu incelemesi → teknik çeviri → veri modeli, API sözleşmesi, test senaryoları dokümantasyonu → quickstart doğrulaması üretir/tasks:plan.mdve ilgili tasarımı okuyarak uygulanabilir görev listesi üretir; paralel yapılabilecek görevleri işaretler ve güvenli paralel gruplandırma sağlarYapılandırılmış Otomasyonun Gücü
Şablon Tabanlı Kalite
[NEEDS CLARIFICATION]işareti ile tahmini yasaklama ve açık soru sorma teşvik edilirimplementation-details/altına ayrılarak okunabilirlik korunurAnayasal Temel
memory/constitution.mdiçindeki değişmez ilkelerle, tüm implementasyonların tutarlı, sade ve yüksek kaliteli kalmasını sağlayan bir geliştirme anayasası benimsenirDönüşüm
Bunu hangi yapay zekayla özetlediniz?
Bunu GPT-5 ile yaptım. Özetleme amacıyla benim düzenlediğim oldukça uzun bir prompt kullanıyorum.
Bu konsepte oldukça katıldığım için hafta sonu yeni bir projede biraz test ettim, ama düşündüğüm kadar iyi çalışmıyor. Hâlâ çok fazla iyileştirmeye ihtiyaç var gibi görünüyor. Öncelikle kabaca çalışma şekli, daha önce birçok kez tanıtıldığı gibi, şöyle: spesifikasyon yazımı → spec yazımı → görev yazımı → uygulama
Sorun ise şu:
constitution.mddosyası "nasıl geliştireceğiz" konusundaki temel rehber ama "bu uygulama sonunda ne olacak" bilgisini içermiyorspec.md, tek bir özelliği açıklayan bir doküman/specifyve/tasakskomutlarıyla çok sayıda doküman çıktı olarak üretiliyor (istediğim sonuç buydu), ama bu yüzden sanırım context çok hızlı tüketiliyor (Claude Code kullanıyorum)tasks.mdiçinde tanımlı işleri ilerletirken, başta düzgün yapılmış şeylerin üzerine yazılabildiği ve bug düzeltme sürecinde yeni özellikler de yapılabildiği içintasks.mdile giderek bağ kopuyor.tasks.md'yi kalıcı olarak saklamanın anlamını bilmiyorum.Şimdilik vardığım sonuçlar şöyle: