Spec, Domain ve Disposable Code
Kod Tek Kullanımlık Hale Geldiğinde: Niyet, Test, Domain Modeli ve Mimari Kararlar
When Code Becomes Disposable...
Kod yeniden üretilebilir hale geldikçe değer niyete, testlere, domain bilgisine ve mimari kararlara kayıyor; bunları yazılı ve doğrulanabilir tutan ekip kazanır.
Kod yeniden üretilebilir bir çıktıya dönüştü; kalıcı varlık artık niyet, davranış testleri, domain modeli ve mimari kararların yazılı hâli.
Spec-driven araçlar ve AGENTS.md standardı bu yönü taşıyor; Thoughtworks ise ağır Spec akışlarının ölçeklenmeyebileceği ve cognitive debt biriktiği uyarısını yapıyor.
Zihinsel model
Kod derleyicinin ürettiği binary gibidir: kimse binary'yi elle düzeltmez, kaynağı düzeltip yeniden derler; kaynak artık niyettir.
Neden
- Agent bir modülü sıfırdan yazdırmayı yamamaktan ucuz yaptığında, kodun kendisine yatırım yapmanın ekonomik karşılığı kalmaz.
- Kod ne yapıldığını söyler ama neden yapıldığını söylemez; yazılı olmayan niyet yeniden üretimde sessizce kaybolur.
- Şema, public API ve event sözleşmesi gibi kararların geri dönüş maliyeti yüksektir; bunlar kod gibi atılamaz.
Kanıt
Thoughtworks Radar, sistemin gerçek davranışı ile ekibin onu anlayışı arasındaki açığı 'codebase cognitive debt' adıyla Caution halkasına aldı.
Thoughtworks Technology Radar, 2026Geliştiricilerin yüzde 48'i AI çıktısına yalnızca kolayca doğrulayabildiğinde güveniyor.
Stack Overflow Developer Survey, 2026DORA, AI kodunu doğrulama yükünü 'verification tax' diye adlandırdı ve kazancın kod yazmada değil teslim akışının geri kalanında belirlendiğini gösterdi.
DORA ROI raporu (InfoQ), 2026Karşı görüş
LLM deterministik olmadığı için aynı Spec'ten her seferinde aynı kod çıkmaz ve ayrıntılı el yazımı Spec'ler de eskir. Bu yüzden Spec tek başına yetmez; davranışı kilitleyen testler olmadan kodu atmak bilgi kaybetmektir.
Kavramlar
Pratikte
- Her modül için bir sayfalık niyet dokümanı yaz: iş problemi, kurallar ve bilinçli olarak yapılmayanlar.
- Implementasyona bağlı mock testleri yerine dışarıdan görünen davranışı doğrulayan contract ve property-based testler yaz.
- CI'da silinen ya da gevşetilen testleri ve şema değişikliklerini işaretle, insan onayı iste.
AI Agent'larının kodu dakikalar içinde yeniden yazabildiği bir dönemde kod tek kullanımlık (disposable) hale geliyor ve asıl soru, bunun ardından neyin kalıcı kaldığı. Bir modülü silip baştan ürettirmek, onu yamamaktan ucuz olmaya başladığında, korunmaya değer varlık değişiyor: kodun ne yapması gerektiğini anlatan niyet, davranışı kilitleyen testler, iş kurallarını taşıyan domain modeli ve geri dönüşü pahalı mimari kararlar. Ekim 2026 itibarıyla bu tartışma pratiğe döndü: spec-driven development araçları yaygınlaştı (GitHub Spec Kit 140 binin üzerinde yıldıza ulaştı), AGENTS.md Linux Foundation çatısındaki Agentic AI Foundation'a devredildi, Thoughtworks Technology Radar ise Nisan 2026'da 'codebase cognitive debt' kavramını dikkatle yaklaşılacaklar arasına aldı. Birçok ekip hâlâ kodu en değerli varlık gibi koruyor ama niyeti ve kararları hiçbir yere yazmıyor. Kod yeniden üretilebilir, ama yazılı olmayan bilgi bir kez kaybolunca geri gelmiyor.
Çıkarımlar
- Kod atılabilir, onu yeniden üretecek bilgi atılamaz: niyet, test, domain modeli ve kararlar yazılı olmalı.
- Implementasyona bağlı testler yeniden yazımda toplu kırılır; davranışı ve sözleşmeyi test et.
- Şema, public API, event formatı ve güvenlik sınırları disposable değildir; bunlara dokunan ajan çıktısı insan onayı ister.
- Küçük yüzeyli, net sınırlı modüller yeniden üretime uygundur; her şeyin birbirine bağlı olduğu kod değildir.
- Aynı ajana kodu ve testi birlikte yazdırıp birlikte onaylamak, yanlış anlamayı test ile kilitler.
- Review, satır okumaktan niyetin ve invariant'ların korunduğunu doğrulamaya kayıyor.
- Hızı ölç ama anlayışı da ölç: codebase cognitive debt birikirse kodu yeniden üretmek bir yetenek olmaktan çıkar, kumara döner.
Alt başlıklar
Ekim 2026 itibarıyla durum
Disposable code fikri son bir yılda slogandan araca dönüştü. GitHub Spec Kit, Kiro ve Tessl gibi spec-driven development araçları yaygınlaştı; Spec Kit'in GitHub deposu Ekim 2026'da 140 binden fazla yıldıza sahip. Thoughtworks Technology Radar bu yaklaşımı Kasım 2025'te 'Assess' halkasına koydu ve iş akışlarının ağır ve fazla kuralcı olabileceği uyarısını ekledi.
Agent talimat dosyaları standartlaştı. Aralık 2025'te kurulan Agentic AI Foundation'a OpenAI AGENTS.md'yi, Anthropic MCP'yi devretti; AGENTS.md bugün 60 binden fazla açık kaynak projede kullanılıyor.
Riskin adı da kondu: Radar'ın Nisan 2026 sayısı 'codebase cognitive debt' kavramını 'Caution' halkasına aldı. Bu kavram, sistemin gerçekte ne yaptığı ile ekibin onu ne kadar anladığı arasında büyüyen açığı anlatıyor ve öneri net: architectural fitness function ve Agent'lar için geri bildirim sensörleri. Güven verisi de değişmedi: Stack Overflow 2026 anketinde geliştiricilerin yüzde 48'i AI çıktısına yalnızca doğrulayabildiğinde güveniyor. DORA'nın 2026 başındaki ROI raporu da kazancın kod yazma hızında değil, review ve teslim akışının geri kalanında belirlendiğini vurguluyor.
Disposable code ne demek, ne demek değil
Disposable code (tek kullanımlık kod), atılıp yeniden üretilmesi ucuz olan koddur. Bir ajana net bir tanım ve testler verip bir modülü 20 dakikada sıfırdan yazdırabiliyorsanız, o modülün koduna duygusal bağlılığınızın ekonomik bir karşılığı kalmaz.
Bu, kodun özensiz olabileceği anlamına gelmiyor. Prod'da çalışan kod hâlâ okunur, güvenli ve gözlemlenebilir olmalı. Değişen şey, kodun kaynak değil çıktı gibi ele alınması. Derleyicinin ürettiği binary'yi kimse elle düzeltmez; kaynağı düzeltip yeniden derler. Disposable code fikri, kaynak kavramını bir kat yukarı, niyet ve spesifikasyon seviyesine taşır.
Anti-pattern: 'nasılsa yeniden yazarız' diyerek hiçbir şey yazmadan prototipi prod'a almak. Kodu atabilmek için, onu yeniden üretecek bilgiye sahip olmanız gerekir. O bilgi yoksa elinizdeki kod disposable değil, sadece bakımsızdır.
Niyet kalıcıdır: kodun neden var olduğunu yaz
Kod ne yapıldığını söyler, neden yapıldığını söylemez. Bir indirim fonksiyonunda neden yüzde 15 sınırı olduğu, neden belirli kullanıcıların hariç tutulduğu, koddan çıkarılamaz. Ajan bu kodu yeniden yazarken sınırı kaldırırsa, testler de yoksa, kimse fark etmez.
Niyeti kalıcı kılmanın yolları: kabul kriterleri (acceptance criteria), örneklerle tanımlanmış davranış (specification by example), karar notları ve ajan talimat dosyaları (CLAUDE.md, AGENTS.md gibi). Birgitta Böckeler'in Ekim 2025'te martinfowler.com'da yayımlanan spec-driven development incelemesi bu yaklaşımları üç seviyede ayırıyor: spec-first, spec-anchored ve spec-as-source. Kod disposable olacaksa en az spec-anchored seviyesine, yani spesifikasyonun görev bittikten sonra da yaşatıldığı seviyeye ihtiyacınız var.
Pratik eşik: bir modülün niyetini bir sayfada anlatamıyorsanız, o modülü güvenle yeniden ürettiremezsiniz. O sayfada en az üç şey bulunmalı: modülün çözdüğü iş problemi, uyması gereken kurallar ve bilinçli olarak yapmadığı şeyler.
Testler sözleşmedir, implementasyonun kopyası değil
Kod atılabiliyorsa testler, davranışın neyin korunması gerektiğini söyleyen tek mekanik garantidir. Ama her test bu rolü oynayamaz. Implementasyon detayına bağlı testler, örneğin bir private metodun kaç kez çağrıldığını doğrulayan mock'lu testler, kod yeniden yazıldığında toplu halde kırılır ve hiçbir şey anlatmaz.
Kalıcı test, dışarıdan görünen davranışı doğrular: bu girdiye bu çıktı, bu API çağrısına bu cevap, bu olaya bu yan etki. Contract test (sözleşme testi) ve property-based test (özellik tabanlı test) burada değerlidir. Property-based test, 'sıralı bir listeyi tekrar sıralamak sonucu değiştirmez' gibi bir kuralı yüzlerce rastgele girdiyle sınar.
Sık görülen tuzak: aynı ajana hem kodu hem testi yazdırıp ikisini birlikte onaylamak. Ajan yanlış anladıysa, test de aynı yanlışı kilitler. Testleri niyetten, kodu testlerden türetin ve testleri bir insan gözden geçirsin.
Domain modeli: kodun altındaki kalıcı katman
Bir lojistik ürününde 'gönderi', 'araç', 'rota' ve 'kapasite limiti' kavramları, hangi framework'le yazılırsa yazılsın değişmez. Domain-driven design (alan odaklı tasarım) bu kavramları ubiquitous language (ortak dil) ile isimlendirir ve kod, dokümantasyon ve konuşma aynı kelimeleri kullanır.
Kod disposable olduğunda domain modeli, yeniden üretilen her versiyonun uyması gereken iskelet haline gelir. Bir ajan 'kargo' ile 'gönderi'yi farklı anlamlarda kullanırsa, iki modül birbiriyle konuşamaz. Bu yüzden terimler sözlüğü, invariant'lar (her zaman doğru olması gereken kurallar, örneğin 'bir aracın toplam yükü maksimum kapasiteyi aşamaz') ve bounded context sınırları yazılı olmalı.
Örnek senaryo: invariant'lar domain katmanında kodlanmış ve test edilmişse, UI ve API katmanlarını ajanla yeniden yazdırmak düşük risklidir. Domain katmanını yeniden yazdırmak ise insan gözetimi gerektiren bir karardır.
Mimari kararlar ve geri dönüş maliyeti
Her kod parçası aynı ölçüde atılabilir değil. Bir React bileşenini yeniden yazmak saatler alır; veritabanı şemasını, event formatını ya da public API sözleşmesini değiştirmek ise müşterileri, veriyi ve diğer ekipleri etkiler. Amazon'un 'tek yönlü kapı ve çift yönlü kapı' ayrımı burada işe yarar: geri alınabilen kararlar hızlı verilir, geri alınamayanlar yavaş ve yazılı verilir.
Architecture Decision Record (ADR, mimari karar kaydı) bu yavaş kararların hafızasıdır: bağlam, değerlendirilen seçenekler, seçilen yol ve sonuçları. Kod yeniden üretildiğinde ADR'lar, ajanın hangi sınırların içinde kalması gerektiğini söyler.
Pratik kural: veri şemaları, dış API'ler, event sözleşmeleri ve güvenlik sınırları disposable değildir. Bunları değiştiren her ajan çıktısı, migration planı ve insan onayı ister. Geri kalan katmanlar ise yeniden üretmeye açıktır.
Değiştirilebilirlik için tasarım: dikişler ve sınırlar
Kodu atabilmek için onu çevresinden koparabilmeniz gerekir. Michael Feathers'ın seam (dikiş) kavramı, bir parçayı diğerlerine dokunmadan değiştirebileceğiniz yerleri anlatır. Net arayüzleri olan küçük modüller disposable code için idealdir; her şeyin her şeye bağlı olduğu bir monolit dosyası ise değildir.
İyi bir ölçüt: bir modülün dışarıya açtığı yüzey küçük, içi büyük olsun. Örneğin bir fiyatlandırma modülü dışarıya tek bir 'fiyat hesapla' fonksiyonu ve onun sözleşme testlerini açıyorsa, içini istediğiniz kadar yeniden yazdırabilirsiniz.
Anti-pattern: ajanın her seferinde tüm repoyu bağlam olarak alıp birden fazla modüle aynı anda dokunması. Bu, değişiklik sınırını bulanıklaştırır ve review'u imkânsız hale getirir. Değişiklikleri modül sınırına hapsetmek, hem ajanın hata yüzeyini hem de review yükünü küçültür. Basit bir ölçü olarak, tek bir ajan görevinin değiştirdiği dosyaların tek bir modül klasöründe kalmasını hedefleyin.
Kalıcı olmayan bir şey daha: review ve sahiplik
Kod ucuzladığında review pahalılaşır. Bir ajan günde onlarca PR açabilir, ama her PR'ı bir insanın anlaması hâlâ dakikalar ister. DORA'nın Eylül 2025 raporu, yazılım profesyonellerinin yüzde 90'ının AI kullandığını ama yalnızca yüzde 24'ünün AI çıktısına yüksek güven duyduğunu bildirdi. Ekim 2026'da yayımlanan Stack Overflow anketinde tablo benzer: geliştiricilerin yüzde 48'i AI çıktısına ancak kolayca doğrulayabildiğinde güveniyor, önemli kararlarda güvenenlerin oranı yaklaşık yüzde 7. DORA'nın 2026 başındaki ROI raporu da AI kodunu doğrulamanın getirdiği yükü 'verification tax' olarak adlandırıyor. Bu açık, review'un neden darboğaz olduğunu açıklıyor.
Disposable code yaklaşımı review'u değiştirir: satır satır kod okumak yerine, niyetin, testlerin ve sınırların korunduğunu doğrularsınız. Diff'te bir test silindi mi? Bir invariant gevşetildi mi? Şema değişti mi? Bu sorular otomatik kontrollere de dönüştürülebilir.
Sahiplik de yeniden tanımlanmalı. Kodu kimin yazdığı değil, o davranıştan kimin sorumlu olduğu önemli. Her modülün bir insan sahibi, bir niyet dokümanı ve bir test seti olmalı; bu üçlü yoksa kodu atmak bilgi kaybetmek demektir.
Son gelişmeler
Ekim 2026 itibarıyla
Önce kendi cevabını düşün, sonra aç.
Kod disposable ise kod kalitesi önemsiz mi oldu?
Hayır. Prod'da çalışan kod hâlâ okunur, güvenli ve gözlemlenebilir olmalı, çünkü bir gece yarısı kesintisinde onu bir insan okuyacak. Değişen, kalitenin nerede sağlandığı: elle cilalamak yerine testler, linter'lar ve net sınırlarla.
Bu yaklaşım eski model-driven development hayalinin tekrarı değil mi?
Benzerliği var ve aynı riski taşıyor: üretilen kodun kontrolden çıkması. Fark, LLM'lerin doğal dilden üretim yapabilmesi ama deterministik olmaması. Bu yüzden testler ve sözleşmeler model-driven döneme göre çok daha kritik; spesifikasyon tek başına yetmiyor. Thoughtworks Radar da Kasım 2025'te spec-driven araçların ayrıntılı, el yazımı kuralların ölçeklenmeyebileceği uyarısını yaptı; bu yüzden spec kısa, testler sıkı olmalı.
Legacy bir kod tabanında nereden başlamalı?
En çok değişen ve en az anlaşılan modülü seçip önce karakterizasyon testleriyle mevcut davranışı kilitleyin. Ardından niyeti bir sayfada yazın ve modülün sınırını netleştirin. Ancak bu üçü hazır olduğunda yeniden üretimi denemek mantıklı.
Ajan testleri de değiştirirse ne olacak?
Test dosyalarına yapılan değişiklikleri ayrı bir kural olarak ele alın: CI'da silinen ya da gevşetilen testleri işaretleyin ve bu değişiklikler için zorunlu insan onayı isteyin. Testlerin ajanın değil, niyetin sahibinin kontrolünde kalması gerekir.
Küçük bir startup ADR ve spec yazmaya vakit ayırabilir mi?
Yarım sayfalık bir ADR 15 dakika sürer ve bir sonraki Agent görevinde saatler kazandırır. Startup'ta asıl pahalı olan, kurucunun kafasındaki bilginin ekip büyüyünce ya da Agent değişince kaybolması. AGENTS.md gibi standart bir talimat dosyası bu bilgiyi farklı Agent'lar arasında taşınabilir kılar.
Notun kaynakları
- Understanding Spec-Driven-Development: Kiro, spec-kit, and Tessl (martinfowler.com)
- How are developers using AI? Inside our 2025 DORA report (Google)
- GitHub Spec Kit
- Stack Overflow 2026 Developer Survey (basın bülteni)
- Thoughtworks Technology Radar: Codebase cognitive debt
- GitHub Spec Kit (repo)
- New DORA Report: ROI of AI-assisted development (InfoQ, Mayıs 2026)
Sunum stili
12 slayt. Tıklarsan sunum o slayttan başlar.
Slayt notları
Konuyu 'kod artık kaynak değil çıktı' cümlesiyle aç. Fiyatlandırma modülünü silip yeniden yazdırma deneyini sor.
Bir modülü silseler eski davranışın tamamının korunacağına kaç kişinin güvendiğini sor.
Derleyici ve binary benzetmesini kullan: kimse binary'yi elle düzeltmez, kaynağı düzeltip yeniden derler.
Üstten alta indikçe kalıcılık artar. İndirimde yüzde 15 sınırı örneğiyle niyetin koddan okunamayacağını göster.
Spec-anchored seviyeyi anlat: spec görev bittikten sonra da yaşar. Bir sayfada anlatılamayan modül güvenle yeniden üretilemez.
Mock ile private metot çağrısı sayan testlerin yeniden yazımda toplu kırıldığını, hiçbir şey anlatmadığını ekle.
Tek yönlü ve çift yönlü kapı ayrımını kullan. Çift yönlüler hızlı, tek yönlüler yavaş ve yazılı verilir.
Tüm repoya dokunan Agent değişikliğinin review'u imkânsızlaştırdığını söyle. Değişikliği modül sınırına hapset.
DORA Eylül 2025 ve Stack Overflow Ekim 2026 verileri. Kod ucuzladıkça doğrulama pahalılaşıyor; DORA 2026 ROI raporu buna verification tax diyor. Agent günde onlarca Pull Request açar, insan her birini anlamak zorunda.
Araçlar olgunlaştı ama risk de adını aldı. Niyet katmanı artık bir dosya formatı ve bir iş akışı; anlayış ise hâlâ ekipte olmak zorunda.
Diff denetiminde üç soru: test silindi mi, invariant gevşedi mi, sözleşme değişti mi? Bunlar CI'da otomatik kontrole dönüşebilir.
Kapanış: önce niyeti bir sayfaya yaz, davranış testleriyle kilitle, sonra deneyi yap.