Yazılım Projesini Somut Bir İhtiyaç Analiziyle Başlatıyoruz

Bir işi otomatikleştirmeden önce, o işin elle nasıl yürüdüğünü adım adım izlemeyi tercih ediyoruz. Sağlam bir yazılım projesi, kod yazmakla değil, çözülecek sorunu net tanımlamakla başlar. İşletmenizde vakit kaybettiren, hata üreten ya da tekrar tekrar yapılan işleri masaya yatırıyoruz. Çoğu zaman ilk söylenen istek gerçek ihtiyacın kendisi değil, görünen belirtisidir; biz asıl derdi bulmaya çalışıyoruz. Kimin bu aracı günlük kullanacağını, hangi adımda zorlandığını yerinde dinliyoruz. İşi sahada yapan kişiyle konuşmak, çoğu zaman uzun toplantılardan daha çok şey öğretiyor. Mersin’deki küçük bir ekiple, çok şubeli bir yapının ihtiyacı aynı olmadığı için çözümü size göre ölçekliyoruz. Gerçek ihtiyacı yanlış okursak, en özenli kod bile yanlış soruna cevap verir. Doğru soruyu sormak, sonraki bütün geliştirme kararlarının önünü açıyor. İlk günden doğru soruyu bulmak, ilerleyen aylarda pahalı geri dönüşleri önlüyor.
İhtiyacı anladıktan sonra kapsamı yazılı bir belgeye döküyoruz; neyin yapılacağı kadar neyin şimdilik yapılmayacağı da bu belgede yer alır. Kapsamı baştan net çizmek, bir yazılım sürecini yarı yolda büyüyüp kontrolden çıkmaktan korur. Her isteği aynı anda yetiştirmeye çalışmak yerine, işinize en çok değeri katacak parçaları önceliklendiriyoruz. Hangi özelliğin ilk sürümde, hangisinin sonraya kalacağını birlikte kararlaştırıyoruz. Kapsam büyüdükçe maliyetin ve sürenin de büyüdüğünü açıkça anlatıyoruz. Böylece bütçeniz, gerçekten kullanılacak işlevlere gidiyor; kimsenin açmayacağı ekranlara değil. Sonradan eklenecek istekler için de kapıyı kapatmıyor, bunları ayrı bir aşamaya not ediyoruz. Belirsizliği baştan azaltınca, ilerleyen haftalarda sürpriz maliyet ve gecikme riski de belirgin biçimde düşer. Neyin yapılmayacağını yazmak, çoğu zaman neyin yapılacağını yazmak kadar değerlidir. Böylece herkes aynı resme bakarak ilerliyor, sürpriz beklentiler doğmuyor.
Kapsam belgesini teknik terimlerle değil, sizin anlayacağınız sade bir dille yazıyoruz. Her işlevin karşısına, o işlevin hangi iş sorununu çözdüğünü tek cümleyle not ediyoruz. Böylece geliştirme boyunca bunu neden yapıyoruz sorusunun cevabı hep elimizin altında durur. Ekranların kaba taslaklarını önce kâğıt üzerinde çiziyor, kod yazmadan önce akışı sizinle konuşuyoruz. Bu taslaklar üzerinde değişiklik yapmak, hazır kodu bozmaktan çok daha kolay ve ucuzdur. Bir düğmenin yeri ya da bir adımın sırası, geç fark edilirse pahalıya patlar; erken fark edilirse dakikalar içinde düzelir. Akışı önce kâğıtta görmek, çoğu yanlış anlaşılmayı daha başlamadan çözüyor. Bu yüzden en çok emeği, henüz hiçbir şey yazmadan önceki planlama aşamasına ayırıyoruz. Kağıt üzerindeki bir kararı değiştirmek dakikalar, kurulu bir sistemi değiştirmek günler alır. İyi bir plan, geliştirme sırasında çıkacak soruların yarısını baştan yanıtlıyor.

Kapsamı Küçük Tutup İlk Sürümü Erken Çıkarıyoruz

