Yazılım Projesini İşinizin Gerçek İhtiyacından Doğuruyoruz

Bir yazılım projesine kod yazarak değil, çözmek istediğiniz sorunu masaya yatırarak başlıyoruz. Çoğu işletme aslında bir program değil, tekrar eden bir derdine kalıcı bir çözüm arar; bizim işimiz o derdi net tanımlamaktır. Hangi işin elde ne kadar vakit aldığını, nerede hata yapıldığını ve neyin sizi yavaşlattığını birlikte konuşuyoruz. Van’da bir işletmenin akışı ile başka bir yerdekinin akışı aynı değildir; bu yüzden hazır bir kalıbı size dayatmıyoruz. Bazen doğru cevap koca bir program değil, küçük bir düzenlemedir; bunu da dürüstçe söylüyoruz. Amacımız size bir şey satmak değil, gerçekten işinize yarayacak olanı bulmaktır. Yanlış tanımlanmış bir ihtiyaç, ne kadar iyi kodlanırsa kodlansın boşa emek olarak geri döner. O yüzden ilk günü çözüm üretmeye değil, doğru soruyu bulmaya ayırıyoruz. Bu ilk konuşma uzun sürebilir ama projenin en ucuz aşamasıdır. Burada verilen doğru bir karar sonradan haftalarca emek kazandırır; yanlış bir varsayım ise aynı ölçüde pahalıya patlar.

İhtiyacı anlamak için sahaya iniyor, işi asıl yapan kişiyle konuşuyoruz. Yöneticinin anlattığı ile sahada olan çoğu zaman farklıdır; ikisini de dinlemeden karar vermiyoruz. Bir yazılım süreci ancak gerçek akışı doğru kavradığında işe yarar hâle gelir. Kimin hangi bilgiyi ne zaman girdiğini, hangi adımın kimi beklettiğini adım adım çıkarıyoruz. Bu haritayı çıkardıktan sonra, hangi kısmın gerçekten otomatikleşmesi gerektiğine karar veriyoruz. Her şeyi bir anda değiştirmek yerine, en çok acıtan noktadan başlamayı öneriyoruz. Böylece hem risk küçük kalıyor hem de faydayı erken görüyorsunuz. Kapsamı büyük tutup aylarca görünmez çalışmak yerine, kısa sürede elle tutulur bir sonuç çıkarmayı tercih ediyoruz. Kâğıt üstünde güzel duran bir fikir, sahada işe yaramıyorsa bizim için başarısızdır. Sahadaki küçük bir alışkanlığı görmeden verilen karar, çoğu zaman kullanılmayan bir özellik olarak rafta kalır. Bu yüzden masabaşı tahmin yerine, gerçek kullanıcıyı yerinde izlemeyi tercih ediyoruz.

İhtiyaç netleştikten sonra kapsamı yazılı bir belgeye döküyoruz. Bu belgede neyin yapılacağı kadar neyin yapılmayacağı da açıkça yer alır; sınırları baştan çizmek sonraki tartışmaların çoğunu önler. Öncelikleri birlikte sıralıyor, hangi özelliğin ilk sürümde, hangisinin sonraya kalacağını belirliyoruz. Her isteğin bir maliyeti olduğunu şeffafça konuşuyor, kararı bilerek vermenizi sağlıyoruz. Kapsam büyüdükçe süre ve bütçe de büyür; bu ilişkiyi hiç gizlemiyoruz. Belgeyi ikimiz de onayladıktan sonra üretime geçiyoruz, böylece herkes aynı resme bakıyor. İş ilerledikçe ihtiyaç değişirse, bunu da yeni bir karar olarak açıkça ele alıyor, sessizce eklenen sürprizlerle ilerlemiyoruz. Net bir kapsam, hem sizi hem bizi hayal kırıklığından koruyan en sade araçtır. Belgeyi anlaşılır tutuyoruz; teknik olmayan biri de okuduğunda ne alacağını net biçimde görebilmeli. Böylece imzaladığınız şeyin ne olduğunu tahmin etmek zorunda kalmıyorsunuz.

Kapsamı Netleştirip İlk Çalışan Sürümü Erken Çıkarıyoruz

