Yazılım Projenizi İş Akışınızın Etrafında Kuruyoruz

Hazır bir program çoğu işletmeye ya dar ya bol geliyor. Sizin işiniz kendine özgü akıyor, oysa paket çözümler herkesi aynı kalıba sokuyor. Bu yüzden bir yazılım projesine kod yazarak değil, sizi dinleyerek başlıyoruz. Günlük işinizde hangi adımın vakit yediğini, nerede hata yaptığınızı ve neyi elle tekrar tekrar girdiğinizi konuşuyoruz. Çoğu zaman asıl sorun, sandığınız yerde durmuyor. Sahadaki gerçek tıkanmayı bulmak, doğru çözümü kurmanın ilk şartı oluyor. Amacımız gösterişli bir arayüz değil, işinizi hafifleten bir araç üretmek. İşleyişinizi kâğıda döküyor, hangi kısmın otomatikleşince en çok zaman kazandıracağını birlikte belirliyoruz. Böylece daha ilk günden, harcanan emeğin nereye gideceği net oluyor. Doğru soru, doğru çözümün yarısıdır. Derdi netleştirmeden koda geçmek, yanlış sorunu çözmeye benziyor. Biz önce ihtiyacı adlandırıyor, sonra üretime giriyoruz. Yanlış tanımlanan bir ihtiyaç, en temiz kodla bile ancak yanlış bir çözüm doğuruyor.
İhtiyaç analizini aceleye getirmiyoruz, çünkü burada yapılan hata sonradan pahalıya patlıyor. Ekibinizin farklı kişileriyle ayrı ayrı konuşuyoruz. Sahadaki çalışan ile yöneticinin ihtiyacı çoğu zaman farklı oluyor. Her iki tarafı da dinlemeden kurulan bir sistem, birini mutlu edip diğerini zorluyor. Elinizdeki mevcut yöntemi, defterleri ve tabloları inceliyoruz. Bunlar dağınık görünse de, işin gerçek mantığını içinde taşıyor. Uzun toplantı yerine kısa gözlem oturumları yapıyoruz; anlatılan iş ile yapılan iş bazen ayrışıyor. Bütün bu gözlemleri sade bir belgeye döküyoruz. Belgeyi birlikte okuyor, eksik ya da yanlış anladığımız yeri düzeltiyoruz. Bu ortak metin, ilerideki tartışmaların çıpası oluyor. Ne yapılacağı yazılıysa, kimse yolun ortasında farklı bir beklentiyle çıkmıyor. Farklı sesleri baştan masaya almak, sonradan doğacak sürprizleri önlüyor. Herkesin ihtiyacı yazıya dökülünce, sistem kimseyi dışarıda bırakmıyor. Baştan kurulan bu ortak akıl, geliştirme boyunca en sağlam dayanağımız oluyor.
Kapsamı belirlerken her şeyi bir anda yapma tuzağından uzak duruyoruz. Uzun bir istek listesi, çoğu zaman hiç bitmeyen bir işe dönüşüyor. Bunun yerine önceliklendirme yapıyoruz. Hangi özellik işinizi bugün gerçekten rahatlatıyor, hangisi sonraya kalabilir; bunu birlikte ayırıyoruz. En değerli çekirdeği önce kuruyoruz. Böylece sistem erkenden işe yarar hâle geliyor, karşılığını beklemeden görmeye başlıyorsunuz. Kapsamı yazılı bir sınırla çiziyoruz, ama bunu bir duvar gibi değil, bir çerçeve gibi düşünüyoruz. İş değişirse çerçeveyi birlikte güncelliyoruz. Malatya’daki üretim ve hizmet işletmeleriyle çalışırken şunu öğrendik: küçük ama sağlam başlayan işler, dev planlarla açılanlardan daha çok yaşıyor. Bu yüzden büyük hayali, küçük ve sağlam adımlara bölüyoruz. Erken işe yarayan bir çekirdek, yatırımın karşılığını çabuk gösteriyor. Büyümeyi de sonraki adımlara sağlıklı biçimde bırakıyoruz. Sağlam kurulan bir çekirdek, üstüne sonradan konacak her yeni parçayı rahatlıkla taşıyor.