Aylarca kapalı kapılar ardında çalışıp sonunda kocaman bir sistem sunmayı doğru bulmuyoruz. Bunun yerine kullanılabilir en küçük sürümü erkenden çıkarıp gerçek kullanımla sınıyoruz. Küçük başlayan bir yazılım geliştirme yaklaşımı, hataları büyümeden görmemizi ve yönü zamanında düzeltmemizi sağlar. İlk sürüm, sadece çekirdek işi eksiksiz yapan sade bir araçtır; süsleri sonraya bırakıyoruz. Erken çıkan bir sürüm, kâğıt üzerindeki onlarca varsayımı gerçek kullanımla sınamamızı sağlıyor. Siz bu sürümü gerçek işinizde denedikçe, neyin işe yaradığı ve neyin fazlalık olduğu net biçimde ortaya çıkar. Kullanılmayan bir özelliği baştan yapmamak, hem zamandan hem paradan tasarruf ettirir. Böylece geliştirmeyi, tahmin üzerine değil, sahadan gelen geri bildirim üzerine kuruyoruz. İlk sürümü elinize almanız, uzun açıklamalardan çok daha fazlasını anlatıyor. Küçük ve çalışan bir başlangıç, kâğıt üzerindeki kusursuz bir plandan daha değerlidir.
Geliştirmeyi kısa döngüler hâlinde yürütüyoruz; her döngü sonunda çalışan, gösterilebilir bir parça ortaya çıkar. Yaptığımız işi düzenli aralıklarla size gösteriyor, geri bildiriminizi bir sonraki döngüye taşıyoruz. Böyle çalışınca proje sizin için kara kutu olmaktan çıkar, her adımda nerede olduğunu görürsünüz. İşi büyük parçalara değil, tek tek tamamlanabilen küçük görevlere bölüyoruz. Küçük adımlar, hem ilerlemeyi görünür kılıyor hem de bir sorunu erkenden yakalamayı kolaylaştırıyor. Bir özellik bittiğinde onu hemen deniyor, sonraki işe temiz bir zemin üzerinde geçiyoruz. Sizden gelen her yorumu bir sonraki plana katarak, aracı adım adım işinize yaklaştırıyoruz. Bu ritim, birikmiş sorunların sona yığılıp bir anda patlamasını da engelliyor. Her döngüde elle tutulur bir sonuç görmeniz, projeye olan güveninizi de artırıyor. Küçük ve sık teslimler, büyük ve seyrek teslimlerden çok daha az risk taşır.
Kullanacağınız aracın, sizin çalışma biçiminize uyması gerektiğine inanıyoruz; tersi değil. Ekranları, günlük işi yapan kişinin en az tıklamayla sonuca ulaşacağı biçimde tasarlıyoruz. Sık yapılan işlemleri kısayollara bağlıyor, nadiren kullanılan seçenekleri göz yormayacak yerlere koyuyoruz. Aracı kullanacak kişilere kısa bir eğitim veriyor, ilk günlerde yanlarında oluyoruz. Kullanıcının hata yaptığında ne yapacağını bilmesi için, uyarıları açık ve yol gösterici yazıyoruz. İnsanlar bir aracı ancak işini kolaylaştırdığında benimser; zorlaştırırsa, ne kadar gelişmiş olursa olsun kenara iter. İşi kolaylaştırmayan hiçbir özelliğin, ne kadar akıllıca görünse de yeri yoktur. Bu yüzden başarıyı, teknik listeyle değil, aracın gerçekten kullanılıp kullanılmadığıyla ölçüyoruz. Gerçek kullanımı izleyip, insanların takıldığı yerleri sadeleştiriyoruz. Benimsenen bir araç, rafta kalan gösterişli bir üründen her zaman daha değerlidir. Aracın gücü kadar, günlük işe ne kadar oturduğu da önemlidir.

Geliştirmeyi Test ve Güvenlikle İç İçe Yürütüyoruz

