Yeni bir projeye başlarken, özellikle JavaScript/TypeScript ekosistemindeyseniz, bir geliştiricinin ilk refleksi nedir? İhtiyacı olan her ufak tefek özellik için anında terminali açıp npm install bilmemne-paketi yazmak. Tarih formatlamak mı lazım? İndir bir paket. Butonun rengini mi değiştireceksin? İndir bir paket.
Açık kaynak (Open Source) kod dünyası gerçekten bir mucize. Bizi tekerleği yeniden icat etmekten kurtarıyor ve hızla ürün geliştirmemizi sağlıyor. Ancak sektördeki pek çok genç mühendisin ve özellikle maliyetleri kısmaya çalışan yöneticilerin anlamadığı çok kritik bir denklem var: Açık kaynak kod bedavadır, ancak o kodu projenizde tutmanın bir maliyeti vardır.
Bir startup kuruyorsunuz, projeye 50 farklı üçüncü parti (third-party) kütüphane ekleyip ürünü iki ayda canlıya alıyorsunuz. Harika bir başarı öyküsü gibi duruyor değil mi? Ancak arka planda saatli bir bomba kurdunuz ve bunun adına "Teknik Borç" (Technical Debt) diyoruz.
Bir kütüphaneyi projenize dahil ettiğiniz an, o kütüphanenin gelecekteki tüm kaderini de projenize bağlamış olursunuz. O "bedava" kütüphaneyi yazan geliştirici yarın projeyi sıkılıp terk edebilir. Altı ay sonra o kütüphanede devasa bir güvenlik zafiyeti (CVE) bulunabilir. Kullandığınız framework'ün yeni versiyonu çıktığında, o çok sevdiğiniz kütüphane uyumsuz hale gelebilir.
Ve işte o an, "bedava" dediğiniz o kod parçasının faturasını ödeme vakti gelmiştir.
DevOps mühendisi ve kurucu şapkamla Suku Tech'i yönetirken en çok mesai harcadığım şeylerden biri "Dependency Hell" (Bağımlılık Cehennemi) dediğimiz bu durumdan kaçınmaktır. GitHub'da yıldız (star) sayısı yüksek diye her kütüphaneyi projenize alamazsınız. Bir noktadan sonra sadece npm paketlerinizi güncellemek, birbirleriyle uyumlu versiyonlarını bulmak ve çıkan güvenlik uyarılarını (dependabot alerts) temizlemek için tam zamanlı bir mühendis çalıştırmak zorunda kalırsınız.
Çok ünlü "Left-pad" krizini hatırlayın. Bir geliştirici, sadece 11 satırlık basit bir kodu NPM'den çektiği için dünya çapında React ve Babel dahil binlerce proje saatlerce çökmüş, build alamaz hale gelmişti. Sadece 11 satır!
Artık kendi projelerimde (ve ekibimden beklediğim standartlarda) kuralım çok basit: Eğer ihtiyacım olan özellik projemin temel (core) iş süreçlerinden biri değilse ve kendim 1-2 gün içinde yazabileceksem, asla dışarıdan bir bağımlılık (dependency) eklemem. Oturup o mantığı kendim yazarım. Çünkü kendi yazdığım 100 satırlık basit kodun tüm kontrolü bendedir. Bozulursa nasıl tamir edeceğimi bilirim.
Özetle, dışarıdan aldığınız her paket (package), aslında sisteminize davet ettiğiniz yabancı bir misafirdir. Açık kaynak dünyasına minnettarız, ancak bedava peynirin sadece fare kapanında olduğunu da unutmamak gerekiyor. Yazılım mimarisinde en iyi bağımlılık, hiç var olmayan bağımlılıktır.