Yazılım Çözümünü İşletmenizin Günlük Yükünden Türetiyoruz

Bir yazılım projesine kod yazarak değil, önce sizi dinleyerek başlıyoruz. Hangi işi hızlandırmak, hangi hatayı ortadan kaldırmak istediğinizi ayrıntısıyla konuşuyoruz. Çoğu zaman asıl sorun sandığınız yerde değil, ona bağlı başka bir adımda saklı durur. Bu yüzden mevcut iş akışınızı baştan sona izliyor, tekrarlanan ve zaman kaybettiren noktaları çıkarıyoruz. Nevşehir’deki işletmenizin gündelik yükünü hafifletecek çözümün, gösterişli değil kullanışlı olması gerekir. Elde ettiğimiz bilgiyi sade bir ihtiyaç belgesine döküyoruz. Bu belge, neyin yapılacağını ve neyin kapsam dışı kalacağını açıkça yazar. Ölçüsü belirsiz bir istek, hem bütçeyi hem takvimi sessizce şişirir. İlk işimiz, bulanık isteği ölçülebilir bir hedefe çevirmek. Doğru tanımlanan bir ihtiyaç, projenin yarısını daha başlamadan çözer. Yanlış anlaşılan bir istek ise en pahalı hatanın tohumunu baştan atar. Bu yüzden dinleme aşamasına, kod yazmaya ayırdığımız kadar zaman ayırıyor ve her varsayımı sizinle tek tek doğruluyoruz.

İhtiyacı anlamak, uzun bir özellik listesi çıkarmak demek değildir. Her istenen özelliğin işletmeye gerçekten ne kazandıracağını tek tek sorguluyoruz. Bir düğme, bir ekran ya da bir rapor, birine zaman kazandırmıyorsa yalnızca yük olur. Bu yüzden önceliklendirmeyi birlikte yapıyor, olmazsa olmazları süse ayırdığınız isteklerden ayırıyoruz. Kullanacak kişileri de sürece katıyoruz; sahadaki çalışan, yöneticinin gördüğü tabloyu çoğu zaman farklı görür. Onların alışkanlıklarını hesaba katmayan bir çözüm, ne kadar akıllı olursa olsun rafta kalır. Ekranları önce kağıt üzerinde taslak olarak çiziyor, daha tek satır kod yazmadan üzerinde konuşuyoruz. Yanlış bir varsayımı taslak aşamasında düzeltmek, çalışan sistemde düzeltmekten kat kat ucuza gelir. Erken sorulan doğru soru, sonradan çıkacak pahalı sürprizleri baştan önler. Az ama doğru özellik, çok ama karışık özellikten her zaman daha değerlidir. Sade tutulan bir sistem hem öğrenmesi hem yaşatması kolay olduğundan, ekibiniz onu günlük işine çok daha çabuk katar.

Bütçe ve takvim konusunu en baştan açık konuşuyoruz. Bir yazılım geliştirme işinin ilk maliyeti kadar, bakım ve büyüme maliyetini de hesaba katmanız gerekir. Bugün en ucuz görünen çözüm, yarın değiştirmesi en pahalı olan çıkabilir. Bu yüzden kararları yalnızca ilk fiyata göre değil, uzun vadeli sahiplik maliyetine göre veriyoruz. Hangi işin ilk sürümde, hangisinin sonraki aşamada geleceğini yazılı olarak paylaşıyoruz. Böylece ne beklediğinizi net bilir, ay sonunda sürpriz bir faturayla karşılaşmazsınız. Riskleri de saklamıyoruz; belirsiz kalan noktaları önceden açıkça işaretliyoruz. Dürüst bir tahmin, tutulmayan parlak bir söze her zaman yeğdir. Planı birlikte onayladığımızda artık ortak bir zemine basıyoruz. Bir işin gerçek maliyeti, teslim gününde değil, aylar sonra bakımında ortaya çıkar. Bunu en baştan açıkça konuşmak, ilerleyen aylarda ikimizi de beklenmedik masraflar ve kırgınlıklar karşısında zor durumda bırakmaz.

