Sertaç Yıldırım saha notları

Ana sayfa → Teknik

Mimari Karar Kaydı: Toplantı Değil, Tek Sayfa

“Bu kuyruğu neden böyle kurmuşuz?” Odadaki üç kişi üç farklı cevap verdi. Kararı veren kişi sekiz ay önce ayrılmıştı. İki saat tartıştık ve sonunda aynı kararı yeniden verdik — ama bu sefer gerekçesi farklıydı.

Özet
  • Karar kaydı geçmiş için değil, gelecekteki tartışma için yazılır. Amaç arşiv değil, aynı tartışmayı üçüncü kez yapmamak.
  • En değerli bölüm “reddedilen seçenekler”. Bir yıl sonra gelen soru “bunu neden yaptık” değil, “neden şunu yapmadık” oluyor.
  • Her karar yazılmaz. Sadece geri alması pahalı olanlar. Her şeyi yazmaya çalışan ekip üçüncü ayda hiçbir şey yazmıyor.
  • Kayıt değiştirilmez. Karar değişirse eskisi silinmez, yerine yenisi geçer. Değiştirilen kayıt, hafızayı tahrif eder.
  • Repo’da durur, wiki’de değil. Kodla birlikte değişmeyen doküman, altı ay içinde yanlış bilgi kaynağına dönüşüyor.
  • Maliyeti 20 dakika. Yazmamanın maliyeti, aynı toplantının ikinci turu.

Sahadan: aynı kararı ikinci kez vermek

O iki saatlik toplantıdan çıkan sonuç “mevcut yapı kalsın” oldu; yani hiçbir şey değişmedi. Dışarıdan bakan biri toplantının boşa geçtiğini söylerdi. Bence daha kötüsü oldu: aynı kararı farklı bir gerekçeyle verdik.

Sekiz ay önceki gerekçe — sonradan eski bir mesaj kaydında buldum — işletme maliyeti ve ekibin o teknolojiyi zaten biliyor olmasıydı. Bizim ürettiğimiz gerekçe ise sıralama garantisiydi. İkisi de makul, ama farklı. Bu şu demek: gelecekte koşullar değişip “sıralama artık önemli değil” olduğunda, kararı değiştirmeyi düşüneceğiz — oysa asıl dayanak hiç o değildi.

Kendi payıma düşen hata şu: o toplantıdan çıkarken de bir şey yazmadım. “Zaten değişiklik yok” dedim. Üç ay sonra aynı soru yeniden soruldu.

Yazılmayan karar, verilmemiş karardır. Sadece bir süre öyleymiş gibi davranırsın.

Tek sayfa, altı başlık

ADR’yi karmaşıklaştıran ekiplerde yazılmıyor. Bizimki bu kadar:

Sablon: docs/adr/0023-kuyruk-secimi.md
# ADR-0023: Kuyruk altyapisi secimi

DURUM   : Kabul edildi  (2026-04-18)
          [Onerildi | Kabul edildi | Yerine gecti: ADR-00xx]
KARAR   : Siparis olaylari icin X kuyrugunu kullaniyoruz.
YAZAN   : tek isim
KATILAN : toplantidaki kisiler (karar tek kisinin degilse)

## Baglam
O anki durum, kisitlar ve karari tetikleyen sey.
Gunde 400 bin olay; siralama siparis bazinda onemli;
ekipte 2 kisi bu teknolojiyi biliyor; butce X.
(Gelecekteki okuyucu bugunu bilmiyor. Burasi onun icin.)

## Karar
Ne yapiyoruz, tek paragraf. Emir kipi degil, gecmis zaman:
"Sectik", "Kullanacagiz".

## Sonuclar
Bu karar neyi kolaylastiriyor, neyi zorlastiriyor.
Zorlastirdigi seyi yazmak zorunlu; yoksa kayit reklam olur.

## Reddedilen secenekler
- Y : neden elendi (tek cumle)
- Z : neden elendi
- Hicbir sey yapmamak : neden yeterli degildi

Dört başlık zorunlu: bağlam, karar, sonuçlar, reddedilen seçenekler. Geri kalanı isteğe bağlı. Yazması 20 dakika sürüyor ve bu süre, kararı veren toplantının hemen ardından harcanmalı — ertesi gün gerekçelerin yarısı buharlaşıyor.

Neden “reddedilen seçenekler” en değerli bölüm

Bir yıl sonra kimse gelip “bunu neden yaptık” diye sormuyor. Çünkü yapılan şey ortada, kod duruyor. Soru her zaman şu: “Neden şunu yapmadık?”

O bölüm olmadan bu sorunun tek cevabı yeniden araştırma yapmak oluyor. Bölüm varsa cevap otuz saniye sürüyor — ve daha önemlisi, cevap “denedik, eledik” değil de “o zaman şu sebeple elemiştik, o sebep hâlâ geçerli mi?” oluyor. Kararı yeniden açmayı engellemiyor; doğru yerden açmayı sağlıyor.

Bir de “hiçbir şey yapmamak” seçeneğini listeye koymayı alışkanlık hâline getirdik. Çoğu mimari kararın en ciddi rakibi budur ve genelde hiç konuşulmaz.

Hangi kararlar yazılır?

Yazılır (geri alması pahalı)
  • Veri modeli ve sahiplik sınırları
  • Servis sınırları, neyin ayrı servis olduğu
  • Mesajlaşma / kuyruk altyapısı
  • Kimlik doğrulama ve yetkilendirme yaklaşımı
  • Dış bağımlılık seçimi (sağlayıcı, ödeme, arama)
  • Tutarlılık modeli: nerede anlık, nerede nihai
