Yazılım Projesine İhtiyaç Analiziyle ve Net Kapsamla Giriyoruz

Bir yazılım işine kod yazarak değil, sizi dinleyerek giriyoruz. Önce işletmenizin hangi işi elle, tabloyla ya da dağınık araçlarla yürüttüğünü anlıyoruz. Çözmek istediğiniz asıl sorunu bulmadan çözüm önermenin, yanlış şeyi güzelce yapmak olduğunu biliyoruz. Bu yüzden günlük işleyişinizi adım adım çıkarıyor, hangi noktada zaman ve emek kaybettiğinizi belirliyoruz. Mardin’deki ekibinizin alışkanlıklarını ve teknik seviyesini de hesaba katıyoruz, çünkü kullanılmayan bir program yatırım değil yüktür. İşi kimin başlattığını, kimin onayladığını ve kimin raporladığını tek tek çıkarıyoruz. En çok tekrar eden ve en çok hata yapılan adımları işaretliyoruz. Kimin hangi ekranı, ne sıklıkla kullanacağını konuşuyoruz. Hazır bir çözümün yeterli olduğu yerde sıfırdan geliştirme önermiyoruz. Görüştüğümüz her kişiye aynı soruları soruyor, işin farklı bakış açılarını yan yana koyarak yalnız yöneticinin değil sahadaki çalışanın da gerçeğini görüyoruz. Amacımız gösterişli bir arayüz değil, işinizi gerçekten hafifleten bir araç kurmak.
İhtiyaçları anladıktan sonra yazılım kapsamını yazılı bir belgeye döküyoruz. Bu belgede hangi özelliklerin ilk sürümde yer alacağını, hangilerinin sonraya kalacağını tek tek sıralıyoruz. Her isteği aynı anda yapmaya çalışmanın projeyi yavaşlattığını ve maliyeti şişirdiğini deneyimlerimizden biliyoruz. Bu yüzden özellikleri işinize kattığı değere göre önceliklendiriyoruz. Olmazsa olmaz olanları ve sonra gelebilecek olanları ikiye ayırıyoruz. İlk aşamaya yalnızca işi yürüten çekirdek işlevleri koyuyoruz. Kapsamı birlikte imzaladığımız bu belge, ilerleyen haftalarda sonradan akla gelen eklemelerin yarattığı belirsizliği baştan önlüyor. Yeni bir fikir çıktığında onu kapsam dışı saymak yerine, bir sonraki aşamanın adayı olarak not ediyoruz. Değerini ölçemediğimiz hiçbir özelliği listeye eklemiyoruz. Belgeyi sade bir dille yazıyor, teknik olmayan ekip üyelerinin de okuyup onaylayabilmesini sağlayarak kapsamı herkesin anladığı ortak bir metne dönüştürüyoruz. Böylece hem bütçe hem takvim öngörülebilir kalıyor, sürprizlerle karşılaşmıyorsunuz.
Kapsam belli olunca projeyi küçük ve teslim edilebilir parçalara bölüyoruz. Her parçanın ne zaman biteceğini, hangi sırayla geleceğini bir takvime bağlıyoruz. Böylece aylarca hiçbir şey görmeden beklemek yerine, ilerlemeyi düzenli aralıklarla kendi gözünüzle görüyorsunuz. Maliyeti hangi kalemlerin oluşturduğunu açıkça gösteriyor, gizli bir masraf bırakmıyoruz. Sizden hangi bilgiyi, içeriği veya kararı ne zaman beklediğimizi de baştan söylüyoruz. İşin bir kısmı sizin ekibinize düşüyorsa, bunu da rollerle netleştiriyoruz. Tahminleri geniş tutup beklenmedik durumlar için pay bırakıyoruz. Her parçanın bittiğini nasıl anlayacağımızı ölçülebilir biçimde tanımlıyoruz. Riskli gördüğümüz parçaları öne alıp belirsizliği erken çözüyoruz. Her parçayı ayrı teslim ettiğimiz için ödeme planını da bu parçalara bağlıyor, ödemeyi ancak çalışan bir çıktı gördüğünüzde istiyoruz. Bu planlama, teknik bir ayrıntı gibi görünse de projenin zamanında ve bütçe içinde bitmesini belirleyen asıl etken oluyor.

