Yazılım İhtiyacınızı İşin Gerçek Akışını Çözerek Belirliyoruz

Bir yazılım projesine kod yazarak değil, sorunları anlayarak başlıyoruz. İşletmenizde hangi işin sizi yorduğunu, nerede zaman kaybettiğinizi ve hangi adımın sürekli hata ürettiğini birlikte konuşuyoruz. Çoğu zaman asıl ihtiyaç, ilk söylenenden farklı çıkar; bu yüzden acele etmeden dinliyoruz. Mevcut düzeninizi, kullandığınız defterleri, tabloları ve programları yerinde inceliyoruz. Siirt’te faaliyet gösteren bir işletmenin günlük akışı ile büyük bir kurumun akışı aynı olmadığı için hazır bir kalıbı dayatmıyoruz. İşi yapan kişilerle konuşmak, yöneticinin anlattığından çok daha fazlasını ortaya çıkarıyor. Amacımız, size yeni bir yük değil, elinizdeki işi hafifleten bir araç kurmaktır. Bazen çözümün hiç kod yazmadan, mevcut bir aracı doğru kullanmakla geldiğini de dürüstçe söyleriz. Size gerçekten gerekmeyen bir işi satmak yerine, ihtiyacınıza en uygun yolu önermeyi tercih ederiz. İhtiyacı net görmeden atılan her satır kod, ileride sökülüp atılacak bir emek olur.

İhtiyacı anladıktan sonra kapsamı yazılı olarak netleştiriyoruz. Sistemin ne yapacağını, en az onun kadar da ne yapmayacağını açıkça belirtiyoruz; çünkü sınırı çizilmemiş bir proje sonsuza kadar büyür. Hangi ekranların, hangi rollerin ve hangi kuralların olacağını tek tek maddeler halinde çıkarıyoruz. Her isteğin bir maliyeti olduğunu bildiğimiz için, olmazsa olmazlarla iyi olur diyeceklerinizi birbirinden ayırıyoruz. Böylece bütçenizi gerçekten işe yarayan özelliklere ayırıyor, süse harcamıyoruz. Belirsiz kalan her nokta, ilerleyen haftalarda anlaşmazlık tohumu olduğu için baştan konuşmayı tercih ediyoruz. Kapsamı birlikte onayladığımızda, sonraki tüm aşamalarda bu belge ikimizin de pusulası oluyor. Kapsam değiştiğinde bunun süreye ve bütçeye etkisini de saklamadan, önceden paylaşıyoruz. Böylece iş bittiğinde beklenmedik bir fatura ya da gecikmeyle karşılaşmıyorsunuz. Sonradan çıkacak yeni fikirleri de reddetmiyor, ayrı bir aşamaya not ediyoruz.

Karmaşık bir işi tek hamlede bitirmeye çalışmak yerine, onu anlamlı parçalara bölüyoruz. Önce en çok işinize yarayacak çekirdek bölümü belirliyor, geri kalanını sonraya bırakıyoruz. Bu parçalı yazılım geliştirme yaklaşımı, sizi aylarca hiçbir şey görmeden beklemekten kurtarıyor. Her parçayı bitirdikçe elinize gerçekten çalışan bir bölüm geçiyor ve gidişatı erkenden görüyorsunuz. Yanlış giden bir şey varsa, bütün proje bitmeden fark edip düzeltiyoruz. Böylece hem risk azalıyor hem de harcanan para boşa gitmiyor. Bir bölümü kullanmaya başladığınızda ortaya çıkan gerçek ihtiyaçlar, bir sonraki bölümü daha isabetli kurmamızı sağlıyor. Öncelik sırasını da birlikte belirliyoruz; en çok acı çektiğiniz iş genellikle ilk çözülmeyi hak eder. Bu sıralama sayesinde daha ilk haftalarda somut bir rahatlama hissediyorsunuz. Küçük ve sık teslimler, büyük ve belirsiz bir vaatten her zaman daha güven verir.

İlk Sürümü Küçük Tutup Erken Denemeyi Önemsiyoruz

