Yazılım Projesini İşinizin Gerçek İhtiyacından Başlatıyoruz

Bir işletmeye özel geliştirilen çözümler, hazır bir programın karşılayamadığı kendine has ihtiyaçlar ortaya çıktığında değer kazanır. Bu yüzden yazılım projesine kod yazarak değil, işinizin nasıl döndüğünü dinleyerek başlıyoruz. Hangi işi kolaylaştırmak, hangi tekrarı ortadan kaldırmak ya da hangi hatayı önlemek istediğinizi tek tek konuşuyoruz. Çoğu zaman asıl sorun, ilk söylenenin arkasında saklı olan bir sürecin darboğazıdır. Uşak’ta üretim ya da hizmet veren işletmelerle çalışırken, sahanın gerçeğini masaya getirmeden yazılan hiçbir çözümün tutmadığını gördük. Mevcut düzeninizi, kullandığınız tabloları ve insanların gündelik alışkanlıklarını yakından inceliyoruz. Bir yöneticinin gördüğü ihtiyaçla, işi fiilen yapan çalışanın yaşadığı zorluğun çoğu zaman farklı olduğunu da hesaba katıyoruz. İlk toplantıdan çıkarken elimizde, çözülecek sorunların ve beklenen faydaların ortak bir listesi oluyor; bu liste sonraki her kararın ölçüleceği bir pusula işlevi görür. Amacımız, size gösterişli bir arayüz değil, günlük işinizi somut biçimde hafifleten bir araç kurmaktır.

İhtiyacı anladıktan sonra kapsamı netleştiriyoruz; yani neyin bu ilk aşamada yapılacağını, neyin sonraya bırakılacağını açıkça yazıyoruz. Kapsamı baştan sınırlamak, projenin sonu gelmeyen bir listeye dönüşmesini önleyen en kritik adımdır. Her istek değerli olsa da, hepsini aynı anda yapmaya çalışmak hem bütçeyi hem takvimi zorlar. Bu yüzden isteklerinizi önem ve aciliyet sırasına koyup birlikte önceliklendiriyoruz. Hangi özelliğin işinize ne kadar zaman ya da para kazandıracağını somutça tartışıyoruz. Belirlediğimiz kapsamı yazılı bir belgeye bağlıyor, ilerleyen haftalarda ortaya çıkan yeni fikirleri de bu belgeye düzenli biçimde ekliyoruz. Sonraki aşamaya bırakılan istekleri unutmuyor, ayrı bir başlıkta not ederek ileriki sürümlere hazırlıyoruz. Böyle bir ayrım, bugünün işini yarının hayalleriyle karıştırmamızı önler ve bütçenizi dağılmaktan korur. Kapsamı yazılı tutmak, ileride çıkabilecek anlaşmazlıkların da önünü baştan kesiyor. Böylece herkes neyin sözünün verildiğini bilir ve süreç sürprizsiz ilerler.

Kapsam belli olunca işin nasıl yapılacağına dair bir yol haritası çıkarıyoruz. Yazılım geliştirme, tek bir kişinin kafasındaki fikir değil, üzerinde konuşulabilen ortak bir plana dönüşmelidir. Ekranların kabaca nasıl görüneceğini, verinin nasıl akacağını ve hangi adımın hangi adıma bağlı olduğunu birlikte çiziyoruz. Bu taslaklar sayesinde, henüz tek satır kod yazılmadan yanlış anlaşılmaları yakalıyoruz. Sizin onayınızı almadan bir sonraki aşamaya geçmiyor, her kararın arkasındaki gerekçeyi paylaşıyoruz. Kâğıt üzerinde bir ekranı değiştirmek dakikalar alırken, aynı değişikliği bitmiş üründe yapmak günlere mal olabilir. Planı yaparken en riskli ve en belirsiz kısımları öne alıyoruz, çünkü kötü sürprizleri erken görmek her zaman daha ucuza gelir. Böylece belirsizlik azaldıkça takvim de netleşir. Böyle bir hazırlık, projenin ortasında çıkan pahalı değişiklikleri en aza indirir. İyi düşünülmüş bir plan, geliştirme aşamasını hem hızlandırır hem de daha huzurlu kılar.