Kapsamı Küçük Bir İlk Sürümde Somutlaştırıyoruz

Büyük bir sistemi tek hamlede kurmaya çalışmak, en sık yapılan hatalardan biridir. Bunun yerine önce işinizin can damarını çözen küçük bir ilk sürüm çıkarıyoruz. Bu sürüm eksiksiz değildir, ama gerçek işte kullanılabilir olmalıdır. Elle tutulur bir şeyi erken görmeniz, kağıt üzerindeki onlarca sayfadan çok daha değerlidir. Kullandıkça aklınıza gelen ihtiyaçlar, çoğu zaman baştan yazdığımız listeden daha isabetli çıkar. İlk sürümü gerçek işe soktuğumuzda somut geri bildirim toplamaya başlarız. Bu geri bildirim, sonraki adımların pusulası olur. Böylece kaynağınızı henüz kanıtlanmamış özelliklere değil, işe yaradığı belli olan yönlere ayırırsınız. Küçük başlayıp emin adımlarla büyümek, hem riski hem maliyeti düşürür. Erken çıkan sade bir sürüm, aylarca beklenen kusursuz bir hayalden çoğu zaman daha faydalıdır. Gerçek kullanım, hiçbir toplantının öngöremediği ihtiyaçları hızla ortaya çıkarır. Bu yüzden kusursuz bir sonucu aylarca beklemek yerine, çalışan bir parçayı erken görmeyi ve onu gerçek işte denemeyi seçiyoruz.

Kapsamı somutlaştırırken her işlevi tek tek tanımlıyoruz. Bir yazılım paketinin içinde neyin olduğu kadar, neyin olmadığı da yazılı olmalı. Sınırı belirsiz bırakılan her istek, ilerleyen haftalarda tartışmaya dönüşür. Bu yüzden ekranları, kuralları ve istisnaları önceden kağıda döküyoruz. Verilerin nereden gelip nereye gideceğini, kimin neyi görebileceğini açıkça belirliyoruz. Yetki katmanlarını baştan kurmak, sonradan üzerine eklemekten çok daha sağlıklı olur. Kullanıcı rollerini ve izinleri işletmenizin gerçek yapısına göre düzenliyoruz. Böylece herkes yalnızca işine yarayan ekranı görür, gereksiz karmaşadan uzak durur. Net bir kapsam, hem bizim hem sizin sözünüzü koruyan bir sözleşme gibi çalışır. İyi tanımlanmış bir sınır, ilerleyen aylarda ikimizi de haksız beklentilerden korur. Yazıya dökülen her kural, ileride yaşanacak bir tartışmayı baştan çözer. Belirsizlik başlangıçta ucuz görünür, ama faturası çoğu zaman en geç ve en ağır ödenen fatura olarak geri döner.

İlk sürümü tasarlarken ileride büyümeyi de düşünüyoruz. Bugün on kaydı tutan bir sistem, yarın on bin kaydı zorlanmadan taşıyabilmeli. Veri yapısını bu genişlemeye hazır kuruyoruz ki sonradan temeli sökmek gerekmesin. Aynı şekilde, başka araçlara bağlanma ihtimalini de baştan bir kenarda tutuyoruz. Kapıları tümüyle kapatmak yerine, ileride açılabilecek bağlantı noktaları bırakıyoruz. Ama bunu yaparken bugünkü işi gereksiz yere karmaşıklaştırmıyoruz; olmayan ihtiyaç için fazladan yük taşımak da bir israftır. Bugünün ihtiyacını sade çözmek ile yarının kapısını açık tutmak arasında denge kuruyoruz. Bu denge, deneyimle oturan bir yargıdır ve her projede yeniden gözden geçirilir. Sağlam bir temel, sonraki her adımın maliyetini ucuzlatır. Erken kurulan doğru yapı, büyüme anında sizi çaresiz bırakmaz. Geleceği tümüyle tahmin edemeyiz ama ona hazırlıklı bir zemin kurabiliriz. Bugün attığımız sağlam bir temel, yarın gelecek yükü siz fark etmeden taşıyacak kadar sessiz ve güçlü olabilir.

