Şırnak Yazılım İhtiyacını Baştan Doğru Tanımlıyoruz

Bir işletmeye kod teslim etmeden çok önce, o kodun neye yarayacağını uzun uzun konuşuruz. Bir yazılım projesi bizim için teknik bir görevden çok, çözülmesi gereken gerçek bir işle başlar. İlk oturumlarda işinizin nasıl döndüğünü, hangi adımı elle ya da kâğıt üstünde yürüttüğünüzü dinleriz. Şırnak’ta faaliyet gösteren bir işletmenin günlük akışı, bir başkasınınkinden çok farklı olabilir; bu yüzden hazır bir kalıbı size dayatmayız. Neyi otomatikleştirmek istediğinizi, hangi işin sizi en çok yorduğunu birlikte çıkarırız. Bazen ihtiyacınız koca bir program değil, tek bir ekranın sadeleştirilmesidir. Gerçek sorunu anlamadan çözüm önermeyiz. Yanlış tanımlanmış bir işe yazılan en temiz kod bile elinizde işe yaramaz. Doğru soru sorulmadan yazılan hiçbir satır, sizi gerçekten rahatlatmaz. Bu yüzden ilk günü konuşmaya değil, dinlemeye ayırırız. Bir işi ne kadar iyi anlarsak, çözümü de o kadar sade olur. Anlamadan yazılan kod, çoğu zaman baştan yazılır.

İhtiyacı anladıktan sonra onu tek tek yazıya dökeriz. Hangi ekranların olacağını, her birinin ne işe yarayacağını ve hangi bilgiyi tutacağını açıkça listeleriz. Bu belge teknik bir sözleşme değil, iki tarafın da rahatça anlayabileceği sade bir anlatımdır. Amacımız, işin sonunda beklediğinizden bambaşka bir sonuçla karşılaşmamanızdır. Kapsamı belirlerken hangi özelliğin gerçekten gerekli, hangisinin sonraya bırakılabilir olduğunu ayırırız. Her istek listeye giremez; giren her şeyin somut bir gerekçesi olur. Öncelikleri birlikte sıralarız, çünkü bütçe ve zaman hiçbir işte sınırsız değildir. İyi tanımlanmış bir kapsam, sonradan çıkabilecek sürprizlerin çoğunu daha baştan engeller. Yazıya dökülen bir söz, havada kalan bir sözden her zaman daha güvenlidir. Belirsizlik bırakmadan ilerlemek, iki tarafın da işini kolaylaştırır. Baştan konuşulan bir ayrıntı, sonradan çıkacak bir tartışmadan çok daha ucuzdur. Netlik, iki tarafı da rahat ettirir. Yazılı bir plan, iki tarafın da aynı hedefe bakmasını sağlar.

Planlama aşamasını hiçbir zaman hafife almayız. İyi kurulmuş bir yazılım süreci, sonradan yaşanacak pek çok baş ağrısını daha başlamadan çözer. Bir özelliği kâğıt üzerinde değiştirmek dakikalar alır, aynı değişikliği bitmiş bir programda yapmak günlere mal olabilir. Bu yüzden ekranların taslağını önce basit çizimlerle paylaşır, akışı sizinle birlikte gözden geçiririz. Siz taslağı onaylamadan kod yazmaya geçmeyiz. Böyle çalışınca yanlış giden bir şey henüz ucuzken fark edilir. Hedefimiz bir gecede biten bir iş değil, uzun süre sorunsuz çalışan sağlam bir yapı kurmaktır. İyi bir plan, sonraki her satırın üzerine oturduğu zemindir. Acele başlanan bir iş, çoğu zaman iki kez yapılır. Baştan ölçüp bir kez kesmek, hem zamanı hem parayı korur. Kâğıt üzerinde silinen bir hata, bedavaya düzeltilmiş bir hatadır. Bu yüzden en çok emeği baştan plana veririz.

Küçük ve Çalışan Bir İlk Sürümle Yola Çıkıyoruz

