Yazılım Projesine İşinizin Gerçek Darboğazını Bularak Yön Veriyoruz

Yeni bir yazılım işine oturduğumuzda ilk yaptığımız şey klavyeye dokunmak değil, sizi uzun uzun dinlemek oluyor. Çoğu işletme aslında bir program değil, kendisini yavaşlatan bir sorunun ortadan kalkmasını istiyor; bizim ilk işimiz o sorunu doğru adlandırmak. Hangi işin sizi en çok oyaladığını, hangi hatanın sürekli tekrar ettiğini ve gün içinde en çok neyin vakit yediğini birlikte masaya yatırıyoruz. Bazen ortaya çıkan ihtiyaç, baştan hayal edilenden çok daha küçük ve keskin bir araç oluyor. Bu konuşma, gereksiz özelliklere para harcamanızı daha ilk günden önlüyor. İşi kâğıt üzerinde anlamadan ekrana geçmenin sonu, çoğu zaman kimsenin açmadığı pahalı bir program oluyor. Rize’deki küçük bir atölyeyle de büyük bir firmayla da aynı soruyla başlıyoruz: bu araç, hangi işi elle yapmaktan sizi kurtaracak. Yanıtı net olmayan hiçbir özelliği baştan listeye almıyoruz. Doğru teşhis, tıpkı hekimlikte olduğu gibi tedavinin yarısını baştan halletmiş oluyor ve geri kalan işi de belirgin biçimde kolaylaştırıyor.
İhtiyacı anladıktan sonra kapsamı yazıya döküyoruz, çünkü konuşulan ama yazılmayan her şey ilerleyen haftalarda tartışmaya dönüşüyor. Hangi ekranların olacağını, hangi bilgilerin gireceğini ve sistemin kimlerin elinde çalışacağını tek tek belirliyoruz. Bu belge sonradan çıkacak fazladan istekleri engellemiyor; onları düzenli ve öncelikli bir sıraya koyuyor. Böylece bütçeniz belirsiz bir kuyuya değil, sınırları belli bir listeye akıyor. Kapsamı birlikte onayladığımızda ikimiz de aynı resmi görüyoruz ve yol boyunca çıkacak sürprizler en aza iniyor. İşin sonunda beklentinin tutmadığı o kötü anı yaşamamak için, en sıkıcı ayrıntıyı bile baştan konuşmayı tercih ediyoruz. Yazılı bir kapsam ayrıca kimin neyden sorumlu olduğunu da açıkça netleştiriyor. Net çizilmiş bir çerçeve, hem sizi hem bizi tek bir ortak hedefte tutuyor. Kapsam belgesi, ilerleyen aylarda ortaya çıkan görüş ayrılıklarında elimizde somut bir dayanak bırakıyor ve tartışmayı kişiselleşmeden çözüyor.
Kapsamı belirlerken bir yazılım kurgusunun sizin mevcut düzeninize oturmasına özellikle dikkat ediyoruz. Yeni araç, çalışanlarınızın alışık olduğu akışı tepetaklak ediyorsa, ne kadar gelişmiş olursa olsun bir kenarda tozlanıyor. Bu yüzden işin şu anda nasıl yürüdüğünü yerinde izliyor, hangi adımın makineye hangisinin insana kalacağını ayırıyoruz. Ayrıca sistemin ileride büyümeye ne kadar açık olması gerektiğini de baştan konuşuyoruz. Bugün beş kişilik bir ekip için kurulan araç, yarın iş ikiye katlandığında altında ezilmemeli. Kapsamı hem bugünkü ihtiyaca hem de yakın geleceğe göre birlikte ölçüyoruz. Fazla iddialı kurgular çoğu zaman hiç bitmezken, ölçülü tutulan bir plan zamanında teslim ediliyor. Böylece kısa sürede sökülüp atılan değil, yıllarca yanınızda kalan bir çözüm ortaya çıkıyor. Ölçüyü kaçırmadan tasarlanan bir sistem hem daha çabuk teslim ediliyor hem de kullanıcıyı ilk günden yormadan işine yarıyor.

İlk Sürümü Küçük Tutup En Kritik İhtiyacı Çözüyoruz