İlk Çalışan Sürümü Erken Çıkarıp Aşama Aşama Geliştiriyoruz

Geliştirmeye, işe yarayan küçük bir ilk sürüm ortaya koyarak giriyoruz. Yazılım süreci, aylarca kapalı kapılar ardında çalışıp sonunda kocaman bir paket teslim etmek yerine, işleyen parçaları erkenden görmenize dayanır. İlk sürüm, işinizin en kritik ihtiyacını karşılayan çekirdek özelliği içerir. Bunu elinize aldığınızda, gerçek kullanımda neyin işe yaradığını ve neyin değişmesi gerektiğini çok daha net görürsünüz. Erken geri bildirim, yanlış yolda uzun süre yürümenin önüne geçer. Küçük başlamak, yaptığınız yatırımın karşılığını görmek için ayları beklememenizi de sağlar. Her yeni parçayı bu çekirdeğin üzerine ekleyerek ilerliyor, her adımda çalışan bir ürün elde etmeye özen gösteriyoruz. İlk sürümden aldığımız derslerle sonraki adımları daha isabetli planlıyoruz. Öncelik listemizi de her sürümden sonra sizinle birlikte gözden geçiriyoruz. Böylece proje soyut bir vaat olmaktan çıkıp elle tutulur bir araca dönüşür.

Geliştirme ilerlerken düzenli aralıklarla size çalışan sürümleri gösteriyoruz. Bu buluşmalarda ne yaptığımızı anlatıyor, sizden gelen görüşleri bir sonraki adıma katıyoruz. Kodu yazarken okunabilir ve sonradan kolayca geliştirilebilir olmasına özen gösteriyoruz; çünkü bugün hızlı ama dağınık yazılan bir kod, yarın herkesin başına dert olur. Yaptığımız her önemli bölümü otomatik testlerle koruma altına alıyoruz, böylece yeni bir ekleme eski bir özelliği sessizce bozduğunda hemen fark ediyoruz. Hataları kullanıcıdan önce biz bulmak için sürümü farklı senaryolarla deniyoruz. Gerçek verilerle ve gerçek kullanıcı davranışlarıyla test etmek, laboratuvar koşullarında görünmeyen sorunları ortaya çıkarır. Her sürümü nasıl kurduğumuzu ve neyi değiştirdiğimizi de kayıt altında tutuyoruz. Bulduğumuz her hatayı, aynı hatanın tekrar etmemesi için bir testle kalıcı olarak kapatıyoruz. Böylece ürün olgunlaştıkça güven veren bir sağlamlığa kavuşuyor. Sağlam bir ürün, tesadüfen değil, bu düzenli sınamayla ayakta kalır.

Test aşamasını ayrı bir formalite olarak değil, geliştirmenin ayrılmaz parçası olarak görüyoruz. Her yeni özellik yayına çıkmadan önce, hem biz hem de dilerseniz sizin ekibiniz onu gerçek koşullarda deneriz. Beklenmedik girişlerde, zayıf bağlantıda ve yoğun kullanımda sistemin nasıl davrandığını gözlemliyoruz. Bulduğumuz sorunları önem sırasına koyup açıkça listeliyor, hangisinin ne zaman çözüleceğini sizinle paylaşıyoruz. Bir sorunu gizlemek yerine, nedenini ve çözümünü şeffaf biçimde anlatmayı ilke ediniyoruz. Yayına almadan önce verilerin güvenli biçimde yedeklendiğinden ve gerektiğinde geri dönüşün mümkün olduğundan emin oluyoruz. Yeni sürümü aşamalı yayınlayarak olası bir aksaklığın etkisini sınırlı tutuyoruz. Kritik işlemlerde, bir aksama olduğunda sistemin kendini güvenli bir duruma çekmesini sağlıyoruz. Kullanıcıya anlaşılır hata mesajları göstererek onu çıkmaz sokakta bırakmıyoruz. Bu sabırlı sınama, ürünü kullanıma açtığımızda içinizin rahat olmasını sağlar.