İlk Sürümü Küçük Tutup Geliştirmeyi Adım Adım Sürdürüyoruz

Geliştirmeye, her şeyi kapsayan dev bir sürümle değil, işinizin çekirdeğini çözen küçük bir ilk sürümle başlıyoruz. Bu yaklaşımda yazılım erkenden çalışır hale geliyor ve siz onu gerçek işte deneyebiliyorsunuz. Kağıt üzerinde harika görünen bir özelliğin, sahada işe yaramadığını çoğu zaman ancak kullanınca fark ediyoruz. Erken sürüm, bu tür yanlışları ucuzken düzeltme fırsatı veriyor. İlk sürümde en çok ihtiyaç duyduğunuz işlevleri topluyor, süsleri sonraya bırakıyoruz. Kısa aralıklarla yaptığımız görüşmelerde ilerlemeyi birlikte değerlendiriyoruz. Beklentiyle sonucun ayrıştığı noktaları hemen not edip yönü düzeltiyoruz. Sizden gelen ilk izlenimleri dikkatle dinliyor, yön değişikliğini geç değil erken yapıyoruz. Böylece hatalı bir varsayımın üzerine aylar harcamıyoruz. İlk sürümü gerçek verilerle deniyor, kağıt üzerinde hiç görünmeyen darboğazları erkenden bulup düzeltmenin çok daha ucuz olduğunu deneyimliyoruz. Her aşamada elinizde çalışan bir parça oluyor.
İlk sürümün üzerine özellikleri tek tek, kontrollü biçimde ekliyoruz. Her yeni parçayı yayına almadan önce ayrı bir ortamda deniyor, çalışan sistemi bozmadan ilerliyoruz. Yazdığımız kodu düzenli aralıklarla test ediyor, hataları kullanıcı görmeden yakalamaya çalışıyoruz. Sık karşılaşılan hatalı girişleri, boş bırakılan alanları ve beklenmedik tıklamaları önceden düşünerek sisteme direnç kazandırıyoruz. Sık tekrar eden kontrolleri otomatik testlere bağlayıp insan hatasını azaltıyoruz. Deneme ve canlı ortamı birbirinden ayırıp riski sınırlıyoruz. Kod içinde ne yaptığımızı açıklayan notlar bırakıyor, ileride bakım yapacak kişinin işini kolaylaştırıyoruz. Her sürümü sizin de deneyebileceğiniz bir adrese kuruyor, geri bildiriminizi düzenli topluyoruz. Bulunan her hatayı bir listede izleyip çözülene kadar takip ediyoruz. Yaptığımız her değişikliği geri alınabilir biçimde kaydediyor, yanlış bir adım atıldığında sistemi bir önceki sağlam haline hızla döndürüyoruz. Böylece son teslimde büyük sürprizlerle değil, birlikte olgunlaştırılmış bir ürünle karşılaşıyoruz.
Bir aracın gücü kadar, kullanım kolaylığı da işinize doğrudan yansıyor. Ekranları, teknik bilgisi olmayan bir çalışanın bile birkaç denemede öğrenebileceği sadelikte tasarlıyoruz. Sık yapılan işleri ön plana çıkarıyor, nadir kullanılanları menülerin derinine yerleştiriyoruz. Hata mesajlarını suçlayıcı değil, yol gösterici bir dille yazıyoruz. Tekrarlanan işlemleri birkaç adıma indirip öğrenmeyi kolaylaştırıyoruz. Ekranların içine kısa ipuçları koyup kılavuza olan ihtiyacı azaltıyoruz. Ekibinize kısa bir kullanım eğitimi veriyor, en çok takıldıkları noktaları not alıp arayüzü buna göre sadeleştiriyoruz. Gereksiz tıklamaları azaltmak, günde yüzlerce kez yapılan bir işte ciddi zaman kazandırıyor. İlk günlerde ekibin yanında olup takıldıkları yerleri gideriyoruz. Ekranların düzenini, en çok yapılan işlemi en az tıklamayla bitirecek şekilde kurguluyor, günlük kullanımdaki küçük sürtünmeleri tek tek gideriyoruz. Amacımız, ekibinizin araca değil, kendi işine odaklanabilmesini sağlamak.

