Bir yazılım ürününün maliyetinin büyük bölümü ilk sürümde değil, sonraki yıllarda ortaya çıkar. Yeni gereksinimler eklenir, ekipler değişir, kullanılan kütüphaneler eskir ve sistem başlangıçta öngörülmeyen yük altında çalışmaya başlar. Sürdürülebilir bir yazılım, bu değişimi düşük sürtünmeyle karşılayabilen yazılımdır. Bu yazıda, proje türünden bağımsız olarak geçerli olan temel ilkeleri ele alıyoruz.
1. Kapsamı yazılı ve görünür tutmak
Sürdürülebilirlik kodla değil, kapsamla başlar. Hangi iş ihtiyacının çözüldüğü, hangi kullanıcı rollerinin bulunduğu ve neyin bilinçli olarak kapsam dışında bırakıldığı yazılı olmalıdır. Kapsamın belirsiz kaldığı projelerde teknik borç, kodun kalitesinden çok verilen kararların izlenememesinden doğar.
- İş hedefleri ve başarı ölçütleri kısa bir dokümanda toplanmalıdır.
- Kapsam dışı bırakılan maddeler de listelenmelidir; böylece sonradan eklenen talepler bilinçli bir değerlendirmeden geçer.
- Her büyük teknik karar için "neden bu yol seçildi" sorusunu yanıtlayan kısa bir karar kaydı tutulmalıdır.
2. Sınırları net modüller kurmak
Bir sistemin tamamını tek bir bütün olarak düşünmek, değişikliğin etkisini kestirmeyi zorlaştırır. Alan bilgisine göre ayrılmış modüller (siparişler, kullanıcılar, raporlar gibi) ve bu modüllerin birbirleriyle yalnızca tanımlı arayüzler üzerinden konuşması, bir bölümdeki değişikliğin diğerlerini bozma riskini azaltır.
Pratik kurallar
- İş kuralları denetleyicide değil, ayrı bir servis katmanında yer almalıdır.
- Veri erişimi tek bir yerde toplanmalı, aynı sorgu farklı dosyalarda çoğaltılmamalıdır.
- Bir modülün başka bir modülün iç tablolarına doğrudan erişmesinden kaçınılmalıdır.
3. Otomatik testlerle değişimi güvenli hale getirmek
Test, "şimdi çalışıyor mu" sorusundan çok "değiştirdiğimizde bir şeyi bozduk mu" sorusuna cevap verir. Tüm kodu test etmek gerekmez; ancak para, yetki, veri bütünlüğü ve entegrasyon gibi kritik akışların otomatik testle korunması gerekir. Testin hızlı çalışması da önemlidir: yavaş çalışan test paketi çalıştırılmamaya başlar.
- İş kurallarını doğrulayan birim testleri ve uçtan uca akışları doğrulayan az sayıda entegrasyon testi birlikte kullanılabilir.
- Bir hata bulunduğunda önce onu yeniden üreten bir test yazmak, aynı hatanın geri dönmesini önler.
- Testler sürekli entegrasyon sürecinde her değişiklikte çalıştırılmalıdır.
4. Bağımlılıkları bilinçli yönetmek
Her ek kütüphane, projeye bir bakım yükümlülüğü ekler. Bir bağımlılık seçerken sürdürülme durumu, lisansı, güvenlik geçmişi ve ihtiyacı kendi kodumuzla karşılamanın maliyeti birlikte değerlendirilmelidir. Sürüm numaralarının sabitlenmesi ve güncellemelerin düzenli aralıklarla, küçük adımlarla yapılması büyük sıçramalı yükseltmelerin riskini azaltır.
5. Dokümantasyonu kodun yanında yaşatmak
Kurulum adımları, ortam değişkenleri, dağıtım süreci ve temel mimari kararlar kod deposunda tutulmalıdır. Ayrı bir wiki'de unutulan doküman çabuk eskir. Yeni bir geliştiricinin ya da bakım ekibinin sistemi kısa sürede ayağa kaldırabilmesi, sürdürülebilirliğin en somut göstergelerinden biridir.
- Depoda güncel bir kurulum ve çalıştırma kılavuzu bulunmalıdır.
- Ortam değişkenleri örnek bir dosyada, hassas değerler olmadan listelenmelidir.
- Dağıtım ve geri alma adımları yazılı olmalıdır.
6. Gözlemlenebilirlik: sistemin ne yaptığını görebilmek
Üretimde çalışan bir sistemde sorun çıktığında yapılması gereken ilk şey, ne olduğunu görmektir. Anlamlı günlük kayıtları, hata izleme ve temel sağlık kontrolleri olmadan sorunlar kullanıcılar tarafından fark edilir. Günlüklerde kişisel veri ve gizli anahtarların yer almamasına özellikle dikkat edilmelidir.
7. Küçük ve sık yayınlar
Büyük ve seyrek yayınlar, risk biriktirir. Küçük değişikliklerin otomatik bir hat üzerinden test edilip yayınlanması, sorun çıktığında nedenini bulmayı ve geri dönmeyi kolaylaştırır. Veritabanı değişiklikleri için geri alınabilir geçişler (migration) kullanmak ve canlıya alma öncesinde yedek almak temel bir alışkanlık olmalıdır.
8. Güvenliği sonradan eklenecek bir özellik olarak görmemek
Yetkilendirme, girdi doğrulama, parola ve oturum yönetimi gibi konular tasarım aşamasında ele alınmalıdır. OWASP gibi kamuya açık kaynakların listelediği yaygın zafiyet türlerini geliştirme sürecinin kontrol listesine koymak, sonradan pahalıya mal olacak açıkların önüne geçer.
Sonuç
Sürdürülebilir yazılım, tek bir tekniğin değil, birbirini destekleyen küçük alışkanlıkların sonucudur: yazılı kapsam, net modül sınırları, otomatik test, bilinçli bağımlılık yönetimi, güncel doküman, gözlemlenebilirlik ve düzenli yayın. Bu alışkanlıklar başlangıçta ek çaba gibi görünse de, sistem büyüdükçe değişim maliyetini belirgin biçimde düşürür. Mevcut bir sistemi bu açılardan değerlendirmek ya da yeni bir projeyi sağlam temellerle başlatmak istiyorsanız, ihtiyaçlarınızı bizimle paylaşabilirsiniz.
0 yorum
Bu yazı hakkında ne düşünüyorsunuz?
Bu yazıya henüz yorum yapılmamış. İlk yorumu siz yazın.
Yorum yazın
E-posta adresiniz yayımlanmaz. Yorumunuz onaylandıktan sonra yayımlanır. * işaretli alanlar zorunludur.