Mimari sınır ile sürüm planı aynı şey değil
Bir projenin karar kayıtlarını (ADR) incelerken üzerinde durulmuş bir ayrım gördüm: “Architecture Boundary” (mimari sınır) ile “Release Planning” (sürüm planı) bilinçli olarak iki ayrı karar otoritesi altına konmuş.
Fark şu: bir özelliğin “ilk sürümde yok” olması bir yol haritası kararı. “Şu an bunun için mimari tasarlamıyoruz” olması ayrı bir karar, çok daha kalıcı sonuçları var. Birincisi zamanlama sorunu, ikincisi kapsam sorunu.
Karar dokümanındaki gerekçe net:
Bir özelliği “ilk sürümde yok” (yol haritası dili) olarak ele almak, “şu an bunun için tasarlamadığımız bir şey” (sınır dili) olarak ele almak yerine, erken bağlanmanın (premature coupling) ve tasarım borcunun tam olarak nasıl biriktiğinin kendisi.
Bunu neden önemsiyorum: “sonra ekleriz” dediğimiz özellik listesi genelde yol haritası kararı gibi konuşulur ama örtük olarak mimariyi de bağlar. Bir entegrasyonu “faz 2’de” diye erteleyip bugünkü şemayı, API sözleşmesini o entegrasyon hiç yokmuş gibi tasarlarsan, faz 2 geldiğinde “ekleme” değil “yeniden yapma” olur. Sınırı önceden açıkça çizmek (bu asla desteklenmeyecek / bu şu an desteklenmiyor ama arayüz buna izin veriyor) iki farklı taahhüt, ikisini de baştan ayırt etmek gerekiyor.
Pratik sonucu: bir “yapmıyoruz” kararı yazarken hangi cümleyi kurduğuma dikkat ediyorum artık. “Bu sürümde yok” başka bir şey söylüyor, “bunun için tasarlamıyoruz” başka bir şey.