Kapsam netleşince hemen her şeyi birden yapmaya kalkmıyoruz. Sağlıklı bir yazılım süreci, önce en kritik ihtiyacı çözen küçük bir ilk sürümü ortaya koymayı tercih ediyor. Bu ilk sürüm, sistemi gerçek işte deneyip neyin gerekli neyin fazlalık olduğunu görebilmenizi sağlıyor. Aylarca kapalı kapılar ardında geliştirilip sonunda beklentiyi tutmayan devasa projelerden bu yüzden özenle kaçınıyoruz. Küçük başlamak hem paranızı hem vaktinizi koruyor; yanlış bir varsayımı üç ay sonra değil, üç hafta sonra fark ediyorsunuz. İlk sürümü elinize aldığınızda araç henüz sade oluyor ama işin can alıcı kısmını çoktan çözmüş oluyor. Erken çıkan bir sürüm, üzerinde çalışan ekibin motivasyonunu da ayakta tutuyor. Gerçek kullanım, hiçbir toplantının veremeyeceği kadar net bir yön gösteriyor. Erkenden elde tutulan çalışır bir parça, kâğıt üzerindeki en ayrıntılı planı bile gerçekçilik konusunda kolayca gölgede bırakıyor.
İlk sürümü belirlerken olmazsa olmaz ile güzel olurdu arasındaki çizgiyi net bir biçimde çekiyoruz. Her fikir değerli ama hepsi aynı anda hayata geçmek zorunda değil; bir kısmı rahatlıkla sonraki aşamaya kalabiliyor. Bu ayrımı sizinle birlikte yapıyor, hangi özelliğin işi gerçekten döndürdüğünü hangisinin yalnızca hoşa gittiğini konuşuyoruz. Çekirdek çalışır hale geldikten sonra gerisini adım adım, gördükçe ekliyoruz. Böylece her yeni parça havada kalan bir tahmine değil, sahadan gelen gerçek geri bildirime dayanıyor. Öncelikleri doğru sıralamak, sınırlı bütçeyi en çok işe yarayan yere yönlendiriyor. Bir özelliği ertelemek onu çöpe atmak değil, yalnızca doğru zamana saklamak anlamına geliyor. Bu disiplin sayesinde proje şişip kontrolden çıkmıyor, elle tutulur bir hızla düzenli ilerliyor. Kısacası önce en çok işe yarayanı yapıyor, süsü ve ince ayrıntıyı sonraki turlara gönül rahatlığıyla bırakıyoruz.
İlk sürümü çıkarmak bir bitiş değil, asıl öğrenmenin başladığı an oluyor. Aracı gerçekten kullanan kişilerle konuşuyor, nerede takıldıklarını ve hangi adımı gereksiz bulduklarını not ediyoruz. Çoğu zaman en değerli fikir, bizim değil sistemi her gün kullanan çalışanın aklından çıkıyor. Bu geri bildirimleri toplayıp bir sonraki turun planına dönüştürüyoruz. Böylece sistem, masabaşında hayal edilen değil sahada işe yarayan bir araca doğru olgunlaşıyor. Her turda küçük ama isabetli adımlar atmak, tek seferlik dev bir sıçrama beklemekten çok daha sağlam ilerliyor. Kullanan kişilerin en ufak şikâyeti bile bize yol gösteren değerli bir işaret oluyor. Kullanıcının sesi, proje boyunca elimizdeki en güvenilir pusula olmaya devam ediyor. Bu yüzden geliştirmeyi kapalı bir kutuda değil, sizinle sürekli konuşarak ve ara ara göstererek açık biçimde yürütüyoruz.

Geliştirme, Test ve Entegrasyonları Adım Adım İlerletiyoruz