Kodu Sık Sık Gösterip Test ve Güvenlikle Sağlamlaştırıyoruz

Geliştirme aşamasında işi küçük parçalara bölüp sık sık gösteriyoruz. Bir yazılım sürecinin en tehlikeli anı, aylarca kaybolup sonunda yanlış şeyi teslim etmektir. Bunu önlemek için her birkaç haftada çalışan bir parçayı elinize veriyoruz. Siz kullandıkça yönü düzeltiyor, olası sapmayı erken yakalıyoruz. Yazdığımız kodu otomatik testlerle koruyoruz; böylece bir düzeltme başka bir yeri sessizce bozduğunda hemen haberimiz olur. Elle yapılan kontrolleri de ihmal etmiyoruz, çünkü kullanıcının gerçek davranışı testlerin göremediği köşeleri açığa çıkarır. Bulduğumuz hataları gizlemiyor, ortak bir listede açıkça izliyoruz. Her hatanın önceliğini birlikte belirleyip hangisinin önce çözüleceğine karar veriyoruz. Şeffaf bir süreç, güveni koddan bile daha çok besler. Sık gösterilen küçük ilerlemeler, uzun sessizliğin doğurduğu kaygıyı baştan ortadan kaldırır. Erken görülen bir sapma birkaç saatte düzelir; geç görülen ise günler alır. İşi karanlıkta değil sizin gözünüzün önünde büyüttüğümüz için, sürpriz bir teslim yerine adım adım güven veren bir süreç kuruyoruz.

Güvenliği sonradan eklenen bir katman değil, baştan örülen bir doku sayıyoruz. Kullanıcı girişlerini doğruluyor, dışarıdan gelen her veriyi baştan şüpheyle karşılıyoruz. Parolaları asla düz metin olarak saklamıyor, tanınmış güvenli yöntemlerle koruyoruz. Yetkisiz erişimi engellemek için her isteğin arkasındaki kişiyi denetliyoruz. Verilerin taşınırken şifreli gitmesini sağlıyor, hassas bilgiyi yalnızca gereken yerde tutuyoruz. Düzenli yedek almadan hiçbir sistemi güvenli saymıyoruz; bir arıza anında geri dönebilmek şarttır. Yedekleri sistemin dışında da saklıyoruz ki tek bir sorun her şeyi silip süpürmesin. Güvenlik açıklarını takip ediyor, bilinen zafiyetler için güncellemeleri zamanında uyguluyoruz. Bu görünmeyen emek, bir gün sizi büyük bir zarardan sessizce kurtarır. Güvenliği baştan kurmak, sonradan yamamaktan hem daha ucuz hem daha sağlamdır. Bir veri sızıntısının bedeli, çoğu zaman tüm projenin maliyetini kat kat aşar. Bu yüzden güvenliği pazarlık edilebilir bir ayrıntı olarak değil, sistemin en baştan uyması gereken temel bir kural olarak görüyoruz.

Test etmeyi tek bir aşama değil, süregiden bir alışkanlık olarak kuruyoruz. Yeni bir özellik eklerken eskilerin hala çalıştığını otomatik olarak doğruluyoruz. Farklı cihaz, tarayıcı ve bağlantı hızında sistemin nasıl davrandığını deniyoruz. Gerçek verilere benzeyen örneklerle çalışıyor, sadece ideal durumu değil aksaklıkları da sınıyoruz. İnternet koptuğunda, bir alan boş bırakıldığında ya da beklenmedik bir değer girildiğinde ne olacağını önceden düşünüyoruz. Kullanıcıya anlaşılır hata mesajları gösterip onu çıkmaza sokmuyoruz. Bir sistemi teslim etmeden önce sizinle birlikte gerçek senaryolar üzerinden tek tek geçiyoruz. Böylece canlıya alma günü sürprizle değil, hazırlıkla karşılanır. Sağlam bir test düzeni, gece yarısı gelen arıza telefonlarını belirgin biçimde azaltır. Erken bulunan her hata, kullanıcıya ulaşmadan ucuza kapanmış demektir. Bir hatayı kullanıcıdan önce bulmak, güveni koruyan en sessiz iştir. Kusursuz sistem diye bir şey yoktur; ama sık ve dikkatli test edilen bir sistem sizi çok daha az yorar.