Geliştirmeye başladığımızda ilk hedefimiz, kusursuz değil ama çalışan bir sürüm çıkarmaktır. Bu ilk sürüm, sizin gerçek işinizle deneyip fikir verebileceğiniz somut bir örnek olur. Bir yazılım süreci, ekran başında hayal kurmakla değil, canlı örnekler üzerinde konuşmakla ilerler. Siz kullandıkça burası şöyle olsa dediğiniz noktalar ortaya çıkıyor ve biz bunları sıraya koyuyoruz. Her yeni parçayı, önceki çalışan yapının üzerine onu bozmadan ekliyoruz. İlerlemeyi sizinle düzenli aralıklarla paylaşıyor, gizli kapaklı çalışmıyoruz. Kâğıt üzerinde güzel görünen bir fikrin, gerçek kullanımda işe yaramadığını erken görmek büyük zaman kazandırır. İlk sürümü birkaç kişiyle, gerçek verinin küçük bir örneğiyle deniyoruz ki geri dönüş sahici olsun. Toplanan bu geri bildirimleri bir listeye alıp, önemine göre sıraya diziyoruz. Böylece proje, bitiminde sürpriz olmuyor; her adımı sizin de gördüğünüz bir yol izliyor.

Yazdığımız her parçayı, size teslim etmeden önce biz test ediyoruz. Kullanıcının yanlışlıkla boş bıraktığı bir alanı, ters girdiği bir tarihi ya da iki kez bastığı bir düğmeyi önceden deniyoruz. Çünkü gerçek kullanıcılar, sistemi bizim beklediğimiz düzgün yoldan değil, akıllarına gelen her yoldan kullanır. Hata çıktığında programın çökmesini değil, kişiyi nazikçe uyarmasını sağlıyoruz. Önemli işlemleri otomatik denetimlerle koruma altına alıyor, aynı hatanın tekrar tekrar dönmesini engelliyoruz. Test edilmemiş bir özellik, çalışıyor sanılan ama ilk yoğun günde tökezleyen bir özelliktir. Bir kez düzelttiğimiz hatayı, ileride geri gelmediğinden emin olmak için kayıt altına alıyoruz. Yalnızca her şeyin yolunda gittiği durumu değil, ters gidebilecek halleri de bilerek deniyoruz. Az kullanılan ama kritik bir işlem bozulduğunda, bunu ilk fark eden taraf siz değil biz oluyoruz. Bu yüzden denemeyi sona bırakılan bir formalite değil, işin ayrılmaz bir parçası sayıyoruz.

Kullanım kolaylığını da en az işlevler kadar önemsiyoruz. En güçlü sistem bile, personeliniz onu anlamıyorsa rafta kalır ve verdiği emeğe değmez. Bu yüzden ekranları sade tutuyor, sık yapılan işi en az tıklamayla bitirilecek şekilde diziyoruz. Butonların adını, uyarı yazılarını ve akışı günlük konuşma diline yakın kuruyoruz. Yeni bir çalışanın yarım saatte kavrayabileceği bir düzen hedefliyoruz. Gerektiğinde kısa bir kullanım videosu ya da tek sayfalık sade bir rehber hazırlıyoruz. Personelin ilk günlerde takıldığı yerleri dinleyip, arayüzü onların diline göre yeniden düzenliyoruz. Ekranları farklı boyutlarda düzgün çalışacak biçimde kuruyoruz ki hem masaüstünde hem telefonda rahat kullanılsın. Renk ve yazı boyutlarını, uzun süre bakan gözü yormayacak şekilde seçiyoruz. İşi kolaylaştırması gereken bir aracın, yeni bir baş ağrısına dönüşmesine izin vermiyoruz.

Entegrasyonları ve Güvenliği Baştan Planlayıp Sürprizleri Azaltıyoruz

Kurduğumuz sistemi, hâlihazırda kullandığınız araçlarla konuşabilir hale getiriyoruz. Muhasebe programınız, kısa mesaj servisiniz, ödeme altyapınız ya da kargo firmanızla bağlantıyı baştan planlıyoruz. Amaç, aynı bilgiyi iki farklı yere elle girmekten sizi ve ekibinizi kurtarmaktır. Yazılım güvenliği tarafında ise en baştan temkinli davranıyor, hiçbir kapıyı gereksiz yere açık bırakmıyoruz. Kimin hangi bilgiye erişeceğini rollerle sınırlıyor, herkese her yetkiyi vermiyoruz. Şifreleri okunabilir biçimde saklamıyor, güvenli bağlantı kullanımını en baştan zorunlu tutuyoruz. Dışarıyla konuşan her nokta, aynı zamanda korunması gereken bir noktadır; bunu tasarımın ilk gününden itibaren akılda tutuyoruz. Bağlantı bilgilerini ve gizli anahtarları kodun içine gömmüyor, ayrı ve korumalı bir yerde tutuyoruz. Bir servisin kurallarını değiştirmesi ihtimaline karşı, bağlantıyı kolayca güncellenebilir biçimde kuruyoruz.