Büyük bir sistemi tek seferde teslim etmenin riskini sevmiyoruz. Onun yerine çalışan en küçük sürümü erkenden çıkarıp elinize veriyoruz. İlk yazılım çözümü kusursuz değil, ama gerçek işte denenebilir olmalıdır; asıl geri bildirim ancak kullanılınca gelir. Siz bu ilk sürümü günlük işinizde kullandıkça, kâğıt üstünde görünmeyen ihtiyaçlar ortaya çıkıyor. Biz de bu gerçek geri bildirime göre yönü düzeltiyoruz. Böylece aylar sonra yanlış bir şey teslim etme riskini baştan azaltıyoruz. Erken çıkan sürüm, hem sizi hem bizi doğru yolda tutan bir pusula gibi çalışıyor. Mükemmeli beklemek yerine, işe yarayanı erken görüp üzerine koymayı daha güvenli buluyoruz. Bir özelliğin gerçekten gerekli olup olmadığını, çoğu zaman ancak kullanınca anlıyoruz. İlk sürümü küçük tutmak, bütçenizi de tek bir büyük bahse yatırmadan ilerlemenizi sağlıyor. Her adımda ne kadar yol aldığınızı görüp devam kararını bilerek veriyorsunuz.

İlk sürümü tasarlarken sadeliği koruyoruz. Ekranları, işi yapan kişinin fazla düşünmeden kullanabileceği kadar yalın tutuyoruz; karmaşık bir arayüz, sağlam bir mantığı bile kullanılmaz kılar. Her butonun bir işi olur; gereksiz seçenekle kullanıcıyı yormuyoruz. Girilen bilginin doğruluğunu baştan denetliyor, yanlış verinin sisteme sızmasını engelliyoruz. Sık yapılan işi birkaç tıkla bitirilecek biçimde kurguluyoruz, çünkü günde yüz kez yapılan bir adımda saniyeler bile birikir. Kullanıcıya kısa bir eğitim veriyor, ekranların neden böyle kurulduğunu anlatıyoruz. Amacımız görkemli değil, günlük işte gerçekten yük hafifleten bir araç bırakmaktır. İşi kolaylaştırmayan hiçbir özelliği, yalnız gösteriş olsun diye sisteme eklemiyoruz. Sade bir araç, karmaşık bir araçtan çoğu zaman daha uzun ömürlü olur. Kullanıcının sık düştüğü hataları önceden tahmin edip sistemi bunlara karşı dayanıklı kuruyoruz. Yanlış bir tıklama veriyi bozmasın diye, geri alınabilir adımlar tasarlıyoruz.

Veriyi en baştan doğru kurmak, sonradan çıkacak baş ağrılarının çoğunu önler. Hangi bilginin nerede tutulacağını, neyin neyle ilişkili olduğunu özenle tasarlıyoruz. Dağınık bir veri yapısı bugün hızlı görünse de yarın her raporu zora sokar. Bu yüzden görünmeyen bu iskelete zaman ayırıyor, acele etmiyoruz. İleride yeni bir özellik istendiğinde, sağlam kurulmuş bir veri düzeni işi kolaylaştırır. Sistemi büyümeye hazır tasarlıyoruz; bugünkü on kaydın da, yarınki on binin de aynı düzen içinde durmasını istiyoruz. Baştan atılan sağlam bir temel, ilerideki her eklemeyi hem ucuz hem hızlı hâle getirir. Doğru kurulmuş bir veri düzeni, sizi ileride ikinci kez baştan yazma masrafından da korur. Veriyi düzenli tutmak, ileride rapor ve analiz istediğinizde işi dakikalar meselesine indiriyor. Dağınık bir yapıda ise en basit soru bile saatler süren bir uğraşa döner.

Kodu Yazarken Test ve Bağlantıları Elden Bırakmıyoruz

Yazılım geliştirme aşamasında işi küçük parçalara bölüp her parçayı ayrı ayrı bitiriyoruz. Her tamamlanan parçayı size gösteriyor, geri bildiriminizi bir sonraki adıma taşıyoruz. Böylece proje bir kara kutu olmaktan çıkıyor, ilerlemeyi kendi gözünüzle görüyorsunuz. Yazdığımız her parçayı teslim etmeden önce sınıyor, beklenen sonucu verip vermediğini kontrol ediyoruz. Hata bulmayı ayıp değil, işin doğal bir parçası sayıyoruz; erken bulunan hata ucuz, geç bulunan pahalıdır. Otomatik denetimler kurarak, bir yeri düzeltirken başka bir yeri bozmadığımızdan emin oluyoruz. Acele edip yarım test edilmiş bir işi teslim etmek yerine, sağlam ilerlemeyi seçiyoruz. Küçük ve sık teslimler, büyük ve gecikmiş bir teslimden hem daha güvenli hem daha huzurludur. Her sürümü bir öncekinin üzerine koyarak ilerliyor, geriye dönük çalışan bir kayıt tutuyoruz. Bir şey ters giderse önceki sağlam hâle hızlıca dönebiliyoruz.