Yazılmaz (tersinir)
  • Yardımcı kütüphane seçimi
  • Klasör düzeni, isimlendirme
  • Bir fonksiyonun nasıl yazıldığı
  • Test kütüphanesi
  • Tek bir servisin iç tasarımı

Bunlar kod incelemesinin konusu, kayıt konusu değil.

Ayrım net olmazsa iki uçtan birine düşülüyor: ya hiçbir şey yazılmıyor, ya da her PR için ADR isteniyor ve üçüncü ayda kimse yazmıyor. Bizim kullandığımız test tek cümle: bu kararı altı ay sonra geri almak bir sprint’ten uzun sürer mi? Sürerse yazılır.

Durum alanı: kayıt silinmez

En sık yapılan hata, karar değişince eski kaydı güncellemek. Böylece geçmiş kayboluyor ve dosya “bugünkü durum”u anlatan sıradan bir dokümana dönüşüyor — ki onun için zaten kod var.

Karar degisince
ADR-0023  DURUM: Yerine gecti -> ADR-0031   (2027-02-10)
          (icerigi AYNEN kalir, tek satir eklenir)

ADR-0031  DURUM: Kabul edildi (2027-02-10)
          ## Baglam
          ADR-0023'te X secmistik. O zamanki gerekce gunde
          400 bin olaydi. Bugun 3 milyon ve siralama artik
          bolum bazinda yetiyor. Kosul degisti, karar degisti.

Bu zincir bir yan fayda daha veriyor: yeni katılan biri kararların sırasını okuyabiliyor. “Neden böyle”nin cevabı çoğu zaman tek bir kararda değil, üç kararın üst üste binmesinde.

Nerede durur, kim yazar

Kayıtlar repo’da, docs/adr/ altında, kodla aynı PR’da. Bunun sebebi runbook’ları wiki’den çıkardığımız sebeple aynı: kodla birlikte değişmeyen doküman güncellenmiyor ve altı ay içinde aktif olarak yanlış bilgi vermeye başlıyor.

Yazan kişi de belli: kararı veren toplantıdan çıkan kişi. Bir başkasına devredilen ADR yazılmıyor. Kayıt, o PR’ın parçası olarak inceleniyor — ve incelemede en çok itiraz gelen bölüm genelde “sonuçlar” oluyor, çünkü insanlar kararın zorlaştırdığı şeyi yazmayı atlıyor.

Ne izlemeli?

NeNeden
Son altı ayda yazılan kayıt sayısıSıfırsa ya karar verilmiyor ya kaydedilmiyor; ikisi de kötü
“Reddedilen seçenekler” bölümü dolu olan kayıt oranıBoşsa kayıt yarım; en sık atlanan bölüm bu
Yerine geçilen kayıt sayısıHiç yoksa kayıtlar yaşamıyor, arşiv olmuş demektir
Aynı konunun ikinci kez tartışılmasıSayılmaz ama fark edilir. Olduğunda “kaydı var mı” diye sor

Bende işe yaramayanlar

  • Geçmişe dönük ADR yazmak. “Son iki yılın kararlarını belgeleyelim” dedik. Altı kayıt yazıldı, hepsi genel geçer cümlelerle doluydu, çünkü kimse o günün kısıtlarını hatırlamıyordu. Kayıt ancak karar anında değerli; sonradan yazılan, tahminden ibaret.
  • Şablona bölüm eklemek. “Riskler”, “maliyet analizi”, “alternatif mimari şeması” ekledik. Yazma süresi 20 dakikadan iki saate çıktı ve kayıt sayısı sıfıra indi. Geri aldık.
  • Onay süreci koymak. ADR’yi “mimari kurul onaylar” yapınca kayıt yazmak, karar almanın önüne geçen bir bürokrasiye döndü. Şimdi kayıt kararın kendisi değil, kararın yazısı; onay gerekiyorsa o zaten toplantıda verilmiş oluyor.

Kontrol listesi

Kaydı kapatmadan önce
  • Bu kararı altı ay sonra geri almak bir sprint’ten uzun sürer mi?
  • Bağlam bölümü, bugünü bilmeyen birine yetecek kadar somut mu?
  • Sonuçlar bölümünde kararın zorlaştırdığı şey yazıyor mu?
  • Reddedilen seçenekler dolu mu — ve “hiçbir şey yapmamak” listede mi?
  • Kaydı, kararı veren toplantıdan çıkan kişi mi yazdı?
  • Kayıt repo’da mı, kodla aynı PR’da mı?
  • Eski bir kararı değiştiriyorsa, eskisini silmek yerine “yerine geçti” yaptım mı?

Sonuç

O iki saatlik toplantının maliyeti dört kişinin yarım günü oldu ve hiçbir şey değişmedi. Sekiz ay önce birinin 20 dakika ayırmış olması, o toplantıyı tamamen gereksiz kılardı — ya da daha iyisi: toplantıyı yine yapardık ama bu sefer “koşullar değişti mi” sorusundan başlardık, sıfırdan değil.

Karar kaydı bir belgeleme alışkanlığı değil, bir tartışma kısaltma aracı. Değerini kaydı yazarken değil, bir yıl sonra birisi onu açtığında veriyor.

Test basit: ekipteki en yeni kişi, en tartışmalı mimari kararın gerekçesini tek başına bulabilir mi? Bulamıyorsa o gerekçe bir kişinin kafasında duruyordur, ve o kişi bir gün gider.