Entegrasyonları kurarken tek bir noktanın çökmesiyle her şeyin durmamasına özellikle dikkat ediyoruz. Dış bir servis yanıt vermediğinde sistemin bunu fark edip paniğe kapılmadan beklemesini sağlıyoruz. Aktarılan bilgilerin yolda bozulup bozulmadığını denetleyen kontroller ekliyoruz. Bir bağlantı koptuğunda, işlemin yarıda kalıp tutarsız bir kayıt bırakmasını engelliyoruz. Hangi sistemin hangi bilgiyi ne zaman gönderdiğini kayıt altına alıyoruz ki sorun çıkınca izini kolayca sürebilelim. Böylece farklı araçlar tek bir orkestra gibi, birbirini ezmeden uyum içinde çalışıyor. İşlerin en yoğun olduğu anlarda bile sistemin ağırlaşmadan ayakta kalmasını hedefliyoruz. Bir aktarım başarısız olduğunda, işlemin bir süre sonra kendiliğinden yeniden denenmesini sağlıyoruz. Böyle küçük emniyet önlemleri, geçici bir kesintinin kalıcı bir veri kaybına dönüşmesini engeller. Görünmeyen bu bağlar sağlam olduğunda, siz yalnızca işin kolaylaştığını fark edersiniz.

Güvenliği bir kez kurulup unutulan bir duvar gibi görmüyoruz. Kullanılan bileşenlerin güncel kalmasını, açık bulunan noktaların vakit geçmeden kapatılmasını düzenli olarak takip ediyoruz. Önemli verilerin düzenli yedeğini alıyor, bu yedeklerin gerçekten geri yüklenebildiğini de ayrıca sınıyoruz. Bir sorun anında verinin kurtarılabilmesi, en az onu korumak kadar önemlidir. Kişisel bilgileri yalnızca gerekli olduğu kadar topluyor, işinize yaramayan veriyi baştan istemiyoruz. Çünkü saklamadığınız bir bilgi, sızması mümkün olmayan bir bilgidir. Kimin ne zaman hangi kayda dokunduğunu izleyen bir günlük tutarak, olası bir sorunda geriye dönük bakabiliyoruz. Personelinize de basit ama işe yarar birkaç güvenlik alışkanlığını, örneğin güçlü parola ve ekran kilidini hatırlatıyoruz. Çünkü en sağlam sistem bile, dikkatsiz bir anla açık verebilir. Bu yüzden güvenliği yalnızca teknik bir konu değil, ortak bir sorumluluk olarak ele alıyoruz. Güvenlik, tek seferlik bir işlem değil, süren bir alışkanlıktır.

Bakımı, Kaynak Kodunu ve Veri Sahipliğini Size Bırakıyoruz

Bir sistem teslim edildikten sonra da yaşamaya devam eder; işiniz değişir, ihtiyaçlar artar. Bu yüzden yazılım bakımını daha baştan konuşuyor, sizi teslim gününde yalnız bırakmıyoruz. Ortaya çıkan küçük hataları düzeltmek, yeni bir alan eklemek ya da bir kuralı güncellemek zamanla mutlaka gerekecektir. Bunları nasıl ve hangi koşullarda yapacağımızı önceden açıkça yazıyoruz. Acil bir durumda bize nasıl ulaşacağınızı ve ne kadar sürede döneceğimizi net biçimde belirtiyoruz. Sürekli bir bakım anlaşması isteyebilir ya da yalnızca ihtiyaç oldukça bizi çağırabilirsiniz. Düzenli bakım, uzun vadede ani ve pahalı arızaların önüne geçen en ucuz yoldur. Sistemin sessizce çalıştığı dönemlerde bile arka planda güncellemeleri ve yedekleri takip etmeyi sürdürüyoruz. Bir sorun büyümeden önce belirtilerini yakalamak, sonradan uzun bir kesinti yaşamaktan çok daha kolaydır. Ne yaptığımızı da her ay kısa bir notla size aktarıyoruz. Karar sizin; biz her iki yolu da açık tutuyoruz.

Sistemi büyümeye hazır kuruyoruz ki bugünkü haliyle sizi ileride sıkıştırmasın. Kullanıcı sayınız arttığında ya da yeni bir şube açtığınızda, temeli baştan atmak gerekmesin. Kodun düzenli ve okunur olmasına özen gösteriyoruz; çünkü dağınık bir yapı, her küçük değişikliği bile pahalı hale getirir. Ne yaptığımızı açıklayan notlar bırakıyor, aldığımız kararların nedenini belgeye geçiriyoruz. Böylece ileride projeye başka bir geliştirici baksa bile, işin içinden kolayca çıkabilir. İyi kurulmuş bir temel, yıllar sonra bile üzerine güvenle yeni kat eklenebilen bir zemindir. Kısa yoldan gidip bugün kazanılan zamanın, çoğu zaman yarın iki katı olarak geri ödendiğini biliyoruz. Sık kullanılan işlevleri, sistem büyüdüğünde bile hızlı kalacak biçimde tasarlıyoruz. Veritabanını baştan düzenli kurmak, ileride milyonlarca kayıt arasında bile aramanın yavaşlamamasını sağlar. Böyle görünmeyen kararlar, sistemin kaç yıl dayanacağını doğrudan belirler. Bugünün küçük özeni, gelecekteki büyük masrafları önler.