İhtiyaç Analizini Sahadaki Gerçek Sorunla Eşliyoruz

Geliştirmeye geçtiğimizde işi görünür parçalara bölüyoruz. Uzun süre kapalı kapı ardında çalışıp sonunda kocaman bir sürüm çıkarmıyoruz. Bunun yerine küçük parçaları sırayla teslim ediyoruz. Her parçayı görüp deneyebiliyorsunuz; böylece geri bildiriminiz daha ilk aşamada işe yarıyor. Bir yazılım geliştirme süreci, ancak sizin gerçek kullanımınızla olgunlaşıyor. Sizin fark ettiğiniz bir eksik, bizim masabaşında haftalarca düşünsek bulamayacağımız bir ayrıntı olabiliyor. Bu yüzden erken ve sık gösteriyoruz. Kod yazarken sadeliği koruyoruz; anlaşılır kod, sonradan bakımı kolay kod demek. Gösterişli ama karmaşık çözümler yerine, açık ve dayanıklı olanı seçiyoruz. Böylece sistem büyüdükçe kendi altında ezilmiyor, üstüne rahatça yeni parça ekleniyor. Kapıları kapalı tutmadığımız için, yön ihtiyaç doğdukça düzeliyor. Böyle çalışınca, sonunda beklenmedik bir fatura çıkmıyor. Sadelik, uzun vadede en ucuz karardır. Anlaşılır bir kod, hem bugünü hem de bakım gerektiren yarını ucuzlatan bir tercih oluyor.
Test etmeyi ayrı bir aşama değil, işin doğal parçası sayıyoruz. Her yeni parçayı, kullanıcı eline geçmeden önce biz deniyoruz. Yalnızca çalışıp çalışmadığına değil, yanlış kullanılırsa ne olduğuna da bakıyoruz. Gerçek hayatta insanlar beklenmedik veriler giriyor, boş alan bırakıyor, iki kez tıklıyor. Sistem bu hataları nazikçe karşılamalı, çökmemeli. Sık tekrarlanan kontrolleri otomatik testlerle güvenceye alıyoruz. Böylece yeni bir ekleme, eski ve çalışan bir yeri sessizce bozarsa hemen fark ediyoruz. Sizi de teste katıyoruz; gerçek verinizle yapılan deneme, en değerli sınav oluyor. Bulunan her sorunu bir listede izliyor, hangisinin acil hangisinin bekleyebilir olduğunu ayırıyoruz. Yayına, ancak temel işler güvenle yürüdüğünde geçiyoruz. Kullanıcı hatasına dayanan bir sistem, sahada dimdik ayakta kalıyor. Kırılganlığı önce biz bulalım ki, siz sonradan uğraşmayın. Aceleyle açılan bir sistem, çoğu zaman iki kat emekle geri dönüyor.
Çoğu işletme, yeni sistemin mevcut araçlarıyla konuşmasını istiyor. Bu yüzden entegrasyonları baştan planlıyoruz. Muhasebe programınız, kargo firmanız ya da mesajlaşma servisiniz varsa, sistem bunlarla veri alışverişi yapabiliyor. Amaç, aynı bilgiyi iki ayrı yere elle girme derdinden sizi kurtarmak. Bir sipariş girildiğinde stok da, kayıt da kendiliğinden güncelleniyor. Entegrasyonu kurarken dış servisin kurallarına saygı gösteriyoruz; onların sınırlarını zorlayan çözümler zamanla kırılıyor. Bağlantı koptuğunda sistemin ne yapacağını da tasarlıyoruz. İyi bir bağlantı, çalışırken görünmez, koptuğunda ise sizi sessizce uyarıyor. Böyle sessiz aksaklıklar en tehlikeli olanlar. Bu yüzden her entegrasyonu, hata anındaki davranışıyla birlikte deniyoruz. Bağlantı yeniden kurulunca da veri bütünlüğünün korunduğundan emin oluyoruz. Otomatikleşen her akış, elle yapılan tekrarları ortadan kaldırıyor. Sistemler konuştukça, işiniz de kendiliğinden akıyor. Otomatikleşen bir akış, aynı bilgiyi iki yere girme yükünü sırtınızdan tümüyle indiriyor.