Çoğu işletmenin zaten kullandığı araçlar vardır; bir muhasebe programı, kargo sistemi ya da ödeme altyapısı. Yeni sistemi bunlarla konuşabilecek biçimde kuruyoruz ki aynı bilgiyi iki kez girmek zorunda kalmayın. Entegrasyonları tek tek deniyor, verinin iki sistem arasında doğru aktığından emin oluyoruz. Bir bağlantı koptuğunda sistemin çökmesini değil, uyarı verip kaldığı yerden devam etmesini istiyoruz. Dışarıdan gelen her bilgiyi olduğu gibi kabul etmiyor, önce doğruluğunu denetliyoruz. Bu köprüler doğru kurulduğunda, farklı araçlar tek bir düzen gibi çalışmaya başlıyor. Amaç, çalışanı sistemler arasında mekik dokumaktan kurtarıp asıl işine odaklanmasını sağlamaktır. Kurduğumuz her bağlantıyı da belgeleyip, ileride bir şey değişirse kolayca güncellenebilir tutuyoruz. Böylece elinizdeki mevcut yatırımı çöpe atmadan, yeni sistemi onların yanına yerleştiriyoruz. Çalışanınız da alışık olduğu araçlardan kopmadan yeni düzene geçiyor.

Geliştirme boyunca sizi sürecin dışında bırakmıyoruz. Belli aralıklarla kısa toplantılar yapıp ne yaptığımızı, sırada ne olduğunu anlatıyoruz. Çalışan sürümü erişiminize açıyor, ilerlemeyi istediğiniz an kendiniz görebiliyorsunuz. Bir karar gerektiğinde seçenekleri sade bir dille önünüze koyuyor, teknik ayrıntıda boğmadan karar vermenizi sağlıyoruz. Planda bir değişiklik gerekirse bunu erkenden konuşuyor, sizi son anda sürprizle karşılaştırmıyoruz. Bu düzenli iletişim, güveni sözle değil işleyişle kuruyor. Proje ilerledikçe siz de sisteme alışıyor, teslim günü yabancısı olmadığınız bir araçla karşılaşıyorsunuz. Böylece geçiş sancılı değil, tanıdık ve rahat oluyor; ekibiniz yeni düzene ilk günden ısınmış hâlde başlıyor. Sizden gelen küçük bir not bile, çoğu zaman bir sonraki adımı daha isabetli kılıyor. Karar sizin; biz seçenekleri ve sonuçlarını açıkça önünüze koyuyoruz.

Güvenlik, Bakım ve Kaynak Kodu Sahipliği Sizde Kalıyor

Yazılım ekibimiz güvenliği sonradan eklenen bir süs değil, işin ayrılmaz bir parçası sayar. Şifreleri güvenli biçimde saklıyor, yetkileri kişiye göre ayırıyoruz; herkes her şeyi değil, yalnız işini yapacak kadarını görsün istiyoruz. Girilen verileri denetleyerek yaygın saldırı yollarını baştan kapatıyoruz. Sisteme kimin ne zaman girdiğini kaydediyor, bir sorun çıktığında izini sürebiliyoruz. Kişisel verileri gerektiği gibi koruyor, gereksiz bilgiyi hiç toplamıyoruz. Güvenlik açıkları için düzenli kontrol yapıyor, çıkan güncellemeleri zamanında uyguluyoruz. Bir sistemin gerçek sınavı sorunsuz günlerde değil, kötü bir günde verdiği tepkidir; biz de o kötü güne baştan hazırlanıyoruz. Güvenliği baştan kurmak, sonradan yamamaya çalışmaktan hem daha ucuz hem daha sağlamdır. Yetki ve erişim düzenini zamanla gözden geçiriyor, işten ayrılan biri olduğunda kapıları hemen kapatıyoruz. Güvenliği bir kere kurup unutulan bir iş değil, süren bir alışkanlık sayıyoruz.