Teslimde en çok önem verdiğimiz konu, hem verinin hem de kaynak kodun size ait olmasıdır. Bir yazılım projesinin sonunda elinizde yalnızca bir giriş ekranı değil, tüm kaynak dosyaları ve verileriniz bulunmalıdır. Bilgilerinizi istediğiniz an dışarı alabileceğiniz bir biçimde saklıyor, sizi kendi verinize kilitlemiyoruz. Kaynak kodu teslim ediyor, hesapların kimin adına açıldığını yazılı olarak size veriyoruz. Böylece ileride bizimle yolunuz ayrılsa bile, çalışmanızı başka bir ekip rahatça sürdürebilir. Siirt’te işini büyütmek isteyen bir işletmenin, kendi sistemine sahip olması en doğal hakkıdır. Kullandığımız araçları da mümkün olduğunca herkese açık ve yaygın olanlardan seçerek sizi tek bir firmaya mahkûm etmiyoruz. Sistemin nasıl kurulduğunu anlatan sade bir belgeyi de teslim paketine ekliyoruz. Bu belge sayesinde yarın başka bir ekip devraldığında, sıfırdan çözmeye uğraşmadan işe devam edebilir. Verinizi düzenli aralıklarla dışarı alabilmeniz için de basit bir yol bırakıyoruz. Sahiplik sizde olduğu sürece, kurduğumuz sistem gerçek bir varlık olarak kalır.

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

Hazır bir paket, çok sayıda işletmenin ortak ihtiyacına göre kurulur; sizin işinizin kendine özgü adımları çoğu zaman bu ortalamanın dışında kalır. Özel yazılım tam da bu ayrımın belirginleştiği noktada anlam kazanır, yani sürecin standart bir kalıba sığmadığı yerde. Eldeki kaynaklar, kullanım sıklığı ve ekipteki sorumluluk birlikte değerlendirilerek karar verilir.

Gerekmez; çoğu zaman en çok kullanılan çekirdek işlevle başlamak, hem işi erken görmenizi hem de yönü zamanında düzeltmenizi sağlar. Baştan istenen her ayrıntıyı eklemek, henüz sınanmamış varsayımlara bağlanmak demektir. Eldeki kaynak, kullanım sıklığı ve ekip sorumluluğu birlikte tartılarak ilk sürümün kapsamı belirlenir.

Çoğu durumda aktarılabilir; ancak eski kayıtların ne kadar düzenli tutulduğu bu işin süresini belirler. Siirt merkezli bir çalışmada da olduğu gibi önce verinin biçimi incelenir, tekrar eden ya da eksik alanlar ayıklanır, sonra deneme aktarımıyla sonuç doğrulanır. Kaynaklar, kayıt sıklığı ve sorumluluk birlikte değerlendirilerek yöntem seçilir.

Evet; yetkiler kalıcı bir kalıp değil, işin değişimine göre güncellenebilen bir yapıdır. Yeni bir görev tanımı ya da ekipteki bir değişiklik olduğunda ilgili kişinin erişimi düzenlenir ve bu değişiklik kayıt altında tutulur. Kaynaklar, kullanım sıklığı ve ekip sorumluluğu gözetilerek düzenleme yapılır.

Her zaman gerekmez; belirleyici olan işin nerede yapıldığıdır. İşlemlerin çoğu masabaşında yürüyorsa ayrı bir mobil uygulama yerine ekranın telefonda düzgün açılması yeterli olabilir. Sahada geçen iş ağırlıktaysa mobil tarafın öne alınması anlamlı olur; karar, kullanım sıklığı ve ekip sorumluluğuyla birlikte verilir.

Bakım, çalışan sistemin sürdürülmesi ve oluşan sorunların giderilmesidir; yeni geliştirme ise sisteme daha önce olmayan bir işlev eklemektir. Yürüttüğümüz çalışmalarda bu ikisini ayrı kayıtlarda tutar, hangi işin hangi başlığa girdiğini şeffaf biçimde belirtiriz. Kaynaklar, kullanım sıklığı ve sorumluluk gözetilerek öncelik belirlenir.