Entegrasyonları ve Güvenliği Baştan Tasarımın Parçası Yapıyoruz

Çoğu işletme birkaç farklı aracı aynı anda kullanıyor; bu yüzden yazılım projesini yalnız başına değil, mevcut düzeninizle birlikte düşünüyoruz. Muhasebe programınız, e-posta sisteminiz veya kullandığınız ödeme altyapısıyla konuşabilen bir yapı kuruyoruz. Bilginin bir yerden diğerine elle taşınması hem zaman kaybı hem de hata kaynağı oluyor; entegrasyon bu yükü ortadan kaldırıyor. Hangi sistemlerin bağlanacağını baştan belirliyor, her bağlantının güvenli ve izlenebilir olmasını sağlıyoruz. Dış bir servise bağlanırken oluşabilecek kesintileri de hesaba katıp yedek çözümler tasarlıyoruz. Sistemler arasında hangi bilginin hangi alana karşılık geldiğini önceden eşliyoruz. Bir bağlantı koptuğunda verinin kaybolmadan beklemesini sağlıyoruz. Bağlantıların çalışıp çalışmadığını düzenli olarak izleyip sorunları erken yakalıyoruz. Bağlanan sistemlerden gelen veriyi, kaydetmeden önce biçim ve tutarlılık açısından denetliyor, hatalı bir kaydın tüm zinciri bozmasını önlüyoruz. Böylece araçlarınız birbirinden kopuk adalar değil, tek bir akışın parçaları haline geliyor.
Güvenliği, iş bittikten sonra eklenen bir kilit gibi değil, tasarımın temel taşı gibi ele alıyoruz. Kullanıcıların yalnızca görmesi gereken bilgiye erişmesini sağlayacak yetki düzeyleri kuruyoruz. Şifreleri güvenli biçimde saklıyor, hassas verinin bağlantı sırasında şifreli taşınmasını sağlıyoruz. Sisteme girişte tanınan sık saldırı yöntemlerine karşı önlemleri baştan yerleştiriyoruz. Verilerin düzenli yedeğini alıyor, bir sorun anında hızlı geri dönüş için bu yedekleri deniyoruz. Kullanılan bileşenleri güncel tutup bilinen açıkları kapatıyoruz. Herkese en az yetkiyi verip gereksiz erişimleri kaldırıyoruz. Kimin ne zaman hangi işlemi yaptığını gösteren kayıtlar tutarak sorunların kaynağını izlenebilir kılıyoruz. Yeni bir açık duyulduğunda ilgili bileşeni vakit kaybetmeden güncelliyoruz. Önemli işlemlerde ikinci bir onay isteyerek yanlışlıkla yapılan silme ve değişiklikleri baştan engelliyor, geri dönüşü olmayan adımları koruma altına alıyoruz. Güvenliği sonradan yamanan bir eklenti değil, en baştan kurulan bir alışkanlık olarak görüyoruz.
Bir sistemi kurarken yalnız bugünü değil, işletmenizin büyüyen halini de düşünüyoruz. Kullanıcı sayısı arttığında ya da veri birikince yavaşlamayacak bir yapı tercih ediyoruz. Bugün küçük görünen bir tercihin, iki yıl sonra taşınması zor bir soruna dönüşebileceğini biliyoruz. Bu yüzden temel kararları esneklik gözeterek alıyor, ileride yeni özellik eklemeyi kolaylaştırıyoruz. Sistemin sağlığını gösteren ölçümleri baştan yerleştiriyor, bir tıkanıklık oluşmadan önce fark ediyoruz. Yükü ve hataları gösteren uyarıları önceden kuruyoruz. Bir sorun büyümeden haber alıp erken müdahale ediyoruz. Verilerinizin nasıl saklandığını ve nasıl yedeklendiğini şeffaf biçimde paylaşıyoruz. Yoğun dönemlerde kaynakları artırmanın yolunu baştan hazırlıyoruz. Büyüme anında hangi bileşenin zorlanacağını önceden kestiriyor, bugünden ölçeklenebilir bir temel seçerek ileride baştan yazma zorunluluğunu ortadan kaldırıyoruz. Böylece kurduğumuz araç, işletmeniz büyüdükçe sizi yeni bir arayışa itmiyor.
Kaynak Kodu ve Veri Sahipliğini Size Bırakıyoruz
Teslimde en çok önem verdiğimiz konu sahiplik oluyor; kurduğumuz yazılım artık sizin malınız, kaynak kodunu eksiksiz teslim ediyoruz. Kod, işletmenizin varlığı olarak sizde kalıyor, dilediğiniz zaman başka bir ekiple yola devam edebiliyorsunuz. Bu, sizi tek bir tedarikçiye mahkûm etmeyen, kontrolü elinizde tutan bir yaklaşım. Kodu düzenli tutuyor, bir başkasının okuyup anlayabileceği biçimde belgeliyoruz. Sistemin nerede çalıştığını, hangi bileşenlere dayandığını gösteren bir kurulum rehberi hazırlıyoruz. Kullandığımız açık kaynak bileşenlerin lisanslarını da açıkça listeliyoruz. Kurulum adımlarını, bir başkasının tekrar edebileceği biçimde yazıyoruz. Giriş bilgilerini ve hesapları sizin adınıza açıyor, size devrediyoruz. Verilerinizi istediğiniz an dışarı aktarabileceğiniz bir yol da bırakıyoruz. Teslim paketine, projeyi bir başka ekibin sorunsuz devralması için gereken tüm belgeleri, şemaları ve hesap bilgilerini eksiksiz koyuyoruz. Sahipliğin açık olması, uzun vadede sizi pazarlık masasında güçlü kılıyor.
Bir sistem teslim edildiği anda bitmiyor; kullanıldıkça yeni ihtiyaçlar ve küçük aksaklıklar ortaya çıkıyor. Bu yüzden teslim sonrası için net bir bakım planı sunuyoruz. Düzenli güncellemeleri, güvenlik yamalarını ve yedek kontrollerini bir takvime bağlıyoruz. Bir sorun bildirdiğinizde nasıl ve ne kadar sürede yanıt vereceğimizi baştan yazıyoruz, böylece zor anda belirsizlik yaşamıyorsunuz. Hangi sorunun ne kadar sürede çözüleceğini yazılı olarak belirliyoruz. Acil durumlar için ayrı bir iletişim yolu bırakıyoruz. Küçük düzeltmeleri hızla çözüyor, yeni özellik isteklerini ayrı bir plana alıyoruz. Sistemin performansını belirli aralıklarla ölçüp yavaşlama başlamadan önlem alıyoruz. Mardin’deki ekibinizin değişen ihtiyaçlarına göre planı birlikte güncelliyoruz. Bakım kayıtlarını sizinle düzenli paylaşıyor, yapılan her işlemin neden gerektiğini açıklayarak harcanan zamanın nereye gittiğini şeffaf biçimde gösteriyoruz. Bakımı bir masraf kalemi değil, yatırımınızı koruyan bir sigorta gibi konumlandırıyoruz.
Sürecin sonunda, ekibinizin sistemi bize ihtiyaç duymadan kullanabilmesini istiyoruz; iyi bir yazılım işi, bağımlılık değil bağımsızlık bırakır. Bu yüzden yalnızca ürünü değil, onunla ilgili bilgiyi de devrediyoruz. Kullanım kılavuzunu sade bir dille yazıyor, en sık yapılan işlemleri örneklerle gösteriyoruz. Kısa videolar ve ekran görüntüleriyle desteklenen bir kılavuz hazırlıyoruz. Teknik ekibiniz varsa onlarla ayrı bir oturum yaparak kodun mantığını anlatıyoruz. Hangi durumda hangi ayarın değiştirileceğini önceden not düşüyoruz. Yeni katılan çalışanların da hızlıca uyum sağlamasını kolaylaştırıyoruz. İleride birlikte yeni bir aşamaya geçmek isterseniz kapımız açık kalıyor, ancak bu bir zorunluluk değil tercih oluyor. Devir sırasında bütün soruları yanıtlayıp hiçbir konuyu havada bırakmıyoruz. Eğitim sonunda kısa bir değerlendirme yapıyor, ekibin hangi konuda desteğe ihtiyacı olduğunu görüp o başlıkları ikinci bir oturumda pekiştiriyoruz. Böylece geriye, işletmenizin gerçekten sahip olduğu ve yönetebildiği bir araç kalıyor.

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