Büyük bir sistemi tek hamlede kurmaya çalışmak çoğu zaman hüsranla biter. Bu yüzden yazılım işine küçük ve çalışan bir ilk sürümle başlarız. Amacımız, en gerekli işi yapan sade bir çekirdeği bir an önce elinize vermektir. Onu gerçek kullanımda görünce hem siz hem biz çok şey öğreniriz. Kâğıt üstünde güzel görünen bir fikir, ekranda beklenmedik biçimde davranabilir. Erken çıkan bir sürüm, bu sürprizleri iş büyümeden önümüze koyar. Böylece yanlış bir yola aylarca yürümek yerine, daha ilk adımda rotayı düzeltiriz. Küçük başlayıp emin adımlarla büyümek, baştan devasa bir yapı kurmaktan çok daha güvenlidir. Erken alınan geri bildirim, en değerli yol göstericidir. Bir fikri konuşarak değil, kullanarak sınamak çok daha öğreticidir. Küçük bir başlangıç, büyük bir hedefin en sağlam ilk adımıdır. Elle tutulan bir parça, sayfalarca söz vermekten daha inandırıcıdır.

İlk sürümü elinize aldığınızda asıl geri bildirim başlar. Kullanırken takıldığınız yerleri, eksik bulduğunuz adımları not eder, bir sonraki turda bunları düzeltiriz. Geliştirmeyi tek bir büyük teslim yerine kısa turlar halinde yürütürüz. Her turun sonunda çalışan, görülebilen bir parça olur; boş vaatlerle değil, elle tutulur sonuçlarla ilerleriz. Bu düzen, projenin nereye gittiğini her an görmenizi sağlar. Bir özelliğin işinize yaramadığını fark ederseniz, ona daha fazla emek harcamadan yön değiştirebiliriz. Böyle çalışınca bütçeniz de denetim altında kalır, çünkü büyük harcamalar küçük adımlara bölünür. Görerek ilerlemek, tahmin ederek ilerlemekten her zaman daha güvenlidir. Yolun ortasında rota değiştirmek, sonda her şeyi bozmaktan çok daha kolaydır. Her turda görünen bir ilerleme, iki tarafa da güven verir. Belirsizlik azaldıkça, verilen kararlar da kolaylaşır. Her adımda görülen somut bir sonuç, güveni sözlerden çok daha iyi büyütür.

Kapsamı küçük tutmak, kaliteden ödün vermek anlamına gelmez. Tam tersine, az sayıda işi hakkıyla yapan bir program, çok sayıda işi yarım yapan bir programdan çok daha değerlidir. Yeni bir özellik eklemeden önce onun gerçekten gerekip gerekmediğini birlikte sorgularız. Gereksiz her özellik, sonradan bakımı gereken fazladan bir yüktür. Sade bir yapı, hem daha az hata çıkarır hem de daha kolay büyür. İhtiyaç gerçekten doğduğunda yeni parçayı ekleriz, belki lazım olur diye baştan şişirmeyiz. Böylece elinizde anlaşılır, bakımı kolay ve size ait bir sistem kalır. Az ama sağlam bir yapı, çoğu zaman çok ama kırılgan bir yapıdan üstündür. Sadelik burada bir kısıtlama değil, bilinçli bir seçimdir. Fazla değil, doğru özelliğin peşinde koşarız. Gereksiz bir parça, ileride hep bir yük olarak geri döner.

Geliştirmeyi Test ve Güvenlikle Birlikte Yürütüyoruz

Geliştirme aşamasında kod yazmakla test etmeyi birbirinden ayırmayız. Bir yazılım ekibi olarak, ürettiğimiz her parçayı beklendiği gibi çalıştığından emin olana kadar sınarız. Elle yapılan denemelerin yanında, kendi kendine çalışan sınama adımları da kurarız; böylece eski bir özellik yeni bir değişiklikle sessizce bozulmaz. Bir hatayı kullanıcıdan önce bizim yakalamamız, herkes için daha az sıkıntı demektir. Kod yazmak işin yalnızca bir yarısıdır; onu güvenilir kılmak diğer yarısıdır. Test edilmemiş bir özelliği asla bitmiş saymayız. Ekranda çalışıyor görünmesi, her koşulda doğru çalıştığı anlamına gelmez. Bu yüzden farklı durumları tek tek deneriz, kolay yolu seçip geçiştirmeyiz. Beklenmedik bir girişte çökmeyen bir program, gerçekten hazır bir programdır. Sessizce bekleyen bir hata, en kötü anda ortaya çıkar. Onu erken bulmak, sonradan özür dilemekten çok daha iyidir.