Kaynak Kodunu Veri Sahipliğinizle Birlikte Teslim Ediyoruz

Teslimin bizim için anlamı, size bağımlı kalmayan bir sistem bırakmaktır. Bir yazılım projesinin kaynak kodu, hesapları ve belgeleri baştan sizin adınıza durur. Böylece bir gün yollarımız ayrılsa bile başka bir ekiple yola rahatça devam edebilirsiniz. Sistemin nasıl kurulduğunu, nerede çalıştığını ve nasıl güncelleneceğini yazılı olarak anlatıyoruz. Gereksiz karmaşık bir mimariyi bilerek üretmiyoruz; sade kod, sonraki geliştiricinin de anlayacağı koddur. Yönetim panelini ve günlük işleri kendi ekibinizin yürütebilmesi için kısa bir eğitim veriyoruz. Nevşehir’deki işletmenizin bize değil, sisteme sahip olmasını istiyoruz. Bağımlılık satmak yerine, işinizi kolaylaştıran bir araç bırakmayı doğru buluyoruz. Sahiplik netse, aramızdaki ilişki de sağlıklı yürür. Kendi sisteminize hakim olmanız, ileride vereceğiniz her kararı da özgürleştirir. Anahtarı elinde tutan taraf siz olduğunuzda, ilişki zorunluluğa değil güvene dayanır. Bir sistemin bütün anahtarlarını size teslim etmek, işimizi bitirdiğimizde arkamızda güvenle durabildiğimizin de açık bir göstergesidir.

Yayına aldıktan sonra sistemi kaderine terk etmiyoruz. Kullanımın ilk haftalarında yakın duruyor, çıkan küçük pürüzleri hızla gideriyoruz. İşletmeniz sistemi kullandıkça yeni ihtiyaçlar doğar; bunları bir istek listesinde toplayıp önceliklendiriyoruz. Her güncellemenin ne getireceğini ve neyi değiştireceğini önceden anlatıyoruz. Bakımı, arıza çıkınca koşulan bir iş değil, düzenli yapılan bir kontrol olarak kurguluyoruz. Kütüphane ve altyapı sürümlerini takip edip zamanı geldikçe güvenle yükseltiyoruz. Ölçüm araçlarıyla sistemin hangi kısmının yavaşladığını, nerede hata biriktiğini izliyoruz. Elimizdeki veriyle iyileştirmeleri tahmine değil somut kanıta dayandırıyoruz. Yaşayan bir sistemin düzenli bakımı, onu yıllarca ayakta tutan asıl yatırımdır. Küçük ama sürekli bakım, büyük ve pahalı çöküşleri baştan önler. İhmal edilen bir sistem, bir gün en yoğun anınızda sizi yarı yolda bırakır. Düzenli bakım ise sorunları, siz henüz fark etmeden çözülen küçük ve sıradan işlere dönüştürerek büyük çöküşleri baştan önler.

