Yazılım Projesini Küçük ve Çalışan Bir Sürümle Açıyoruz

Bir işletmenin özel yazılıma ihtiyacı, çoğu zaman tekrarlayan bir dertle ortaya çıkar. Aynı bilgiyi üç ayrı deftere yazmak, siparişleri telefonda takip etmek ya da her ay elle rapor hazırlamak zamanınızı sessizce yer. Yazılım bu tür sıkıntıları önce görünür kılıp sonra otomatikleştirmek için vardır, ekrana süs eklemek için değil. Bu yüzden koda başlamadan önce sizin bir gününüzü adım adım dinliyoruz: hangi işi kaç kez yapıyorsunuz, nerede tıkanıyorsunuz, hangi hata size pahalıya patlıyor. Muş’ta pek çok işletme, aslında pahalı bir sisteme değil, kendi işine tam oturan küçük bir çözüme ihtiyaç duyar. Gösterişli bir programın çoğu düğmesine hiç dokunulmazken, asıl derdi çözen tek bir ekran çoğu zaman yeterli olur. Bu ilk dinleme, sonradan yapılacak yanlış işi ve boşa harcanan bütçeyi baştan önler. Sorunu doğru anlamadan yazılan hiçbir program derde derman olmaz. Doğru teşhis konmadan yazılan kod, yanlış hastaya verilen ilaca benzer; masraf da, zarar da boşunadır.

İhtiyaç analizini teknik bir belge gibi değil, ortak bir anlayış gibi kuruyoruz. Sizin işinizi bizim kadar iyi kimse bilemez, bu yüzden çözümü size dayatmıyor, birlikte çiziyoruz. Hangi işlerin gerçekten otomatikleşmesi gerektiğini, hangilerinin elle kalmasının daha ucuz olduğunu açıkça konuşuyoruz. Her işi bilgisayara devretmek her zaman kârlı değildir; kimi işler insan kararına bırakıldığında daha hızlı ve daha ucuz yürür. Her şeyi bir anda sisteme almak yerine, en çok acıtan noktadan başlıyoruz. Bazı istekler kulağa hoş gelir ama günde bir kez bile kullanılmayacaksa, onları sonraya erteliyoruz. Amacımız gösterişli bir özellik listesi değil, sizin işinizi gerçekten hafifleten bir araç. Bu aşamada verdiğimiz kararlar, projenin bütçesini ve süresini en çok etkileyen kararlardır; bu yüzden aceleye getirmeden, ölçüp biçerek ilerliyoruz. Kimsenin kullanmadığı bir özellik, hem yapımıyla hem de ileride bakımıyla aslında en pahalı olandır.

Analizin sonunda elimizde bir hayal değil, sınırları belli bir kapsam oluyor. İlk sürümde neyin olacağını, neyin sonraki aşamaya kalacağını net biçimde ayırıyoruz. Bir yazılım süreci ne kadar iyi planlanırsa planlansın, ilk günde her şeyi kapsamaya çalışmak projeyi ağırlaştırır ve teslimi geciktirir. Bu yüzden çalışan, elle tutulur küçük bir sürümü hızlıca ortaya çıkarmayı tercih ediyoruz. Siz onu gerçek işte kullandıkça, nerede eksik kaldığını tahminle değil, bizzat deneyimle görüyoruz. Kâğıt üzerinde kusursuz görünen bir özellik, sahada çoğu zaman beklenmedik biçimde değişir. Erken çıkan bir sürüm, aylarca kapalı kapı ardında büyütülen ve sonunda işe yaramayan devasa bir projeden çok daha güvenlidir. Küçük başlamak korkaklık değil; riski ve maliyeti kontrol altında tutmanın en akılcı yoludur. Küçük ve çalışan bir başlangıç, kâğıttaki büyük vaatlerden çok daha fazlasını gerçek sahada öğretir.

Kapsamı Yazıya Döküp Sürprizleri Baştan Önlüyoruz