Güvenlik, sonradan eklenen bir yama değil, baştan gözetilen bir tasarım kararıdır. Kullanıcı bilgilerini korur, girişleri denetler ve dışarıdan gelen her veriyi şüpheyle karşılarız. Şifreleri açık biçimde saklamaz, bağlantıları güvenli hale getiririz. Bir sisteme başka servisleri bağlarken de aynı dikkati gösteririz; ödeme, mesaj ya da harita gibi dış araçlarla konuşurken sınırları net çizeriz. Entegrasyonlar işi kolaylaştırır, ama her yeni bağlantı yeni bir sorumluluk da getirir. Bu yüzden neyin nereye bağlandığını kayıt altında tutarız. Düzenli yedekleme de güvenliğin bir parçasıdır; kötü bir gün geldiğinde verinizi geri getirebilmek gerekir. Korunması gereken şey yalnızca kod değil, size emanet edilen bilgidir. Bir kez sızan bir bilgiyi geri almak çoğu zaman mümkün olmaz. Bu yüzden güvenliği en başta, kod henüz kâğıttayken düşünürüz. Sonradan yamanan bir güvenlik, her zaman biraz gevşek kalır.

Bir işi bitmiş saymadan önce onu ayrıntısıyla belgeleriz. Bir yazılım projesinde en çok unutulan şey, ileride o kodu okuyacak kişiyi düşünmektir. Değişkenleri anlaşılır adlandırır, karmaşık bölümlere kısa açıklamalar bırakırız. Böylece aylar sonra bir ekleme gerektiğinde, kimse kodun içinde kaybolmaz. Sistemin nasıl kurulacağını, nasıl çalıştırılacağını da adım adım yazarız. Bu belgeler bugün gereksiz görünse de, ilk arıza anında değerini gösterir. İyi belgelenmiş bir proje, başka bir ekibe de kolayca devredilebilir. Amacımız sizi tek bir kişiye ya da tek bir firmaya mahkûm etmemektir. Anlaşılır yazılmış bir kod, uzun ömürlü bir koddur. Bugün bırakılan bir açıklama, yarının vaktini ve sinirini kurtarır. İyi bir belge, kodun sessiz ama sadık bir yol arkadaşıdır. Onu bugün yazmak, yarın aramaktan her zaman kolaydır. Belgeli bir proje, kişilerden bağımsız olarak ayakta durur.

Kaynak Kodu ve Veriyi Size Teslim Ediyoruz

Bir işi teslim etmek, onun anahtarını gerçekten size vermek demektir. Yazılım tarafında bu, kaynak kodunun ve verinin eksiksiz biçimde sizde olması anlamına gelir. Yazdığımız kodun sahibi sizsiniz; onu saklamaz, bir kasada tutup sizi bağımlı kılmayız. Projeyi çalıştırmak için gereken her dosyayı, her bilgiyi düzenli biçimde teslim ederiz. Veritabanınızın sizin denetiminizde olmasını, gerektiğinde dışarı taşınabilir olmasını sağlarız. Bir gün başka bir ekiple yola devam etmek isterseniz, elinizde ihtiyaç duyacağınız her şey hazır bulunur. Bilgi ve erişim sizde kaldıkça eliniz her zaman güçlü kalır. Kapıyı arkanızdan kilitleyen değil, sonuna kadar açık bırakan bir teslim yaparız. Sahip olduğunuz bir işin anahtarını başkasının cebinde unutmayız. Size ait olan bir şeyi size vermek, bir iyilik değil sıradan bir görevdir. Bunu asla bir pazarlık konusu yapmayız.