İlk Sürümü Erken Çıkarıp Kullanarak Olgunlaştırıyoruz

İlk sürümü bitmiş bir ürün gibi değil, sağlam bir başlangıç gibi görüyoruz. Amacımız onu bir an önce sizin elinize vermek. Gerçek kullanımda ortaya çıkan dersler, en sağlam tahminden bile değerli oluyor. Bir yazılım aracını gerçekten sınayan şey, günlük işin baskısıdır. İlk sürümde çekirdek işlevleri koyuyoruz, süsleri sonraya bırakıyoruz. Kullanıcı ilk günden işini görebilmeli. Arayüzü sade tutuyoruz; eğitim gerektiren karmaşık ekranlar yerine, bakınca anlaşılan bir düzen kuruyoruz. Ekibiniz sisteme direnç göstermesin istiyoruz. Bu yüzden onların diline ve alışkanlığına yakın duruyoruz. İlk haftalarda yanınızda oluyor, takıldıkları yeri görüp yumuşatıyoruz. Böylece sistem raftaki bir yazılım olmaktan çıkıyor, ekibin gerçekten benimsediği bir araca dönüşüyor. Ürün elinize geçtiğinde asıl yolculuk başlıyor. Kullanıldıkça öğrenen bir sistem, her hafta biraz daha oturuyor. Gerçek kullanımda öğrenilen dersler, masabaşındaki en dikkatli tahminden bile öğretici oluyor.
Geri bildirimi düzenli toplamak, ilk sürümden sonra en kritik iş oluyor. Kullanıcıların nerede duraksadığını, hangi adımı atladığını izliyoruz. Şikâyet gelmese bile sessiz zorlukları arıyoruz; çünkü çoğu kullanıcı sorunu söylemek yerine sistemi kullanmayı bırakıyor. Topladığımız notları önem sırasına diziyoruz. Herkesin isteğini aynı anda yapmak yerine, en çok değer katacak iyileştirmeyi öne alıyoruz. Küçük ama sık yaşanan bir sıkıntıyı çözmek, nadir bir isteği karşılamaktan çoğu zaman daha faydalı. Her yeni sürümde neyin değiştiğini size sade bir notla anlatıyoruz. Böylece ekibiniz değişimi sürprizle değil, hazırlıkla karşılıyor. Geliştirme durmuyor ama savrulmuyor da; her adım bir öncekinin üstüne mantıkla biniyor. Sistem böyle, kullanıldıkça daha da işinize uyan bir hâl alıyor. Ölçtüğümüz her ayrıntı, bir sonraki kararı kolaylaştırıyor. Neyin işe yaradığını tahminle değil, gözlemle seçiyoruz. Böyle ilerleyen bir gelişim, dağılmadan ve hedefinden sapmadan adım adım olgunlaşıyor.
Veriyi işin merkezine koyuyoruz, çünkü asıl değer orada birikiyor. Sistem çalıştıkça siparişler, müşteriler ve stok hareketleri anlamlı bir tarihçeye dönüşüyor. Bu birikimi sizin görebileceğiniz sade özetlere çeviriyoruz. Hangi ürün çok satıyor, hangi işlem tıkanıyor; bunları bir bakışta görebiliyorsunuz. Karar verirken tahmine değil, kendi verinize yaslanıyorsunuz. Raporları ihtiyacınıza göre biçimliyoruz; herkese aynı hazır tabloyu dayatmıyoruz. Veriyi dışa aktarmayı da kolaylaştırıyoruz, çünkü bilginiz sistemin içinde tutsak kalmamalı. İstediğiniz an kendi verinizi indirip başka bir yerde kullanabiliyorsunuz. Bu esneklik, sizi tek bir araca mahkûm olmaktan kurtarıyor. Sağlıklı bir sistem, verinizi saklayan değil, size sunan sistemdir. Kendi verinize sahip olmak, kararlarınızı da özgür kılıyor. Rakamı gören bir yönetici, sezgiyle değil bilgiyle yol alıyor. Veriyi sizden saklamayan bir sistem, gerçek anlamda sizin denetiminizde kalıyor.
Güvenliği Bakımı ve Kaynak Kodu Sahipliğini Güvence Altına Alıyoruz
Güvenliği sonradan eklenen bir yama gibi görmüyoruz, en baştan tasarıma katıyoruz. Kullanıcıların yetkilerini ayırıyoruz; herkesin her şeye erişmesi kolaylık değil, risk demek. Şifreleri güvenli biçimde saklıyor, hassas veriyi koruyoruz. Sisteme dışarıdan gelen her girdiyi şüpheyle karşılıyoruz, çünkü saldırıların çoğu ihmal edilen küçük kapılardan giriyor. Bir yazılım ürününün güvenliği, en zayıf halkası kadar sağlam oluyor. Bu yüzden tek bir noktaya değil, zincirin tamamına bakıyoruz. Düzenli yedekleme kuruyoruz; bir sorun çıksa bile verinizi geri getirebiliyoruz. Yetki kayıtlarını tutuyoruz, böylece bir işlemin kim tarafından yapıldığı belli oluyor. Güvenlik görünmeyen bir emek, ama bir gün mutlaka kendini gösteriyor. O gün geldiğinde hazırlıklı olmak, sonradan pişman olmaktan çok daha ucuza geliyor. Kim neyi yaptıysa kayıtta durduğu için, sorumluluk da net kalıyor. Sağlam bir temel, ilerideki pek çok derdi baştan siliyor. Önceden alınan küçük bir önlem, sonradan gelecek büyük bir zarardan çok daha ucuz.
Bakımı, sistemin ömrünü uzatan sessiz bir emek olarak görüyoruz. Kullandığımız bileşenlerin güncellemelerini takip ediyoruz. Güncel kalmayan bir altyapı, zamanla hem yavaşlıyor hem de açık veriyor. Sunucunun durumunu izliyoruz; disk dolmadan, bellek tükenmeden önce uyarı alıyoruz. Böylece sorunlar, size ulaşmadan çözülüyor. Kullanıcı sayınız arttığında sistemin bunu kaldırıp kaldırmadığını ölçüyoruz. Gerekirse kaynakları büyütüyor, darboğazı önceden açıyoruz. Bir aksaklık olduğunda ne kadar sürede döneceğimizi baştan konuşuyoruz; belirsiz bir bekleyiş, işinizi durdurur. Bakım anlaşmasını ihtiyacınıza göre esnek tutuyoruz. Yoğun kullanan bir işletmeyle, ara sıra çalışan bir sistem aynı takibi gerektirmiyor. Sürekli göz önünde tutulan bir sistem, beklenmedik çöküşlerle sizi yolda bırakmıyor. Erken uyarı, işinizi durduracak bir aksamayı baştan engelliyor. Sorun büyümeden yakalanınca, çözümü de kolay oluyor. Düzenli ve sessiz bir bakım, sizi beklenmedik duruşlardan ve ani kayıplardan koruyor.
Kaynak kodu ve veri sahipliğini en baştan netleştiriyoruz. Ürettiğimiz kod sizin oluyor; bunu sözleşmede açıkça yazıyoruz. Yarın başka bir ekiple yola devam etmek isterseniz, kimse sizi kilitli bir sistemle baş başa bırakmıyor. Kodu düzenli ve okunur teslim ediyoruz, üstüne de nasıl çalıştığını anlatan notlar bırakıyoruz. Bir yazılım işini gerçekten sizin kılan şey, o koda ve veriye tam olarak sahip olmanız. Kullandığımız açık kaynak bileşenlerin lisanslarını da açıklıkla belirtiyoruz. Gizli bir bağımlılık ya da sürpriz bir ücret bırakmıyoruz. Verinizi istediğiniz an dışa aktarabiliyor, başka bir yere taşıyabiliyorsunuz. Bizim işimiz sizi mecbur bırakmak değil, hakkıyla hizmet vermek. Kalıcı ilişki, bağımlılıktan değil, güvenden doğuyor. Biz de bu güveni her teslimatta yeniden kazanmayı hedefliyoruz. Serbest bıraktığımız bir müşteri, çoğu zaman kendi isteğiyle yanımızda kalıyor. Kalıcı ilişki, bir kilit yüzünden değil, karşılıklı güven sayesinde ayakta duruyor.