Kapsamı yazıya dökmek, sıkıcı görünen ama en çok para ve dostluk kurtaran adımdır. Sözle anlaşılan işler, aylar sonra herkesin aklında farklı biçimde durur; yazılı bir kapsam ise ortak ve değişmeyen bir hafıza olur. Hangi ekranların olacağını, her birinin ne yapacağını ve neyi yapmayacağını tek tek listeliyoruz. Bir özelliğin kapsam dışı olduğunu baştan yazmak, sonradan çıkacak bunu da konuşmuştuk tartışmasını en baştan bitirir. Bu belgeyi teknik terimlerle değil, sizin de okuyup onaylayabileceğiniz sade bir dille yazıyoruz. Onaylamadığınız bir şeyin yapılmasını istemeyiz; bu yüzden kapsamı birlikte satır satır gözden geçiriyoruz. Kapsam değişebilir, bu doğaldır; ama her değişikliği yine yazılı olarak, süreye ve bütçeye etkisiyle birlikte konuşuyoruz. Böylece proje ilerlerken kimse karanlıkta kalmıyor ve kimse kendini aldatılmış hissetmiyor. Yazılı bir söz, aylar sonra unutulan sözlü bir konuşmadan çok daha huzur vericidir.

Kapsam netleştikten sonra geliştirmeyi görünür parçalara bölüyoruz. Yazılım geliştirme, aylarca haber alamadığınız kapalı bir kutu olmamalı; bu yüzden işi kısa dönemlere ayırıp her dönemin sonunda size çalışan bir parça gösteriyoruz. Böylece yön yanlışsa erken düzeltiyoruz, doğruysa güvenle devam ediyoruz. Her parçayı tek tek elden geçirir, bir sonrakine geçmeden önce çalıştığından emin oluruz. İlerlemeyi sizin de görebileceğiniz basit bir yerde takip ediyoruz ki ne durumda olduğumuzu sürekli sormak zorunda kalmayın. Sonda tek seferde teslim edilen bir sistemde hata çıkarsa, onu ayıklamak kat kat zorlaşır. Bu düzen hem sürprizleri azaltıyor hem de sizi projenin gerçek sahibi hâline getiriyor. Adım adım ilerleyen bir geliştirme, sonunda hem bize hem size çok daha az stres yaşatıyor. Sık ve küçük teslimler, tek büyük teslimin taşıdığı riski adım adım dağıtır.

Geliştirme sırasında verdiğimiz kararları da kayıt altına alıyoruz. Neden bir yolu seçtiğimizi ve hangi seçenekleri elediğimizi yazmak, aylar sonra burada ne düşünmüştük sorusuna cevap verir. Kodun içine açıklamalar koyuyor, karmaşık kısımları sonradan başkasının da anlayabileceği biçimde düzenliyoruz. Bu, projeye ileride kimin dokunacağından bağımsız olarak sizi korur. İşi tek bir kişinin kafasında saklı tutmak, o kişi çekildiğinde sizi çaresiz bırakır; biz bunun tam tersini yapıyoruz. Kod okunur ve belgeliyse, yıllar sonra bile bir başkası onu güvenle sürdürebilir. Kullandığımız araçları ve yöntemleri de sizinle paylaşıyoruz, çünkü sistemin nasıl çalıştığını bilmeniz sizin hakkınız. Şeffaf bir geliştirme, teslimden sonra da işin sağlıklı yürümesini sağlar ve sizi tek bir sağlayıcıya mahkûm etmez. Anlaşılır ve belgeli bir kod, projeye sonradan katılan herkese bırakılan en cömert nottur.

Güvenliği ve Testi Geliştirmenin Her Adımına Yayıyoruz

Güvenliği, projenin sonuna bırakılan bir kontrol listesi olarak görmüyoruz. Bir yazılım, kullanıcı verisini ilk günden itibaren korumak zorundadır; bu yüzden güvenliği tasarımın en başına yerleştiriyoruz. Kimin hangi bilgiye erişebileceğini net kurallarla belirliyor, şifreleri ve hassas verileri okunamaz biçimde saklıyoruz. Sisteme giren her bilgiyi, kötü niyetli olabileceğini varsayarak denetliyoruz. Yedeklerin düzenli alınmasını ve bir sorun anında hızla geri dönülebilmesini baştan planlıyoruz. Güvenlik bir defalık iş değil, sürekli tetikte olmayı gerektiren bir tutumdur. İşletmenizin ve müşterilerinizin verisi söz konusu olduğunda; gösterişli özelliklerden önce sağlam ve sessiz çalışan bir koruma gelir. Sızan bir müşteri bilgisi, yıllarca kurulan güveni bir gecede yıkabilir. Bir veri kaybının maliyeti, en baştan alınan önlemin maliyetinden her zaman çok daha yüksektir. Güvenlik, sessiz çalıştığı sürece görülmez; bir kez çökerse ise her şey birden görünür olur.