Teslim, ilişkinin sonu değil bakımın başlangıcıdır. Düzenli yedek alıyor, olası bir arızada sistemi hızla ayağa kaldırabileceğimiz bir kopyayı hazır tutuyoruz. Kullanıcıdan gelen sorulara yanıt veriyor, ilk günlerin küçük pürüzlerini birlikte gideriyoruz. Van’da işiniz büyüdükçe yeni ihtiyaçlar doğar; sistemi bunları karşılayacak biçimde büyütüyoruz. Bakımı zorunlu bir abonelik gibi dayatmıyor, isteğe bağlı ve şeffaf tutuyoruz. Yaptığımız her işlemi kısaca kayda geçirip size aktarıyoruz, böylece neyin neden yapıldığı belli oluyor. Küçük ve düzenli bir bakım, büyük ve pahalı arızaların önüne geçer. Amacımız sizi bir kez satıp bırakmak değil, uzun yıllar sorunsuz çalışan bir sisteme sahip kılmaktır. Bir sorun çıktığında kime ve nasıl ulaşacağınızı önceden anlatıyor, sizi belirsizlik içinde bırakmıyoruz. Acil bir durumda ne yapılacağını da yazılı bir plana bağlıyoruz.

Yazılım projesinin en çok atlanan ama en kritik konusu sahipliktir. Yazdığımız kaynak kodu size teslim ediyor, sistemi bize kilitli bırakmıyoruz. Verileriniz sizindir; istediğiniz an dışa aktarabilir, dilerseniz başka bir ekiple yola devam edebilirsiniz. Hangi teknolojinin neden seçildiğini yazılı olarak açıklıyor, gelecekte işi devralacak birinin işini kolaylaştırıyoruz. Bu şeffaflık, ilişkiyi mecburiyete değil memnuniyete dayandırır. Sistemin nasıl çalıştığını anlatan bir belge bırakıyor, kapının arkasında sır saklamıyoruz. Bize göre sağlam bir iş, müşteriyi kendine bağımlı kılan değil, ona kendi ayakları üzerinde durma özgürlüğü veren iştir. Uzun vadede kurulan güven, her sözleşmeden daha güçlü bir bağ oluşturur. Kod ve belgeler sizde durduğu için, yönünüzü değiştirmek istediğinizde eliniz kolunuz bağlı kalmıyor. Bağımsızlığınız bizim için bir eksik değil, dürüst bir çalışmanın doğal ve olması gereken sonucudur.

Yazılım Hakkında Sık Sorulan Sorular

Hazır paketler geniş bir kitleye uyacak biçimde tasarlandığı için çoğu işe ancak kısmen oturur. Özel yazılım ise kurumun kendi akışına göre kurgulanır, ihtiyaç ile araç arasındaki boşluğu kapatır ve zorlama çözümlerle uğraşmayı ortadan kaldırır. Ayrım genellikle sürecin ne kadar kendine özgü olduğu ölçüsünde belirginleşir.

Genellikle hayır. En çok işe yarayacak çekirdek işlevlerle başlamak, sistemin gerçek kullanımda nasıl davrandığını erken görmeyi sağlar. Kullanım geri bildirim verdikçe sonraki adımlar netleşir; baştan her ihtimali tasarlamaya çalışmak çoğu zaman kullanılmayan yükler doğurur.

Çoğu durumda taşınabilir, ancak önce kaynaktaki bilginin ne kadar düzenli olduğuna bakılır. Aktarım öncesinde biçim uyuşmazlıkları ve tekrar eden kayıtlar temizlenir. Bu hazırlık atlanırsa eski karışıklık yeni düzene de taşınır; o yüzden aktarmayı aynı zamanda bir toparlama fırsatı olarak görüyoruz.

Evet, yetkiler işin değişen ihtiyacına göre güncellenebilir. Yeni bir rol tanımlanabilir veya mevcut erişim daraltılabilir. Değişiklik yürürlüğe girmeden önce ilgili senaryoda denenir; böylece bir kişinin erişimini düzenlerken başka bir işin yanlışlıkla durması önlenir.

Hayır, bu tümüyle kullanım biçimine bağlıdır. Çoğu iş, cihazdan bağımsız çalışan tek bir arayüzle rahatça yürür. Ayrı bir mobil uygulama ancak saha kullanımı yoğunsa veya cihazın kendine özgü olanaklarına ihtiyaç varsa anlam kazanır; aksi halde gereksiz bir bakım yüküne dönüşür.

Bakım, çalışan bir sistemin sağlıklı kalmasını; geliştirme ise ona yeni bir yetenek eklenmesini kapsar. İkisini baştan ayırmak hem beklentiyi hem de sorumluluğu netleştirir. Mevcut bir aksaklığın giderilmesiyle yeni bir talebin karşılanması ayrı süreçler olarak yürütülür ve karışmaz.