1967 yılında bilgisayar bilimcisi Melvin Conway, yazılım mühendisliği tarihinin en çarpıcı ve zamanı aşan sosyo-teknik gözlemini makalesine döktü:
"Sistem tasarlayan herhangi bir organizasyon, kaçınılmaz olarak kendi iletişim yapısının bir kopyası (kopyalanmış bir yansıması) olan tasarımlar üretmeye mahkûmdur."
Bu cümle literatüre Conway Kanunu (Conway's Law) olarak geçti ve o günden bu yana geçen altmış yılda doğruluğunu bir an bile yitirmedi.
Eğer bir şirkette derleyici (compiler) yazmak üzere dört ayrı ekip görevlendirirseniz, ortaya kaçınılmaz olarak 4 aşamalı bir derleyici çıkar. Eğer bir şirkette veritabanı ekibi, backend ekibi ve frontend ekibi birbirine cam duvarlarla ayrılmış, farklı katlarda oturan ve sadece resmi Jira biletleriyle haberleşen üç ayrı kast sistemi gibi örgütlenmişse; üretecekleri yazılım da tam olarak üç katmanlı, aralarında devasa veri transfer maliyetleri ve anlaşmazlık protokolleri barındıran hantal bir yapıya bürünür.
Kod, hiçbir zaman nötr bir laboratuvar ortamında, saf matematiksel bir zerafetle yazılmaz. Kod; insanların birbirleriyle olan sohbetlerinin, dedikodularının, güç savaşlarının, güven seviyelerinin ve organizasyonel korkularının dijital bir kopyasıdır.
Hastane Koridorlarındaki Kopukluk: Beden mi Hasta, Organizasyon mu?
Bu durumun acil tıptaki ve hastane yönetimindeki faturası doğrudan insan canıdır.
Bir üniversite hastanesini düşünün. Acil Tıp Kliniği, Radyoloji Anabilim Dalı ve Genel Cerrahi Kliniği... Teoride bu üç birimin tek bir ortak amacı vardır: Kapıdan giren kritik hastayı hayatta tutmak.
Fakat pratikte ne olur?
Eğer hastanenin başhekimliği bu birimler arasında sağlıklı bir iletişim ve güven kültürü kuramamışsa; her klinik kendi bürokratik kalesine çekilir. Acildeki hekim trafik kazası geçirmiş hastaya acil batın tomografisi ister. Radyoloji ekibi "Haber vermeden hasta gönderdiniz, randevu sırası var, çekemeyiz" diyerek hastayı sedyede 45 dakika bekletir. Çekim yapılır; cerrahi kıdemlisi "Bu rapor çok yüzeysel yazılmış, hastayı ameliyata alamam, tekrar konsültasyon notu düşün" der.
O koridorda hasta iç kanamadan şoka girerken, asıl patoloji hastanın parçalanmış karaciğerinde değildir; asıl patoloji, hastanenin organizasyon şemasındaki düşmanlıklarda ve bürokratik duvarlardadır. Sistem parçalanmıştır, çünkü o sistemi işleten insanlar parçalanmıştır.
Yazılım sistemlerinde de aynı ölümcül tablo yaşanır. Bir mikroservisin diğer bir mikroservise HTTP çağrısı yaparken neden 500 hatası döndüğünü veya neden anlamsız 30 saniyelik timeout süreleri tanımlandığını araştırdığınızda; meselenin ağ katmanında değil, o iki servisi yazan ekiplerin birbirleriyle konuşmamasında yattığını görürsünüz. İletişimsizlik, kodun içine retry mekanizmaları, güvensizlik protokolleri ve defansif kod blokları olarak sızar.
Spagetti Kodun Altındaki Spagetti Organizasyon
Bir şirketin kod tabanına baktığınızda, o şirketin ofis içindeki güç dengelerini bir röntgen filmi gibi okuyabilirsiniz:
- Tanrı Nesneler (God Objects): Eğer kodda binlerce satırdan oluşan, her şeye karışan, tüm kararları tekeline almış devasa bir sınıf (class) varsa; emin olun o şirkette her kararı kendi onayından geçirmek isteyen, kimseye yetki devretmeyen otokrat bir kurucu veya teknik direktör vardır.
- Kırılgan API Sözleşmeleri: Eğer iki servis arasındaki veri formatı sürekli bozuluyor ve bir taraf diğerini habersizce yarı yolda bırakıyorsa; o iki servisin yöneticileri haftalık ürün toplantılarında birbiriyle pasif-agresif çatışmalar yaşayan insanlardır.
- Aşırı Savunmacı Kod: Kod tabanı her parametreyi on kez kontrol eden, sürekli "acaba diğer servis bana yanlış veri gönderir mi?" paranoyasıyla yazılmış kalkanlarla doluysa; o şirkette hata yapanın acımasızca cezalandırıldığı, psikolojik güvenliğin sıfır olduğu bir kültür hüküm sürmektedir.
Mimarlar aylarca toplanıp beyaz tahtalarda en modern mikroservis diyagramlarını, domain-driven design (DDD) modellerini çizebilirler. Ancak o kutucukların içine yerleştireceğiniz ekipler birbirine güvenmiyorsa, günün sonunda elde edeceğiniz tek şey "dağıtık bir monolit" (distributed monolith) ve ağ üzerinden birbirine küfür eden mikroservisler çöplüğüdür.
Ters Conway Manevrası (Inverse Conway Maneuver)
Peki bu döngü nasıl kırılır?
Çözüm, yazılım literatüründe "Ters Conway Manevrası" olarak adlandırılan stratejide yatar: Eğer sistem mimarinizi değiştirmek istiyorsanız, önce organizasyonel yapınızı ve ekiplerinizin iletişim biçimini değiştirmek zorundasınız.
Yazılım mimarları artık sadece UML diyagramları çizen teknik figürler olamazlar; onlar aynı zamanda organizasyonel sosyologlar olmak zorundadırlar.
- Çapraz Fonksiyonel Otonom Ekipler: Frontend'ciyi bir odaya, Backend'ciyi başka bir kata, DevOps'çuyu bodrum katına hapsetmeyi bırakın. Belirli bir iş alanından (domain) uçtan uca sorumlu; içinde tasarımcısı, ürün yöneticisi, önyüz ve arayüz mühendisi barındıran otonom ekipler (squad'lar) kurun. Bu insanlar aynı masada oturduklarında veya aynı Slack kanalında nefes aldıklarında, servisler arasındaki sürtünme doğal olarak yok olur.
- Ortak Sorumluluk Kültürü: "Bu hata backend'in suçu", "Bu UI tasarımcının hatası" duvarlarını yıkın. Bir hasta masada kaldığında tüm ameliyathane ekibi birlikte hesap verir; bir servis çöktüğünde de tüm squad birlikte ayağa kaldırmalıdır.
- Ofis Mimarisi Kod Mimarisidir: Uzaktan çalışmada bile kanalların şeffaflığı, DM (direkt mesaj) kültürünün yerini açık tartışma ortamlarının alması; kodun içindeki gizli bağımlılıkları (hidden coupling) anında azaltır.
Kodu Düzeltmek İstiyorsan İnsandan Başla
Sistemler soyut makineler değildir; insan zihninin ve toplumsal ilişkilerin somutlaşmış halleridir.
Eğer projenizde teknik borçlar çığ gibi büyüyorsa, kod tabanınız bir labirente dönmüşse ve ekipler birbirinin ayağına basmadan tek bir özellik dahi canlıya alamıyorsa; suçu programlama dilinde veya kütüphanelerde aramayın.
Dönün ve şirketinize bakın.
Kimin kiminle konuşmadığına, yöneticilerin hangi bilgileri sakladığına, ekiplerin birbirine ne kadar güvendiğine bakın. Çünkü şirketinizin içindeki duvarları yıkmadan, kodunuzun içindeki spagettiyi asla çözemezsiniz.
Melvin Conway'in altmış yıl önce fısıldadığı gerçek bugün de değişmemiştir: Kodunuz, aynadaki kendi yüzünüzdür.