Testi, iş bittikten sonra yapılan bir formalite değil, geliştirmenin her adımına yaydığımız bir alışkanlık olarak görüyoruz. Yeni yazılan her parçayı, hem beklenen kullanımda hem de kullanıcının yapabileceği hatalı girişlerde deniyoruz. İnsanlar formu her zaman doğru doldurmaz; boş bırakır, yanlış biçimde yazar, iki kez üst üste tıklar. Sistem bu durumlarda çökmemeli, kullanıcıyı anlaşılır bir dille uyarmalı. Sık tekrarlanan kontrolleri otomatik hâle getiriyoruz ki bir yeri düzeltirken başka bir yeri farkında olmadan bozmayalım. Elle yapılan her kontrol bir gün unutulur; otomatik kontrol ise her seferinde aynı titizlikle çalışır. Sistemi gerçek cihazlarda, farklı tarayıcılarda ve zayıf bağlantıda da deniyoruz. Yayına almadan önce sizi de sürecin içine katıyor, sistemi kendi işinizle sınamanızı istiyoruz; çünkü gerçek kullanım, hiçbir denemenin taklit edemeyeceği hataları ortaya çıkarır. Gerçek kullanıcı, hiçbir planın öngöremeyeceği yaratıcı ve beklenmedik hatalar üretir.

Muş’ta hizmet veren işletmeler için güvenlik ve test, yayından sonra da süren bir sorumluluktur. Kullanılan teknolojiler zamanla güncellenir ve bu güncellemeler çoğu zaman güvenlik açıklarını kapatmak için gelir. Bu yüzden sistemi ilk günkü hâline bırakmıyor, düzenli aralıklarla gözden geçiriyoruz. Ortaya çıkan yeni bir açık ya da beklenmedik bir hata olduğunda, bunu sizden önce fark etmek için sistemi izliyoruz. Bir sorunu müşteriden duymak, çoğu zaman onun çoktan zarar görmüş olması demektir. Kullanıcılardan gelen çalışmıyor türü geri bildirimleri küçük görmüyor, her birini değerli bir ipucu gibi ele alıyoruz. Bir sorunu geçici bir yamayla kapatmak yerine kökenini bulup çözmeyi tercih ediyoruz. Böyle bir bakım, sistemin yıllar içinde çürümesini önler ve güvendiğiniz aracın güvenilir kalmasını sağlar. Sürekli ve küçük bakımlar, bir sistemi ağır yaşlanmadan koruyan en gerçekçi yoldur.

Kaynak Kodun ve Verinin Anahtarı Sizin Elinizde Kalır

Bir yazılım işini teslim ederken en çok önem verdiğimiz şey, sahipliğin tartışmasız sizde olmasıdır. Kaynak kodu, kullanıcı hesapları ve tüm veri sizin; bunları rehin tutup sizi bize bağımlı kılmıyoruz. Kodu size düzenli biçimde ve nasıl kurulacağının açıklamasıyla birlikte veriyoruz. Yarın başka bir ekiple çalışmak isterseniz, sistemi sorunsuz devralabilecekleri şekilde belgeliyoruz. Bu bizim için bir kayıp değil, güven kazanmanın yolu; işini iyi yapan bir sağlayıcının müşteriyi zincirle tutmaya ihtiyacı olmaz. Verinizin nerede tutulduğunu, nasıl yedeklendiğini ve dışarı nasıl aktarılabileceğini de açıkça anlatıyoruz. Kendi verinizi istediğiniz an dışarı alabilmeniz, bir ayrıcalık değil, en baştan hakkınız olarak kabul ettiğimiz bir ilkedir. Sahiplik açıkken, ileride yaşanabilecek pek çok anlaşmazlık daha doğmadan ortadan kalkar. Kendi verinize erişememek, kendi evinizin anahtarını bir başkasında unutmak gibidir.

Teslim, ilişkinin sonu değil; asıl kullanım o gün başlar. Sistemi kullanacak kişilere onu sade bir dille anlatıyor, sık yapılan işleri adım adım gösteriyoruz. Yazıya döktüğümüz kısa bir kullanım rehberi bırakıyoruz ki her küçük soru için bizi aramak zorunda kalmayın. İlk haftalarda ufak aksaklıklar çıkması doğaldır; bu dönemde yanınızda oluyor, geri bildirimlere hızlı cevap veriyoruz. Bakımın nasıl yürüyeceğini, hangi işin ücretli hangisinin destek kapsamında olduğunu baştan yazılı hâle getiriyoruz. Belirsiz bırakılan bir destek sözü, ihtiyaç anında iki tarafı da zor durumda bırakır. Böylece ileride kimse beklenmedik bir durumla şaşırmıyor. Sistem işinizle birlikte büyüyecekse, bunu kaldırabilecek bir zemin kuruyoruz ki yeni bir ihtiyaç çıktığında her şeyi baştan yapmak gerekmesin. Baştan açıkça çizilen sınırlar, ileride iki taraf arasındaki dostluğu koruyan görünmez bir çerçeve olur.