Test etmeyi ayrı bir aşama gibi sona bırakmıyor, geliştirmenin içine yayıyoruz. Bir yazılım ekibi olarak her yeni parçayı, hem beklenen hem de beklenmedik girişlerle deniyoruz. Kullanıcının yanlış veri girdiği, bağlantının koptuğu ya da alanı boş bıraktığı durumları önceden düşünüyoruz. Sık kullanılan yolları otomatik testlerle güvenceye alıyor, her değişiklikten sonra bunları yeniden çalıştırıyoruz. Bu otomatik denetimler, gözden kaçabilecek küçük hataları biz fark etmeden yakalıyor. Böylece yeni bir özellik eklerken eski bir işlevi sessizce bozma riskini azaltıyoruz. Bir hata bulduğumuzda yalnızca onu değil, benzerlerini de aramaya koyuluyoruz. Hatayı kullanıcıdan önce biz bulursak, o hata sizin itibarınıza değil, bizim iş listemize yazılır. Test etmeyi bir masraf değil, sonradan çıkacak arızaların önüne geçen bir yatırım sayıyoruz. Bu yüzden denetimi işin sonuna değil, tam ortasına yerleştiriyoruz. Erken yakalanan bir hata, sonradan büyüyen bir arızadan çok daha ucuza kapanır.
Güvenliği sonradan eklenen bir kilit gibi değil, en baştan atılan bir temel gibi ele alıyoruz. Her yazılım projesinde verilerin şifreli taşınmasını, erişim yetkilerinin kişiye göre ayrılmasını sağlıyoruz. Şifreleri güvenli biçimde saklıyor, yönetim ekranlarını dışarıya kapalı tutuyoruz. Düzenli yedekleme kuruyoruz; bir aksilikte verinizi kaybetmeden geri dönebilmeniz için bu şart. Herkesin her şeye erişmesi yerine, çalışanların yalnızca kendi işini gören yetkilerle çalışmasını sağlıyoruz. Kullanılan bileşenleri güncel tutuyor, bilinen açıkları kapatıyoruz. Bir veri sızıntısının maliyeti, alınan önlemlerin maliyetinden çok daha yüksektir. Bir sorun çıktığında ne yapılacağını önceden yazıyoruz, çünkü panikle alınan kararlar çoğu zaman durumu daha kötü hâle getirir. Verinizin izinsiz ellere geçmemesi, bizim için pazarlık edilmeyecek bir ilkedir. Basit ama etkili önlemleri ihmal etmemek, çoğu sorunun daha doğmadan önünü kesiyor. İşinizin kesintisiz sürmesi için, en kötü ihtimali de baştan hesaba katıyoruz.
Çoğu araç tek başına değil, kullandığınız diğer sistemlerle konuşarak değer üretir. Muhasebe, kargo, ödeme ya da mesajlaşma servisleriyle bağlantıları düzgün kuruyor, verinin tek yerden akmasını sağlıyoruz. Aynı bilgiyi iki ayrı yere elle girmek zorunda kalmamanız için sistemleri birbirine bağlıyoruz. Böyle bir bağ, hem zaman kazandırır hem de elle girişten doğan hataları azaltır. Entegrasyonları kurarken dış servis bir gün değişirse ne olacağını da hesaba katıyoruz. Bağlantı koptuğunda sistemin çökmek yerine anlaşılır bir uyarı vermesini sağlıyoruz. Dışarıya bağımlı her noktayı, sorun çıktığında kolay onarılacak biçimde ayrı tutuyoruz. Böylece farklı araçlar, birbirinden kopuk adalar değil, tek bir düzenin uyumlu parçaları hâline gelir. Sistemler birbiriyle konuştuğunda, aynı işi iki kez yapma yükü ortadan kalkıyor. Kritik verinin kontrolünü dışarıya değil, sizde tutmaya özen gösteriyoruz. Uyumlu çalışan araçlar, günlük işinizi görünmeden hızlandırır.
Kaynak Kodunu ve Verinizi Eksiksiz Size Teslim Ediyoruz
Teslim, bizim için işin sonu değil, uzun soluklu bir ilişkinin başlangıcıdır. Yayına aldıktan sonra sistemin gerçek yük altında nasıl davrandığını izliyor, ilk günlerin verisini yakından takip ediyoruz. Sağlıklı bir yazılım süreci, canlıya geçince biten değil, kullanıldıkça olgunlaşan bir süreçtir. Kullanıcıların takıldığı noktaları not ediyor, küçük ama can sıkan pürüzleri sırayla gideriyoruz. İlk haftalarda ortaya çıkan küçük istekleri hızla karşılamak, aracın benimsenmesini kolaylaştırıyor. Bir bakım düzeni öneriyoruz: düzenli yedek, güncel bileşenler ve belirli aralıklarla gözden geçirme. Kullanım arttıkça ortaya çıkan yeni ihtiyaçları da planlı biçimde ele alıyoruz. Bu düzeni bize bırakmak da kendi ekibinize kurdurmak da sizin tercihiniz; her iki yolda da gerekeni açıkça anlatıyoruz. Canlıya geçtikten sonra da yanınızda oluyor, çıkan soruları hızla yanıtlıyoruz. Kullanım büyüdükçe sistemin de rahat büyüyebileceği bir yapı bırakıyoruz.
Yazdığımız aracın kaynak kodu size aittir; bunu baştan böyle konuşuyoruz. Kodu düzenli, okunur ve açıklamalı yazıyoruz ki yarın başka bir ekip devralsa da kolayca anlasın. Kodun nasıl kurulacağını, nasıl güncelleneceğini yazılı bir belgeyle birlikte teslim ediyoruz. İçeride kullandığımız kütüphaneleri ve dış servisleri tek tek listeliyoruz. Kodun içine bıraktığımız açıklamalar, ileride yapılacak değişiklikleri çok daha kolay kılıyor. Anlaşılmaz, yalnızca bizim çözebileceğimiz bir düğüm bırakmıyoruz; çünkü bu, sizi haksız yere bize mahkûm etmek olurdu. Devretmesi kolay bir iş bırakmak, bizim için bir zayıflık değil, dürüstlüğün gereğidir. Amacımız kalıcı bir bağımlılık değil, kendi ayakları üzerinde durabilen sağlam bir araç kurmaktır. Kaynak kodun sizde olması, gelecekte hangi ekiple çalışırsanız çalışın elinizi güçlendirir. Böylece aracınızın geleceği, tek bir ekibin insafına kalmıyor. Okunur bir kod, sonraki geliştiricinin işini de sizin maliyetinizi de azaltır.
Verinin sahibi olmak, bir aracı gerçekten kontrol etmenin temelidir. İçindeki tüm bilgiyi istediğiniz an dışa aktarabileceğiniz biçimde tasarlıyoruz; veriniz bizim sunucumuzda rehin kalmıyor. Hesapların, şifrelerin ve barındırma erişiminin sizin üzerinizde olmasını sağlıyoruz. Bir gün yolumuz ayrılsa bile, sistem sizde çalışmaya devam eder ve başka bir ekip sorunsuz devralır. Verinizi hangi biçimde saklamak ve taşımak isterseniz, buna uygun bir düzen kuruyoruz. Şeffaf çalışmak kısa vadede bize daha zahmetli gelebilir, ama uzun vadede güven kazandırır. Bir işi, sahibi olarak siz denetleyemiyorsanız, o iş gerçekten sizin sayılmaz. Zaten müşterilerimizin çoğu, ilk işten yıllar sonra yeni ihtiyaçları için yine bize döner. Sahiplik, sözde değil, erişim ve dosyaların gerçekten sizde olmasıyla anlam kazanır. Bize dönmenizi, mecbur kaldığınız için değil, memnun kaldığınız için istiyoruz. Güven, en uzun ömürlü iş ortaklığının sağlam temelidir.