Geliştirme başladığında işi küçük parçalara bölüp her parçayı ayrı ayrı test ediyoruz. Düzenli çalışan bir yazılım ekibi kodu yazıp bir kenara atmıyor; her eklenen parçayı hem tek başına hem de bütünün içinde deniyor. Böylece bir hata büyüyüp aylar sonra karşımıza çıkmadan, daha doğduğu gün yakalanıyor. Test etmeyi en sona bırakmak, çoğu projede en pahalıya patlayan alışkanlık oluyor. Biz kritik akışları otomatik denetimlerle sürekli gözetiyor, elle yapılan kontrolleri de asla ihmal etmiyoruz. Bir özelliğin çalıştığını söylemekle onu gerçek verilerle sınamak arasında büyük bir fark var. Hata bulmayı bir başarısızlık değil, işin doğal ve sağlıklı bir parçası sayıyoruz. Kod ilerledikçe sizi de düzenli aralıklarla çalışan bir sürümle karşılaştırıyor, kör bir bekleyişe bırakmıyoruz. Erken yakalanan bir hata birkaç dakikada kapanırken, geç fark edilen aynı hata bazen günlerce uğraş istiyor.
Çoğu sistem tek başına değil, başka araçlarla konuşarak değer kazanıyor. Muhasebe programınız, kargo firmanız ya da ödeme altyapınızla kurulacak bağlantıları en baştan planlıyoruz. Bu bağlantılar düzgün kurulduğunda, aynı bilgiyi iki ayrı yere elle girme derdi tümüyle ortadan kalkıyor. Her bağlantı noktasını ayrı test ediyor, bir taraf yanıt vermediğinde sistemin çökmeden nasıl davranacağını da baştan tasarlıyoruz. Dışarıya açılan her kapı aynı zamanda bir risk taşıdığı için, oradan geçen veriyi dikkatle koruyoruz. Amacımız araçları gelişigüzel birbirine yapıştırmak değil, aralarında güvenilir ve sessiz bir akış kurmak. Bir bağlantı bozulduğunda sizi hemen haberdar edecek uyarıları da önceden kuruyoruz. Böylece siz tek bir yerden bakıp işin tamamını rahatça görebiliyorsunuz. Bir sistemin gerçek değeri, çoğu zaman diğer araçlarla ne kadar sorunsuz konuştuğunda ortaya çıkıyor ve iş yükünü sessizce azaltıyor.
Güvenlik, sonradan eklenen bir kilit değil, işin baştan içine ördüğümüz bir alışkanlık oluyor. Kullanıcı bilgilerini ve iş verilerinizi kimin görebileceğini, kimin değiştirebileceğini en baştan yetki düzeyleriyle ayırıyoruz. Şifreleri düz metin olarak değil, geri döndürülemez biçimde saklıyor, dışarıya açılan alanları sıkı sıkıya sınırlıyoruz. Düzenli yedekleme kuruyoruz ki beklenmedik bir arızada işiniz saatlerce havada kalmasın. Rize gibi bağlantının zaman zaman dalgalandığı yerlerde, sistemin kesintiye karşı dayanıklı olması ayrıca önem taşıyor. Güncellemeleri ve güvenlik yamalarını takip ederek, açık kalan kapıların zamanla birikmesini engelliyoruz. Bir sorun yaşanırsa geriye dönüp ne olduğunu görebilmek için sistemin düzenli kayıt tutmasını da sağlıyoruz. Bir sistemin çalışması kadar güvenle çalışması da bizim sorumluluğumuz sayılıyor. Güvenliği baştan kurmak, sonradan yaşanacak bir sızıntının hem maddi hem itibar maliyetinin yanında her zaman çok daha ucuz kalıyor; önlem almak, sonradan telafi etmekten kolaydır.
Kaynak Kodunu ve Verinizi Baştan Size Emanet Ediyoruz
Bir projeyi teslim etmek, onu kaderine bırakmak anlamına gelmiyor. Sürdürülebilir bir yazılım ancak düzenli bakımla ayakta kalıyor; teknoloji değişiyor, ihtiyaçlar kayıyor ve sistemin de bunlara ayak uydurması gerekiyor. Teslimden sonra hataları izliyor, gelen sorunları sıraya koyup tek tek çözüyoruz. İşiniz büyüdükçe yeni ekranlar ya da yeni bağlantılar eklemek gerektiğinde, kurulu düzeni bozmadan ilerliyoruz. Bakımı bir masraf gibi değil, ilk yatırımınızı koruyan bir sigorta gibi görüyoruz. Bakılmayan bir sistem, birkaç yıl içinde kimsenin dokunmaya cesaret edemediği bir yüke dönüşüyor. Küçük ama düzenli bakım, ileride çıkacak büyük ve pahalı onarımların önünü baştan kesiyor. Biz ise sistemi ilk günkü kadar anlaşılır ve düzenli tutmaya özen gösteriyoruz. Düzenli takip edilen bir sistem, yıllar geçtikçe yıpranıp köhneleşmek yerine değişen ihtiyaçlarınıza göre giderek olgunlaşıyor; her yıl bir öncekinden biraz daha yerine oturuyor.
Bakımı gerçekten yapılabilir kılan şey, kodun baştan temiz ve okunur yazılmış olması. Karmaşık ve dağınık bir kod bugün çalışsa bile, yarın küçük bir değişiklik istendiğinde büyük bir baş ağrısına dönüşüyor. Bu yüzden yazdığımız her parçayı, bizden sonra başka birinin de rahatça anlayabileceği biçimde düzenliyoruz. Kararlarımızı ve sistemin nasıl kurulduğunu da yazıya döküyoruz, böylece bilgi tek bir kişinin aklında hapsolmuyor. İyi belgelenmiş bir sistem, ekibiniz değişse bile sarsılmadan ayakta kalıyor. Kısa yoldan yazılmış ama kimsenin sürdüremediği bir kod, uzun vadede en pahalı seçenek oluyor. Bugün kazanılmış gibi görünen yarım gün, yarın haftalarca sürecek bir çözülmeye mal olabiliyor. Biz baştan biraz daha özenip sonraki yılları rahatlatmayı tercih ediyoruz. Temiz yazılmış bir kod, aslında geleceğe ve sizden sonra gelecek kişilere bırakılmış sessiz bir kibarlık gibi çalışıyor.
En baştan koyduğumuz ilkelerden biri de her şeyin gerçekten size ait olması. Teslim ettiğimiz bir yazılım projesinde kaynak kodu, veritabanı ve içindeki tüm veri sizin mülkünüz oluyor. Sunucu hesaplarını ve giriş bilgilerini doğrudan sizin adınıza açıyor, elinize eksiksiz teslim ediyoruz. Yarın başka bir ekiple çalışmaya karar verseniz bile, sistemi devretmek kolay ve sorunsuz oluyor; hiçbir yere kilitli kalmıyorsunuz. Verinizi dışarı aktarabileceğiniz yolları da baştan hazırlıyoruz, çünkü kendi bilgisine ulaşamamak bir işletme için sessiz bir tuzağa dönüşüyor. Bir sistemi kurmak kadar, onu gönül rahatlığıyla teslim edebilmek de işin ayrılmaz bir parçası. Kod ve verinin sizde durması, bize duyduğunuz güveni bir zorunluluk olmaktan çıkarıyor. Böylece kurduğumuz araç, bize değil doğrudan size bağlı çalışıyor. Kendi verinize dilediğiniz an ulaşabilmek, bir işletme için uzun vadede en değerli özgürlüklerden biri hâline geliyor.

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