Entegrasyonları ve Güvenliği En Baştan Tasarıma Katıyoruz

Çoğu işletmenin ihtiyacı, tek başına duran bir araç değil, var olan düzenle konuşabilen bir çözümdür. Bu yüzden entegrasyonları en baştan tasarımın içine yerleştiriyoruz. Kullandığınız muhasebe programı, e-ticaret siteniz ya da kargo sisteminiz varsa, bunlarla veri alışverişini otomatikleştiriyoruz. Elle yapılan kopyala yapıştır işlerini ortadan kaldırmak, hem zaman kazandırır hem de insan kaynaklı hataları azaltır. Bir sistemden diğerine bilginin doğru ve gecikmesiz akması için bağlantıları özenle kuruyoruz. Dışarıdaki bir servis değiştiğinde bağlantının kırılmaması için esnek ve dayanıklı bir yapı tercih ediyoruz. Bir bağlantı geçici olarak koptuğunda verinin kaybolmaması için güvenli bir bekleme düzeni kuruyoruz. Hangi bilginin nereye ve hangi sıklıkta aktarılacağını baştan belirleyip gereksiz yükü ortadan kaldırıyoruz. Bir entegrasyon eklerken var olan düzeni bozmamaya özel bir önem veriyoruz. Böylece farklı araçlar tek bir düzenin uyumlu parçaları gibi birlikte çalışır.

Güvenliği sonradan eklenen bir kilit gibi değil, yazılım mimarisinin temel bir katmanı olarak ele alıyoruz. Kullanıcı bilgilerini ve işletme verilerinizi korumak için erişimi yetkilere göre sınırlıyor, herkesin yalnızca kendi işini görmesini sağlıyoruz. Şifreleri güvenli biçimde saklıyor, hassas verilerin şifreli kanallardan aktarılmasına dikkat ediyoruz. Sisteme kimin ne zaman ne yaptığını kaydeden izler bırakıyoruz; bir sorun çıktığında geriye dönüp bakabilmek çok önemlidir. Düzenli yedekleme ve kötü niyetli girişlere karşı temel korumalar, veri kaybı riskini ciddi biçimde azaltır. Güvenlik açıklarını kapatmak için kullandığımız bileşenleri güncel tutuyoruz. Çalışanlarınıza da basit güvenlik alışkanlıklarını hatırlatarak zincirin en zayıf halkasını güçlendiriyoruz. Yetki değişikliklerini ve önemli işlemleri de bu kayıtlar üzerinden izlenebilir kılıyoruz. Güvenliği bir kez kurup unutmuyor, belirli aralıklarla yeniden gözden geçiriyoruz. Bir işletmenin verisi, çoğu zaman en değerli varlığıdır ve ona göre davranıyoruz.

Bir sistemin gücü, yalnızca bugün ne yaptığıyla değil, yarın ne kadar kolay değişebildiğiyle de ölçülür. Bu yüzden çözümü, ileride yeni ihtiyaçlar çıktığında büyüyebilecek biçimde kuruyoruz. Kullanıcı sayısı arttığında ya da iş hacminiz genişlediğinde sistemin tıkanmaması için altyapıyı buna göre planlıyoruz. Her bölümü olabildiğince bağımsız tasarlıyoruz, böylece bir parçayı değiştirmek diğerlerini riske atmıyor. Yaptığımız işi anlaşılır belgelerle kayıt altına alıyor, hangi kararın neden verildiğini yazıya döküyoruz. Bu belgeler sayesinde ileride projeye katılacak herkes, sistemin nasıl çalıştığını hızla kavrayabilir. Kod içine bıraktığımız açıklamalarla da bakımı üstlenecek kişinin işini kolaylaştırıyoruz. Yeni bir ihtiyaç geldiğinde sıfırdan başlamak yerine mevcut yapıya sağlıklı biçimde ekleyebilmeyi hedefliyoruz. Bu esneklik, uzun vadede size hem zaman hem para kazandırır. Değişime hazır bir yapı, işletmenizin yarınki fırsatları kaçırmamasını da sağlar. Kısacası bugünü çözerken yarının da yolunu tıkamadan ilerlemeye çalışıyoruz.

