Ana Sayfa

Sistem Düşüncesi: Karmaşık Yazılım Geliştirme Yaklaşımları

2 dk okuma

Yazılım geliştirmede büyük ve karmaşık sistemler inşa etme konusunda iki ana düşünce ekolü bulunmaktadır. İlk ve günümüzde daha yaygın olan yaklaşım, karmaşıklığı zamanla kademeli olarak evrimleştirmektir; küçük başlanır ve üzerine eklenerek ilerlenir. Diğer yaklaşım ise, tüm karmaşıklığı önceden detaylı bir şartname ile belirleyip, ardından sistemi bu plana göre inşa etmektir. Bu durum, bir girişimcinin startup kurma yaklaşımı ile modern gökdelenlerin inşası arasındaki farka benzetilebilir: Evrim mi, Mühendislik mi?

Bir şirkette, onlarca iş kolunu ve tüm iç departmanları kapsayan 3000'den fazla aktif sistemin elli yıl içinde bu şekilde evrildiğini gözlemledim. Farklı teknoloji yığınları ve sayısız tedarikçi içeren bu yapı, tek bir bütün olarak bakıldığında oldukça kırılgan bir kartopu evini andırıyordu. Veri tutarsızlıkları, güvenlik açıkları, operasyonel zorluklar, kalite sorunları ve erişim farklılıkları bu bağlantısız projeler arasında devasaydı. Bazı sistemler güncelken, bazıları çok eskiydi ve bazıları zar zor çalışıyordu. Çok daha az sayıda sistemle, bu kendi kendine yaratılan sorunların çoğu ortadan kalkabilirdi.

Aslında, toplam karmaşıklığı yarıya indirmek yerine, bugünkü seviyesinin onda birine, hatta daha da altına düşürmek mümkün olabilirdi. Bu tür bir sistem daha iyi işlev görür, daha güvenilir olur ve değişikliklere karşı çok daha dirençli olurdu. Muhtemelen çok daha az maliyetli olur ve daha az çalışan gerektirirdi. Mevcut pek çok sorun basitçe var olmazdı. Bu iki yaklaşım arasındaki temel fark, bağımlılıklarla nasıl başa çıkıldığı etrafında şekillenir. Binlerce bağımsız küçük karmaşıklık yığını olsaydı, her birini tek tek tamamlamak yeterli olurdu. Ancak pratikte, büyük bir ekosistemdeki çok az şey gerçekten bağımsızdır. Sistemi evrimleştirmeyi seçerseniz, bu bağımlılıkları başlangıçta göz ardı eder ve karmaşıklık arttıkça sonradan çözmeye çalışırsınız; bu daha hızlıdır ve hemen başlama imkanı sunar. Büyük bir sistem tasarlamayı seçerseniz ise, bu bağımlılıklar tasarımı belirler; her birini baştan anlamanız gerekir. Bu, mimariden kodlama stiline kadar her şeyi etkiler ve sistem üzerinde çalışan herkesin etkileşim kurmasını, koordine olmasını ve iletişim kurmasını gerektirir. Bu durum, yönetim ve programcıların istemediği bir sürtüşme yaratır, çünkü kısa vadede herkes kendi başına daha hızlı ilerleyeceğini düşünür. Ancak bir bağımlılığı göz ardı edip sonra düzeltmeye çalışmak, uzun vadede çok daha maliyetli olacaktır.

İçgörü

Uzun vadeli sürdürülebilirlik ve maliyet etkinliği için karmaşık sistemlerin tasarlanmasında bağımlılıkların başlangıçta ele alınması, kademeli evrime göre daha sağlam ve yönetilebilir sonuçlar doğurur.

Kaynak