İş kuralları, kullanıcı rolleri ve beklenen sonuç netse, bir özel yazılım çalışmasının teknik ayrıntıları analiz sırasında birlikte çıkarılabilir. Belirsiz kalan noktaları varsayımla kapatmıyor, kararı vermeden önce sizinle konuşarak netleştiriyoruz. Böylece iş, eksik bilgiyle değil anlaşılmış bir zeminde başlıyor.
Veriler önce incelenir, sonra alan eşlemesi yapılır. Yinelenen kayıtlar, farklı tarih biçimleri, eksik değerler ve hatalı karakterler taşımadan önce raporlanır; onayınızla düzeltilir ve ancak temiz hâliyle yeni düzene alınır. Amaç, geçmiş birikimi kaybetmeden sağlam biçimde taşımaktır.
Evet. Görev bazında görüntüleme, düzenleme, onay ve dışa aktarma sınırları ayrı ayrı kurulabilir. Yetki dağılımı iş sorumluluklarıyla birlikte doğrulanır; kimin neyi görüp değiştirebildiği baştan belirli ve sonradan izlenebilir kalır, bir değişikliğin kaynağı her zaman bulunabilir.
Servisin güvenilir bir bağlantı arayüzü sunması hâlinde entegrasyon değerlendirilebilir. Kimlik doğrulama, veri sınırı, hata cevabı ve tekrar deneme davranışı önceden konuşulur; bağlantı, iş akışını kilitlemeyecek biçimde kontrollü kurulur. Dışarıdaki bir aksaklık, içerideki düzeni sarsmadan yönetilir.
Evet. Tamamlanan akışlar bir deneme ortamında kademeli olarak açılabilir. Geri bildirimler ekran ve senaryo adıyla toplanır; onayladığınız bir davranış, sizinle konuşulmadan değiştirilmeden önce kayda alınır. Böylece erken görüş, işin yönünü zamanında düzeltmeye yarar.
Bir talebin hangi sorunu çözdüğü ve ne sıklıkta kullanılacağı önce ölçülür. Veri modeli, yetkiler, mevcut akış ve bakım yükü birlikte incelenir; bir özel yazılım büyüdükçe her ekleme, düzeni sade tutacak biçimde sıraya konur ve gerçekten kullanılacak işler önce yapılır.