Kaynak Kodu ve Veri Sahipliğini Bütünüyle Size Bırakıyoruz

Bir ürün yayına girdikten sonra da yaşamaya devam eder; bu yüzden yazılım bakımını işin doğal bir parçası sayıyoruz. Kullanıcılardan gelen geri bildirimleri topluyor, ortaya çıkan hataları hızla gideriyoruz. İşletmeniz büyüdükçe ya da süreçleriniz değiştikçe, sistemin de bu değişime ayak uydurması gerekir. Küçük iyileştirmeleri düzenli olarak yaparak ürünün zamanla eskiyip kullanılmaz hale gelmesini önlüyoruz. Kullandığımız bileşenlerin güncellemelerini takip ediyor, uyum sorunlarını daha büyümeden çözüyoruz. Hangi işlerin bakım kapsamında olduğunu ve hangi durumda ne kadar sürede döneceğimizi baştan açıkça belirliyoruz. Böylece bir sorun çıktığında kime ve nasıl ulaşacağınızı bilirsiniz. Bakım sırasında yaptığımız her değişikliği kayıt altına alıyor, geriye dönük izlenebilirliği koruyoruz. Böylece yıllar sonra bile sistemin neden öyle davrandığını açıklayabiliyoruz. Sürdürülebilir bir ürün, ilk teslimle değil, sabırlı ve düzenli ilgiyle uzun ömürlü olur.

Bakımı, sizi kendimize bağlayan gizli bir düğüm olarak kurgulamıyoruz. Tam tersine, dilerseniz kendi ekibinizin de sürdürebileceği açık ve anlaşılır bir düzen bırakıyoruz. Sistemin nasıl çalıştığını, nasıl güncelleneceğini ve olası sorunlarda nereye bakılacağını belgelerle anlatıyoruz. Gerektiğinde ekibinize kısa bir eğitim vererek gündelik işleri kendi başınıza yürütmenizi sağlıyoruz. Bir sorun çıktığında sizi teknik terimlerle boğmadan, anlaşılır bir dille durumu açıklıyoruz. Acil durumlar için nasıl bir öncelik sırası izlediğimizi de baştan konuşuyoruz. Sizden habersiz hiçbir köklü değişiklik yapmıyor, her adımı onayınıza sunuyoruz. Kullandığımız araçları ve şifreleri de sizinle paylaşıyor, hiçbir kapıyı yalnızca bize açık bırakmıyoruz. Böylece dilediğiniz an başka bir ekiple yolunuza devam edebilirsiniz. Böyle bir açıklık, aramızdaki güveni de somut biçimde pekiştirir. Amacımız, güçlü ama sizi çaresiz bırakmayan, kontrolü elinizde tutan bir ilişki kurmaktır.

En çok önem verdiğimiz konulardan biri, ortaya çıkan yazılım ürününün ve verinin sahipliğidir. Geliştirdiğimiz kaynak kodunu eksiksiz biçimde size teslim ediyor, tüm hesapların sizin adınıza açıldığından emin oluyoruz. Verileriniz sizindir; istediğiniz an dışa aktarabilmeniz ve başka bir yere taşıyabilmeniz için gerekli yolları hazır bırakıyoruz. Bizimle çalışmayı sürdürmek ya da başka bir ekiple devam etmek tamamen sizin kararınızdır. Uşak’ta kurduğumuz iş ilişkilerinde, güvenin ancak bu şeffaflıkla kalıcı olduğunu defalarca gördük. Hiçbir kritik bilgiyi kendi tekelimizde tutmuyor, sizi teknik olarak rehin alacak kapalı kutular bırakmıyoruz. Teslim sırasında tüm belgeleri, şifreleri ve erişim bilgilerini derli toplu biçimde elinize veriyoruz. Teslimden sonra da sorularınız olursa, kısa bir geçiş döneminde yanınızda olmayı sürdürüyoruz. Bize göre iyi bir çözüm, işletmesini özgür bırakan, ona bağımlılık dayatmayan çözümdür.