İşiniz büyüdükçe sistemin de onunla birlikte genişlemesini planlıyoruz. Bir yazılım ürünü hiçbir zaman gerçekten bitmez; ihtiyaçlar değiştikçe o da evrilir. Bu yüzden ilişkiyi tek seferlik bir alışveriş değil, süregiden bir ortaklık olarak kuruyoruz. Yeni bir modül eklerken var olan yapıyı bozmadan üzerine inşa ediyoruz. Kullanıcı sayınız arttığında performansı önceden ölçüp darboğazları bir önlem olarak açıyoruz. Sizden gelen fikirleri küçümsemiyoruz; sahayı en yakından bilen sizsiniz ve çoğu değerli özellik oradan doğar. Her adımda kararı sizinle paylaşıp yönü birlikte belirliyoruz. Teknik dili sadeleştirip seçenekleri anlaşılır biçimde sunuyoruz. Böylece sistem, işletmenizin yükünü hafifleten sadık bir araç olarak yanınızda kalır. Birlikte büyüyen bir sistem, işletmenizin değişen ihtiyaçlarına yıllarca ayak uydurur. Bugün attığımız her sağlam adım, yarının büyümesini daha az sancılı kılar. İyi kurulan bir ortaklıkta yazılan sistem, işletmenizin önünde bir engel gibi değil, yanında yürüyen bir yol arkadaşı gibi durur.

Proje Öncesi Sık Sorulan Konular

Gerekmez; elinizde böyle bir belgenin bulunmaması bir eksiklik değildir. Bugün işin nasıl yürüdüğünü, nerede tıkandığını ve değişince neyin farklı olmasını beklediğinizi anlatmanız başlangıç için yeter. Teknik şartnameyi bu konuşmaların ve birlikte incelediğimiz örnek kayıtların ardından biz hazırlayıp onayınıza sunuyoruz. Böylece ihtiyaç tam anlaşılmadan ekran tasarımına geçilmemiş olur.

Bunun cevabını, kullandığınız ürünün dışarıya ne kadar erişim tanıdığı belirler. Program adını ve paketinizi paylaştığınızda dokümanını inceleyip hangi bilgilerin okunabildiğini, hangilerinin güncellenebildiğini çıkarıyoruz. Sağlayıcıdan ek izin ya da farklı bir paket gerekiyorsa bunu da önceden söylüyoruz. Küçük bir deneme bağlantısıyla doğrulayamadığımız bir aktarımı teklife yazmıyoruz.

Evet. Örneğin satış siparişi girer, depo aynı kayıtta hazırlık bilgisini işaretler, muhasebe ise faturayı bağlar; her birim yalnızca kendi bölümünü düzenler. Sıra bir birimden diğerine geçtiğinde ilgili kişiye bildirim ulaşır ve kaydın hangi aşamada beklediği herkes için aynı biçimde görünür. Hangi bölümün hangi alanı göreceği daha projenin başında sizinle belirlenir.

Taşınabilecek olanla olmayanı dosyalarınızın içeriği belirler. Yıllar içinde sütunların anlamı değişmiş, bazı bilgiler not hücrelerine sıkışmış olabilir. Dosyalarınızdan bir kesit alıp yeni yapıdaki alanlarla eşleştiriyor, karşılığı bulunmayan bilgileri ayrıca işaretliyoruz. Bu tabloyu birlikte gözden geçirip neyin aynen taşınacağına, neyin elden geçirileceğine ve neyin arşivde kalacağına sizinle karar veriyoruz.

Eğitimin biçimini ve süresini teklif aşamasında sizinle birlikte belirliyoruz. Genel bir menü turu yerine her rolün kendi günlük işini deneme ortamında gerçek kayıtlarla baştan sona yapmasını yeğliyoruz. Sistem ayarlarını yönetecek kişiyle kullanıcı ekleme ve yetki tanımlama gibi konuları ayrıca ele alıyoruz. Kullanım başladıktan sonra karşılaşılan bir sorunun kime, hangi bilgilerle iletileceği de yazılı olarak paylaşılır.

Evet, ancak her yeni modülü tek başına ele alıyoruz. Örneğin sipariş takibine sonradan servis kayıtları eklemek istediğinizde müşteri tablosunun, yetki gruplarının ve raporların bundan nasıl etkileneceğine bakıyoruz; kimi zaman bir ayar yeterli olur, kimi zaman kapsamlı bir çalışma gerekir. Şube açmak ya da bayi ağı kurmak gibi bir planınız varsa bunu ilk görüşmede söylemeniz, altyapının baştan buna uygun kurulmasını kolaylaştırır.