Hazır bir çözüm çoğu ihtiyacı karşılıyorsa onu zorlamak gerekmez. Ayrım, işin kendine özgü kuralları paketin sınırlarını zorlamaya başladığında ortaya çıkar. Eldeki kaynakları, kullanım sıklığını ve ekibin taşıyabileceği sorumluluğu birlikte değerlendirir; ancak gerçekten fark yaratacaksa baştan geliştirmeyi öneririz.
Genellikle gerekmez. Bir özel yazılım en sağlıklı biçimde, günlük işi taşıyan çekirdek bir sürümle başlayıp gerçek kullanımdan gelen geri bildirimle büyür. Önce hangi işlevin işi durdurduğunu belirler, ilk sürümü bunun üzerine kurarız; ikincil ihtiyaçları ise kullanım netleştikçe sıraya alırız.
Çoğu durumda taşınabilir, ancak taşımadan önce verinin ne kadar düzenli tutulduğuna bakmak gerekir. Dağınık ya da tekrar eden kayıtları olduğu gibi aktarmak, sorunu yeni sisteme de taşır. Bu yüzden önce veriyi sadeleştirir, hangi geçmişin gerçekten gerekli olduğunu birlikte kararlaştırır, sonra kontrollü biçimde aktarırız.
Evet, yetkiler işin değişen ihtiyacına göre düzenlenebilir olmalıdır. Bir çalışanın görevi değiştiğinde ya da yeni bir rol gerektiğinde sistemin bunu baştan kurulmak zorunda kalmadan karşılaması beklenir. Yetki yapısını en baştan esnek tasarlar, her değişikliğin kim tarafından ve ne zaman yapıldığını kayda alırız.
Her işin mobil bir uygulamaya ihtiyacı yoktur; belirleyici olan işin nerede yapıldığıdır. Bir özel yazılım, kullanıcı çoğunlukla masabaşındaysa telefonda çalışan sade bir arayüzle de yeterli olabilir. Sahada geçen işlerde ise mobil kullanım zorunlu hâle gelir. Kararı, ekibin gerçek çalışma biçimine bakarak veririz.
Bakım, çalışan bir sistemin düzgün işlemeye devam etmesini sağlayan işlerdir; bir hatayı gidermek ya da bir güncellemeye uyum sağlamak gibi. Yeni geliştirme ise sisteme daha önce olmayan bir yeteneği eklemektir. İkisini baştan ayırır, hangi talebin hangi kapsama girdiğini birlikte netleştirir; böylece hem beklenti hem de sorumluluk belirsiz kalmaz.