Yazılım Sürecine Dair Sık Sorulan Sorular

İki süreç arasındaki ilişki açıkça tanımlandığında ikisi de aynı uygulamada yürütülebilir. Hangi teklifin iş emrine dönüşeceği, onayın hangi koşulda verileceği ve sonradan gelen değişikliklerin nasıl işleneceği baştan belirlenir. Aynı bilginin iki ekranda yeniden girilmesini azaltan bir düzen kurulabilir. Kullanıcı sorumlulukları ve kayıt geçmişi de bu kapsamın parçası olur.
Başlangıç kapsamını çizmek için temel akışları anlatmanız yeterlidir; ayrıntıların bir bölümü zaten inceleme sırasında beliriyor. Bir özel yazılım çalışmasında gerçek işlem örnekleri, yazıya dökülmemiş kuralları ortaya çıkarmanın pratik yollarından biridir. Belirsiz noktaları not eder, karar gerektirenleri sizinle netleştiririz. İlerleyen aşamada çıkan yeni ihtiyaçların kapsama etkisini de ayrıca değerlendiririz.
Sürüm, onay ve erişim kuralları tam da bu ihtiyaca göre tasarlanabilir. Hangi dosyanın geçerli sayılacağı ve önceki sürümün nasıl korunacağı önceden belirlenir. Yine de doğru dosyanın yüklenmesi kullanıcının sorumluluğunda kalır. Teknik kontrolleri ekranda gösterilen açıklamalarla birlikte planlayarak karışıklık ihtimalini belirgin biçimde azaltan bir düzen kurabiliriz.
Genişleme ihtimali biliniyorsa, veri ve yetki yapısı daha baştan buna göre değerlendirilir. Yeni ekibin görevleri mevcut akıştan farklı olabileceği için, yalnızca kullanıcı hesabı açmakla her ihtiyacın karşılanacağını varsaymıyoruz. Gerekli ekranları, erişimleri ve işlem kurallarını inceleyerek yeni ekibin katılım kapsamını ve uygulanacak geliştirmeleri açıklıyoruz.
Geliştirme planına uygun aşamalarda tamamlanan işler üzerinden değerlendirme yapılabilir. Bir özel yazılım projesinde önce gösterilen bölümün taslak mı yoksa çalışan bir işlev mi olduğunu belirtiriz. Kullanıcı görevleri denenerek geri bildirim alınır. Bu yöntem, beklentileri yalnızca son teslimde karşılaştırmak yerine süreç içinde netleştirmeye ve kararların zamanında verilmesine yardımcı olur.
Bildirilen işin, üzerinde anlaşılmış teslim kapsamıyla ilişkisine bakılır. Kararlaştırılmış bir işlevin hatalı çalışması, bir kullanım sorusu ya da yepyeni bir işlem isteği birbirinden ayrı konulardır. Talebin örnek kayıt ve adımlarla açıklanması incelemeyi hızlandırır. İşin kapsamı belirlendikten sonra destek koşulları ya da yeni geliştirme planı üzerinden nasıl ilerleneceğini anlatırız.