Uzun ömürlü bir yazılım, tek seferlik bir teslimat değil, bakımı yapılan canlı bir araçtır. İşletmeniz değiştikçe sistemin de değişmesi gerekir; yeni bir hizmet, yeni bir kural ya da artan bir kullanıcı sayısı bunu zorunlu kılar. Altyapıyı en baştan esnek kurmamız, bu değişiklikleri yıkıcı olmadan yapabilmemizi sağlar. Sizden gelen saha bilgisini geliştirmenin pusulası olarak kullanıyoruz, çünkü sistemi her gün kullanan ve eksiğini ilk gören sizsiniz. Kullanıcının şikâyet ettiği küçük bir ayrıntı, çoğu zaman en değerli geliştirme fikrine dönüşür. Bu ilişkiyi süslü sözlerle değil, çözdüğümüz gerçek sorunlarla sürdürüyoruz. Bir aracı yıllarca güvenle kullanabilmeniz, onu yazan kişilerin sizi anlamasına ve arkasında durmasına bağlıdır. Biz de tam olarak bunu, kalıcı ve dürüst bir çalışma ortaklığını hedefliyoruz. Sizi gerçekten dinleyen bir ekip, her yeni ihtiyacı sıfırdan değil, biriken deneyimle karşılar.

Özel Yazılım Projelerine Dair Sık Sorulan Sorular

Birkaç işaret bu kararı netleştirir: ekip hazır programın açığını kapatmak için yan tablolar tutuyorsa, kullanılmayan modüllere rağmen asıl ihtiyaç karşılanmıyorsa ya da işinizi rakiplerinizden ayıran adım hiçbir pakette yoksa özel yazılım mantıklı bir yatırım olabilir. Muhasebe gibi standart işler içinse hazır çözümler genellikle daha ekonomiktir.

Tüm istekleri önce tek bir listede topluyor, ekibinizle birlikte olmazsa olmaz ve sonra da olur diye ikiye ayırıyoruz. İlk sürüm yalnızca birinci grupla yayına çıkar; böylece sistem daha erken kullanılmaya başlar. İkinci gruptaki istekler, gerçek kullanımdan gelen geri bildirimle yeniden sıralanarak sonraki aşamalara yerleştirilir.

Genellikle aktarılabilir; yine de bu iş basit bir kopyalama değildir. Önce eski verideki mükerrer, eksik ve biçimi bozuk kayıtları raporluyor, hangilerinin düzeltilip hangilerinin arşivde kalacağına sizinle karar veriyoruz. Ardından küçük bir örnekle deneme aktarımı yapıyor, sayıları karşılaştırıp onayınızı aldıktan sonra tamamını taşıyoruz.

Evet. Yetkiler koda gömülmez; yönetici ekranından roller eklenip çıkarılabilir, bir kişiye birden fazla rol verilebilir. Görev değişikliği ya da işten ayrılma gibi durumlarda güncelleme birkaç tıklamayla yapılır ve kimin, neyi, ne zaman değiştirdiği otomatik olarak kaydedilir.

Şart değil. Tarayıcıda çalışan ve telefon ekranına uyum sağlayan bir uygulama çoğu işletmenin ihtiyacını karşılar; ana ekrana kısayol olarak eklenebilir, güncellemesi de tek noktadan yapılır. Kamera, çevrim dışı çalışma ya da bildirim gibi özelliklerin yoğun kullanılacağı saha işlerinde ise mağazadan kurulan bir uygulama daha uygun olabilir.

Bakım, sistemin bugün yaptığı işi aksatmadan sürdürmesini kapsar: güvenlik güncellemeleri, hata düzeltmeleri, sunucu ve yedek kontrolleri gibi. Yeni özellik ise sistemin yapabildiklerine bir şey ekler ve ayrı bir iş olarak planlanır. Özel yazılım sözleşmelerinde ikisini ayrı başlıklarda tutmak, bütçenin nereye gittiğini açıkça gösterir.