Geliştirme Başlamadan Önce Açıklığa Kavuşan Sorular

İlk görüşme için böyle bir belge şart değildir. Kullandığınız tabloları, işin geçtiği aşamaları ve en çok zorlandığınız noktaları göstermeniz başlamak için yeterlidir; paylaşacağınız örneklerde gereksiz kişisel bilgileri çıkarmanız yerinde olur. Görüşmenin ardından modüller, kullanıcı rolleri ve beklenen davranışlar birlikte yazıya dökülür. Teknik ayrıntıların tümünü önceden bilmeniz beklenmez; geliştirme başlamadan önce teslim edilecek işin iki tarafça da aynı biçimde anlaşılması yeterlidir.

Eş zamanlı kullanım, kaydın önemine ve üzerinde yapılan işleme göre değerlendirilir. Bir kişinin yaptığı değişikliğin diğerinin bilgisinin üzerine yazılması ya da aynı onayın iki kez verilmesi gibi durumları önceden ele alırız. Uygun yerde güncel kayıt uyarısı, belirli bir aşamada düzenleme kısıtı veya değişiklik geçmişi devreye girebilir; her alana aynı yöntem uygulanmaz. Geliştirme sırasında ilgili rollerle örnek senaryolar deneyerek sonucun beklediğiniz işleyişe uyup uymadığını birlikte kontrol ederiz.

Önce o programın resmi bağlantı ve dışa aktarma olanaklarını inceleriz. Sağlayıcının sunduğu bir arayüz olabilir ya da belirli kayıtlar dosya biçiminde aktarılabilir; kullanım yetkileri, veri biçimi ve güncelleme sıklığı seçenekleri belirler. Doğrudan bağlantı uygun değilse kontrollü dosya aktarımı gibi yolları değerlendiririz. Karşı sistemin gerçekte desteklemediği bir özelliği varmış gibi söz vermek yerine, hangi bilginin ne zaman taşınabileceğini olduğu gibi açıklarız.

Hayır; hangi kaydın yeni işleyişte gerçekten gerektiğini birlikte belirleriz. Açık işler, güncel müşteri bilgileri ve kullanımda olan ürünler çoğu zaman yeterli bir kapsam oluşturur. Yalnızca geçmişte tutulduğu için bütün veriyi taşımak, gereksiz bir yük ve uzun bir temizlik işi doğurabilir. Arşivde kalacak bilgiyle uygulamada kullanılacak veriyi ayırır, tam geçişten önce bir deneme yaparak eksik alanları ve hatalı eşleşmeleri görürüz.

Önce talebin, mevcut kapsamda tarif edilmiş davranışla ilişkisini inceleriz. Kararlaştırılmış bir işlemin hatalı çalışması ile yepyeni bir onay adımı eklemek aynı şey değildir; ihtiyacı ilgili iş örneği üzerinden anlatmanız bu ayrımı doğru yapmamıza yardımcı olur. Yeni bir geliştirme gerekiyorsa etkilenen modülleri, testleri ve bağlantıları belirler, süre ile bütçeye etkisini paylaşırız. Bir özel yazılım çalışmasında değişiklik kararının yazılı tutulması, hem ilk teslimin kapsamının hem de sonradan eklenen işlerin ayrı ayrı izlenmesini sağlar.

Üzerinde anlaştığımız teslim kapsamında kaynak kod, veritabanı ve sunucu erişimleri işletmeye devredilir. Kullanılan bileşenlerin ve gerekli hesapların düzenli biçimde sunulması, başka bir ekibin projeyi incelemesini kolaylaştırır; dış servis hesapları ve lisans koşulları ayrıca açıklanır. Teknik devir ile günlük kullanım eğitimi farklı ihtiyaçlardır, ikisini de teslim düzeninde ele alırız. Bir özel yazılım tesliminin ardından yeni ekibin kurulumu, yedeği ve çalışma yapısını anlayabilmesi için gereken notları paylaşır; bakım ya da yeni geliştirme sorumluluğunu ise tarafların anlaştığı kapsama bırakırız.