Teslim, ilişkinin sonu değil bakımın başlangıcıdır. Çalışan bir program bile zamanla ilgi ister; işletim ortamları değişir, bağlı olduğu servisler güncellenir. Bir sorun çıktığında ne yapacağımızı önceden konuşur, kime ne zaman ulaşacağınızı netleştiririz. Küçük düzeltmeleri hızlıca yapar, büyük değişiklikleri ise birlikte planlarız. Düzenli bakım, ansızın çıkan büyük arızaların çoğunu önler. İster bakımı biz sürdürelim, ister sizin ekibiniz devralsın; her iki durumda da neyin nasıl çalıştığını açıkça bırakırız. Bakımsız kalan bir sistem, bir süre sonra kimsenin dokunmaya cesaret edemediği bir kutuya döner. Biz o kutuyu her zaman açık ve anlaşılır tutmaya çalışırız. Düzenli bakılan bir sistem, yıllar sonra bile huzurla kullanılır. Düzenli bir bakım, pahalı bir onarımdan her zaman daha hesaplıdır. Küçük bir ilgi, büyük bir çöküşü baştan önler.

İşiniz büyüdükçe ihtiyaçlarınız da değişir ve biz buna baştan hazır dururuz. Bugün tek bir işi yapan bir program, yarın yeni bir bölüme ya da yeni bir rapora ihtiyaç duyabilir. Baştan sade ve düzenli kurulmuş bir yapı, sonradan gelen her eklemeyi kolayca taşır. Yeni bir ihtiyaç doğduğunda sıfırdan başlamayız; var olan temelin üstüne inşa ederiz. Şırnak’ta işini büyütmek isteyen bir işletmenin sistemi de onunla birlikte büyümelidir. Nelerin nasıl çalıştığını birlikte gözden geçirir, bir sonraki adımı yine birlikte belirleriz. Kısa vadeli bir işçi gibi değil, uzun soluklu bir teknik ortak gibi yanınızda kalırız. Doğru kurulmuş bir sistem, yıllar içinde işinizle birlikte olgunlaşır. Bir programın ömrü, ona gösterilen özenle uzar. Doğru kurulan bir temel, üstüne konan her yeni katı sessizce taşır. Sağlam bir başlangıç, uzun bir ömrün ilk koşuludur.

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

Ayrım, çoğunlukla işin kendine özgü akışında ortaya çıkar; hazır paket genel bir ihtiyaca göre kuruludur, özel yazılım ise sizin sıranıza ve kayıt düzeninize göre biçimlenir. Bu fark, proje kapsamı ve mevcut veri incelendikten sonra netleşir. Uygulanacak yöntem ve teslim ölçütü de baştan yazıya geçirilir.

Genellikle gerekmez; işi asıl taşıyan çekirdek adımlarla başlamak daha sağlıklıdır. Öncelikler, ekip sorumlulukları ve gerçek kullanım gözlenerek belirlenir. Geri kalan işlevler, gerçekten ihtiyaç duyulduğu görülünce sonraki aşamalara ölçülü biçimde bırakılır.

Çoğu durumda aktarılabilir; ancak bunun için eski verinin biçimi ve tutarlılığı önce incelenir. Hangi kayıtların taşınacağı, hangilerinin sadeleştirileceği kapsam netleştikten sonra kararlaştırılır. Aktarım, varsayılan değil denenmiş bir adım olarak planlanır.

Evet; roller ve erişim hakları zamanla değişebileceği düşünülerek kurulur. Yeni bir görev ya da birim eklendiğinde yetkiler, kayıtların bütünlüğü bozulmadan güncellenir. Yapılan her değişiklik izlenebilir kaldığı için sonradan kimin neyi neden değiştirdiği de görülebilir.

Hayır; mobil ihtiyaç, işin nerede ve nasıl yapıldığına bağlıdır. Kullanım çoğunlukla sahadaysa mobil taraf öne çıkar. Süreç ofiste yürüyorsa tarayıcı üzerinden erişim çoğu zaman yeterli olur ve gereksiz bir uygulama yükünden kaçınılır.

Bakım, çalışan düzenin sürmesini ve çıkan aksaklıkların giderilmesini kapsar; yeni geliştirme ise mevcut işleve eklenen değişikliklerdir. İkisi baştan ayrı tanımlanır. Böylece hangi işin hangi kapsamda yürüdüğü ve nasıl ilerleyeceği belirsiz kalmaz.