Sıkça Sorulan Sorular

İhtiyacınız muhasebe ya da basit randevu gibi standart bir alandaysa hazır program hem daha uygun hem daha hızlı devreye girer; böyle bir durumda size açıkça hazır çözümü öneririz. İşin akışı firmanıza özgü kurallar içeriyorsa özel yazılım gerçekten değer katıyor. Kararı ilk görüşmede birlikte veriyoruz.
İlk kullanılabilir sürüm genellikle birkaç hafta içinde devreye giriyor. Kapsamlı sistemler aylara yayılabiliyor, ancak her aşamada çalışan bir parça teslim edildiği için beklerken bile elinizde işleyen bir bölüm oluyor. Süreyi belirsiz bırakmak yerine modül modül bir takvime bağlıyoruz.
Evet. Kaynak kod, veritabanı ve sunucu erişimleri proje sonunda işletmeye devrediliyor. Sistemin tek bir ekibe bağımlı kalmaması bizim de benimsediğimiz bir yaklaşım. İleride yolunuza başka bir ekiple devam etmek isterseniz ihtiyacınız olan her şey elinizde bulunuyor.
Ekran sayısına değil, iş kurallarının karmaşıklığına göre. Sade bir kayıt listesiyle, kademeli fiyat hesaplayıp stok düşen bir sipariş ekranı aynı emeği gerektirmiyor. Bu nedenle bedeli modül modül veriyor, hangisini ne zaman yaptıracağınıza sizin karar vermenizi sağlıyoruz.
Rol bazlı yetkilendirme, şifreli bağlantı ve düzenli yedekleme standart kurulumun parçası. Hangi kullanıcının hangi ekranı görüp hangi işlemi yapabileceği baştan tanımlanıyor. Yedekler ayrı bir konumda saklanıyor ve gerçekten geri yüklenebildiği önceden sınanıyor.
Evet. Panelde tutulan ürün, stok, fiyat ve kampanya bilgisi sitede gösterilebiliyor; panelde yaptığınız bir değişiklik sitede de yansıyor. Siteden gelen talepler doğrudan panele düşüyor. İki taraf tek yapı gibi çalıştığında aynı bilgiyi iki kez güncelleme derdi ortadan kalkıyor.