Yazılım
- Anasayfa
- Yazılım
Yazılım İhtiyacınızı Kod Yazmadan Önce Kâğıtta Netleştiriyoruz
Bir yazılım projesine kod yazarak değil, soru sorarak başlıyoruz. Hangi işi kimin için kolaylaştıracağını, mevcut süreçte tam olarak neyin aksadığını ve bu işin elle nasıl yapıldığını yerinde anlıyoruz. Çoğu zaman işletmeler bir programa değil, belirli bir tıkanıklığın çözülmesine ihtiyaç duyar; bizim işimiz o tıkanıklığı doğru adlandırmaktır. Kars’ta tanıdığımız işletmelerin çoğunda, hazır bir paketin dayattığı düzene uymaya çalışmaktan doğan gereksiz emek görüyoruz. Bu yüzden önce mevcut akışı adım adım çıkarıyor, hangi adımın gerçekten değer kattığını sorguluyoruz. İşi gerçekten yapan kişilerle konuşuyor, yöneticinin gördüğüyle sahadaki gerçeğin nerede ayrıştığını buluyoruz. İhtiyacı yanlış anlayıp yazılan bir program, teknik olarak kusursuz olsa bile işe yaramaz. Bazen doğru çözüm yeni bir program değil, mevcut bir aracın daha akıllıca kullanılmasıdır; bunu da açıkça söylüyoruz. Doğru soru, doğru çözümün yarısıdır. Doğru tanımlanmış bir ihtiyaç sonradan onlarca saat kazandırır; yanlış tanımlanmış bir ihtiyaç ise en temiz kodu bile çöpe çevirir. Bu yüzden çözüme geçmeden önce sorunu anlamaya zaman ayırıyoruz.
İhtiyacı netleştirdikten sonra kapsamı yazıya döküyoruz. Yazılım geliştirme sürecinde en büyük risk, herkesin kafasında farklı bir çözüm hayal etmesidir; biz bu belirsizliği baştan ortadan kaldırıyoruz. Hangi özelliğin ilk sürümde olacağına, hangisinin sonraya kalacağına birlikte karar veriyoruz. Her isteğin bir maliyeti olduğunu açıkça konuşuyor, önceliği gerçek iş değerine göre belirliyoruz. Kapsamı olması gerekenden geniş tutmak projeyi hem pahalılaştırır hem geciktirir; bu tuzağa düşmemek için sadeliği savunuyoruz. Bir özelliğin kime, ne sıklıkta ve hangi anda lazım olacağını sorarak gereksiz olanları eleriz. Yazacağımız her ekranın kime, ne zaman, hangi işi kolaylaştıracağını tarif ediyoruz. Böylece geliştirme başladığında ne yaptığımız konusunda kimsenin kafasında soru işareti kalmıyor ve iş beklentiyle örtüşüyor. Kapsamı net çizilmiş bir proje, geliştirme boyunca çıkacak sürprizlerin çoğunu baştan önler. Belirsizlik ne kadar azsa, teslim tarihi de o kadar güvenilir olur.
Kapsam belgesini teknik terimlere boğmadan, sizin okuyup onaylayabileceğiniz sade bir dille yazıyoruz. Bu belge sonradan çıkacak anlaşmazlıkların da önünü kesiyor; ne sözü verdiysek yazılı duruyor. Bütçeyi ve teslim takvimini gerçekçi tutuyor, iyimser tahminlerle sizi yanıltmıyoruz. Projenin risklerini de saklamıyoruz; belirsiz kalan noktaları önceden işaret edip bunları nasıl yöneteceğimizi anlatıyoruz. İşin nasıl bölümleneceğini, hangi aşamada neyi göreceğinizi ve onay adımlarının nasıl işleyeceğini belirliyoruz. Ödemeyi de tamamlanan aşamalara bağlayarak hem sizin hem bizim riskimizi azaltıyoruz. Küçük parçalara ayrılmış, her adımı görünür bir plan hem sizin içinizi rahatlatıyor hem de bizim işi kontrollü ilerletmemizi sağlıyor. Sağlam bir başlangıç, sonraki her adımı kolaylaştırır ve sürprizleri en aza indirir. Yazıya dökülmüş bir plan, sözlü mutabakatların zamanla nasıl bulanıklaştığını bildiğimiz için bize güvence veriyor. İki taraf da aynı belgeye bakınca, tartışma değil çözüm konuşuyoruz.
Çalışan Bir Çekirdekten Başlayıp Adım Adım Büyütüyoruz
Geliştirmeye büyük ve gösterişli bir sürümle değil, işe yarayan küçük bir çekirdekle başlıyoruz. Bir yazılım ancak gerçek kullanıcının eline geçtiğinde eksiğini gösterir; bu yüzden erken ve sık teslim ediyoruz. İlk sürümü, en kritik işi yapan sade bir hâle indiriyor, gerisini kullanımdan gelen geri bildirime göre ekliyoruz. Bu yaklaşım, aylarca çalışıp sonunda yanlış şeyi teslim etme riskini ortadan kaldırır. Her aşamada çalışan bir parça görüyor, yön değiştirmek gerekirse bunu ucuza yapıyoruz. Erkenden gerçek veriyle karşılaşmak, hayalimizdeki çözümle ihtiyacın nerede ayrıştığını hızla gösterir. Kod yazarken okunabilirliği ve düzeni önemsiyoruz; çünkü bugün hızlı yazılmış dağınık kod, yarın ağır bir borca dönüşür. Sürdürülebilir bir temel aceleye kurban edilmez, çünkü asıl maliyet ilk yazımda değil sonraki yıllardaki bakımdadır. Küçük ve çalışan bir sürümle ilerlemek, riski küçük parçalara bölerek yönetmemizi sağlar. Yanlış giden bir şey olursa, aylar değil yalnızca günler kaybederiz.
Yazdığımız her parçayı, canlıya almadan önce sıkı biçimde deniyoruz. Test edilmeden teslim edilen bir program, sorunları müşterinin başına yıkar; biz bu yükü size bırakmıyoruz. Sık kullanılan senaryoları olduğu kadar, kullanıcının beklenmedik davranışlarını da deniyor, hataları kullanıcıdan önce biz yakalıyoruz. Boş bırakılan alanlar, yanlış girilen veriler ve ard arda tıklamalar gibi gerçek hayattaki karışıklıkları taklit ediyoruz. Sık tekrarlanan kontrolleri otomatik hâle getirerek, her yeni eklemenin eski özellikleri bozmadığını hızla doğruluyoruz. Bulduğumuz her hatayı kaydediyor, düzeltip yeniden sınıyoruz. Bir düzeltmenin başka bir yeri bozmadığından emin olmadan ilerlemiyoruz. Sessizce biriken küçük hatalar, zamanla güveni en çok yıpratan şeydir; bu yüzden kaliteyi sonradan eklenen bir aşama değil, sürekli bir alışkanlık olarak görüyoruz. Bir hatayı kullanıcı yerine bizim yakalamamız, hem itibarınızı hem de sizin vaktinizi korur. Test, teslimden sonra değil, teslimden önce yapılması gereken bir iştir.
Kullanıcının programla nasıl karşılaştığı da en az işlevsellik kadar önemlidir. Ekranları, o işi hiç bilmeyen birinin bile birkaç dakikada kavrayabileceği sadelikte tasarlıyoruz. Sık yapılan işleri az adıma indiriyor, geri döndürülmesi zor işlemlere onay basamağı koyuyoruz. Hata mesajlarını korkutucu teknik ifadelerle değil, kullanıcıya ne yapacağını söyleyen sade cümlelerle yazıyoruz. Ekip içinde farklı kişilerin kullanacağı bir programsa, kimin neye erişebileceğini de düşünerek tasarlıyoruz. Sıkça kullanılacak ekranları, işin gerçek akışına göre düzenleyip gereksiz tıklamaları ortadan kaldırıyoruz. Programı gerçekten kullanacak kişilerle erkenden deniyor, onların takıldığı yerleri düzeltiyoruz. Kullanımı kolay bir araç benimsenir ve işe yarar; karmaşık bir araç ise ne kadar güçlü olursa olsun rafta kalır ve verilen emek boşa gider. Kullanışlı bir arayüz, eğitim maliyetini düşürür ve ekibin araca direncini kırar. İnsanların gönüllü kullandığı bir program, dayatılan bir programdan her zaman daha çok iş görür.
Entegrasyon ve Güvenliği Baştan Tasarımın İçine Koyuyoruz
Çoğu program tek başına çalışmaz; mevcut araçlarınızla konuşması gerekir. Yazılım tarafında entegrasyonu sonradan yamanan bir ek değil, tasarımın parçası olarak ele alıyoruz. Muhasebe programınız, kargo firması, ödeme altyapısı ya da mesajlaşma servisi gibi kullandığınız sistemlerle veriyi otomatik akıtacak bağlantıları kuruyoruz. Elle tekrar tekrar veri girmek hem zaman kaybı hem hata kaynağıdır; bunu ortadan kaldırıyoruz. Dış servislerin bir gün değişebileceğini varsayarak, bağlantıları koptuğunda sistemin çökmeyeceği şekilde kurguluyoruz. Bir servis yanıt vermediğinde işlemin nazikçe beklemeye alınmasını, verinin kaybolmamasını sağlıyoruz. Hangi verinin nereye gittiğini kayıt altına alıyor, bir sorun çıktığında nedenini hızla bulabiliyoruz. İyi kurulmuş bir entegrasyon, günlük işin görünmez ama en çok emek tasarrufu sağlayan parçasıdır. Sistemler arası otomatik akış kurulunca, aynı bilgiyi iki yere girmenin yol açtığı hatalar da ortadan kalkar. Zamanla en çok teşekkür aldığımız çözümler genellikle bu sessiz bağlantılar oluyor.
Güvenliği en baştan düşünmek, sonradan yara sarmaktan çok daha ucuzdur. Kullanıcı bilgilerini ve müşteri verilerini şifreli biçimde saklıyor, yetkisiz erişime karşı katmanlı önlemler alıyoruz. Kimin hangi veriye ulaşabileceğini rol bazında ayırıyor, herkese her kapıyı açmıyoruz. Dışarıdan gelen her girdiyi denetliyor, bilinen saldırı yöntemlerine karşı sistemi sıkılaştırıyoruz. Parolaları düz metin olarak değil, geri döndürülemez biçimde saklıyoruz. Kimin ne zaman hangi işlemi yaptığını kayıt altına alarak, bir sorun anında izi sürülebilir hâle getiriyoruz. Düzenli yedekleme kuruyor, bir aksilik anında verinin kaybolmadan geri gelmesini sağlıyoruz. Kişisel veri söz konusuysa yasal sorumlulukları da göz önünde tutuyoruz. Güvenlik bir kez yapılıp bitirilen bir iş değil, sürekli gözetilmesi gereken bir disiplindir. Bir güvenlik açığının bedeli, onu önlemenin maliyetinin çok üzerindedir; bu yüzden tedbiri erteleme lüksümüz yok. Verinizi korumak, işinizin itibarını korumakla aynı şeydir.
Bir programın gerçek sınavı, yük altında verdiği tepkidir. Aynı anda çok sayıda kişinin kullanacağı bir sistemi, bu yoğunluğu kaldıracak şekilde tasarlıyoruz. Sık istenen verileri önbellekte tutuyor, ağır işlemleri arka plana alarak kullanıcıyı bekletmiyoruz. Sistemin hangi anlarda zorlandığını izliyor, darboğazları büyümeden gideriyoruz. İşiniz büyüdükçe programın da büyüyebilmesi için baştan esnek bir yapı kuruyoruz; sonradan her şeyi yeniden yazmak zorunda kalmamanız için. Beklenmedik bir hata olduğunda sistemin sessizce çökmesi yerine, durumu kaydedip bizi haberdar etmesini sağlıyoruz. Kritik ölçüleri sürekli izleyerek, bir sorun büyümeden önce uyarı almamızı sağlıyoruz. Böylece sorunları çoğu zaman kullanıcı fark etmeden çözebiliyor, sistemin gün içindeki dalgalanmalara sarsılmadan dayanmasını sağlıyoruz. Bugün beş kişinin kullandığı bir sistemin yarın beş yüz kişiyi kaldırması, ancak baştan doğru kurulmuşsa mümkün olur. Sonradan yapılan aceleci yamalar ise çoğu zaman yeni sorunlar doğurur.
Kaynak Kod ve Verinin Tek Sahibi İşletmeniz Oluyor
Bir program teslim edildiği gün olgunlaşmaz; asıl hayatı kullanımda başlar. Yazılım projesini tek seferlik bir teslimat değil, yaşayan bir ilişki olarak görüyoruz. Kullanıcıların gerçek kullanımından gelen geri bildirimleri topluyor, öncelik sırasına koyup düzeltmeleri planlıyoruz. Küçük ama düzenli iyileştirmeler, programın zamanla körelmesini önler. Kullandığınız teknolojilerin güncel kalmasını sağlıyor, güvenlik açıklarını kapatıyoruz. Bağımlı olduğumuz dış bileşenlerin de güncel ve desteklenir kalmasına dikkat ediyoruz. Yeni bir ihtiyaç doğduğunda, mevcut yapının üzerine sağlıklı biçimde nasıl ekleneceğini planlıyoruz. Bakımı ihmal edilen bir program, birkaç yıl içinde dokunulamaz hale gelir ve baştan yazmak zorunda kalırsınız. Düzenli ilgi, bu masraflı sonu önceden engeller. Düzenli bakılan bir program yıllarca hizmet ederken, ihmal edilen bir program kısa sürede yük hâline gelir. Bu yüzden teslimi bir son değil, uzun bir yolun başlangıcı olarak görüyoruz.
Bizim için vazgeçilmez bir ilke, işi bitirdiğimizde hiçbir şeyi elimizde tutmamak. Yazılım projesinin kaynak kodu, veri tabanı ve tüm belgeleri size ait; bunları eksiksiz teslim ediyoruz. Başka bir ekiple yola devam etmeye karar verseniz bile, elinizde her şeyin bulunmasını sağlıyoruz. Kodu anlaşılır biçimde belgeliyor, bir sonraki geliştiricinin işi devralmasını kolaylaştırıyoruz. Verileriniz sizin malınız; onları dışarı taşıyabileceğiniz açık biçimde tutuyor, sizi kapalı bir sisteme mahkûm etmiyoruz. Kurulumun nasıl yapıldığını da adım adım belgeleyip, sistemin başka bir yere taşınmasını mümkün kılıyoruz. Sunucu ve hesap erişimlerini kendi adınıza açıyor, kontrolü size bırakıyoruz. Güven ancak müşteriyi teknik olarak rehin almayınca kurulur; biz bu ilişkiyi bağımlılık üzerine değil, memnuniyet üzerine kuruyoruz. Her şeyin sizde olması, bizi de her işi özenli ve belgelenmiş yapmaya zorluyor. Şeffaflık, hem sizi koruyan hem bizi disipline eden bir çalışma biçimidir.
Programı size teslim etmek, sizi yalnız bırakmak anlamına gelmiyor. Kullanacak ekibe sistemin nasıl işlediğini adım adım gösteriyor, sık karşılaşılacak durumlar için sade bir kılavuz bırakıyoruz. Kars’ta birlikte çalıştığımız işletmelere ilk haftalarda daha yakın destek veriyor, kullanım oturdukça yükü onlara devrediyoruz. Bir sorun çıktığında nasıl ve hangi kanaldan ulaşacağınızı netleştiriyor, sizi belirsizlik içinde bırakmıyoruz. Acil durumlar için ayrı, sıradan istekler için ayrı bir yol tanımlayarak beklentiyi baştan netleştiriyoruz. İstediğiniz kadar desteği bizden almaya devam edebilir, dilerseniz kendi ekibinizle yürütebilirsiniz. Kararı her zaman siz veriyorsunuz. Uzun vadede sağlıklı bir program, onu kuran ekiple kurduğunuz güvenilir ilişki kadar değerlidir; biz bu ilişkiyi kalıcı kılmaya çalışıyoruz. Uzun vadeli güven, sözleşmeyle değil, ihtiyaç anında gerçekten ulaşılabilir olmakla kurulur. Biz bu ulaşılabilirliği bir ayrıcalık değil, işin doğal parçası sayıyoruz.
Yazılım Hakkında Sık Sorulan Sorular
Özel yazılım hazır paketlerden hangi noktada ayrılır?
Ayrım genellikle işin kendine özgü akışında ortaya çıkar. Hazır bir paket sizi kendi kalıbına uydurmaya çalışırken, size özel geliştirilen bir çözüm mevcut çalışma biçiminizi temel alır. Kapsam, veri düzeni ve sorumluluklar konuşulduktan sonra hangi yolun daha az sürtünme yaratacağı netleşir ve karar yazılı olarak paylaşılır.
İlk sürümde bütün özellikleri geliştirmek gerekir mi?
Genellikle gerekmez ve önerilmez. İşin öncelikli olarak ihtiyaç duyduğu çekirdek bölümle başlamak, sistemi erken kullanıma açar ve gerçek geri bildirimle ilerlemeyi sağlar. Sonraki adımlar bu deneyime göre önceliklendirilir; böylece hem bütçe hem de zaman gerçekten değer katan işlere ayrılır.
Eski kayıtlar yeni sisteme aktarılabilir mi?
Çoğu durumda aktarılabilir. Önce eldeki verinin nasıl tutulduğu incelenir, tekrar eden ya da eksik alanlar temizlenir, ardından deneme aktarımıyla sonucun beklendiği gibi olup olmadığı karşılaştırılır. Aktarımın kapsamı ve hangi kayıtların taşınacağı başlangıçta birlikte kararlaştırılır.
Kullanıcı yetkileri sonradan değiştirilebilir mi?
Evet; yetkiler baştan sabit değil, yönetilebilir biçimde kurgulanır. Yeni bir görev tanımı ortaya çıktığında ya da roller değiştiğinde, ilgili kişilere hangi alanların açılacağı düzeni bozmadan güncellenir. Bu değişikliklerin kim tarafından yapılabileceği de önceden belirlenir.
Her dijital çalışma için mobil uygulama gerekir mi?
Gerekmez; bu, işin nerede ve nasıl kullanıldığına bağlıdır. Çoğu ihtiyaç, telefon tarayıcısında düzgün çalışan bir arayüzle karşılanabilir. Ayrı bir mobil uygulama ancak sahada sürekli ve çevrimdışı kullanım gibi belirgin bir gereksinim varsa gündeme alınır ve maliyetiyle birlikte değerlendirilir.
Bakım ile yeni geliştirme nasıl ayrılır?
Bakım, çalışan sistemin sağlıklı kalmasını; yeni geliştirme ise sisteme daha önce olmayan bir yeteneğin eklenmesini kapsar. İkisi baştan ayrı tanımlanır; böylece hangi işin bakım kapsamında olduğu, hangisinin ayrı bir çalışma gerektirdiği belirsizliğe yer bırakmadan konuşulur ve önceden yazıya dökülür.
