Yazılım
- Anasayfa
- Yazılım
Yazılım İhtiyacınızı Gerçek İş Akışınızdan Çıkarıyoruz
Çoğu işletme bize hazır bir çözüm istemekten çok, bir dertle geliyor: aynı bilgiyi üç ayrı deftere yazmaktan yorulmuş, siparişleri kâğıtta takip ederken karıştırmış ya da ekipler arasında bilgi kaybolmuştur. Biz yazılım işine bu derdi dinleyerek başlıyoruz, çünkü çözüm ancak sorunu doğru anladığımızda işe yarar. İlk görüşmede size ne yaptığınızı değil, günün hangi anında neyin tıkandığını soruyoruz. Bir programın gerçekten gerekli olup olmadığını bile açıkça konuşuyoruz; bazen küçük bir düzenleme, koca bir projeden daha çok işe yarar. Kimi zaman da mevcut bir aracın doğru kullanılması, sıfırdan bir sistem kurmaktan daha akıllıcadır. Kocaeli çevresindeki üretim ve ticaret işletmeleriyle çalışırken, her sektörün kendi alışkanlıkları olduğunu gördük. Bu alışkanlıkları küçümsemiyor, çözümü onların üzerine inşa ediyoruz. Bu yüzden hazır kalıpları dayatmıyor, önce sizin işinizin gerçek akışını masaya yatırıyoruz. İşin akışını anladığımızda, çözümün şekli de kendiliğinden belirginleşiyor.
İhtiyaç analizini ciddiye alıyoruz, çünkü iyi yazılım kötü tanımlanmış bir işi düzeltmez, sadece hızlandırır. Mevcut sürecinizi adım adım çıkarıyoruz: hangi bilgi nereden geliyor, kim ne zaman ne giriyor, hata en çok nerede oluşuyor. Bu haritayı birlikte çizdiğimizde, çözülmesi gereken asıl düğüm çoğu zaman kendiliğinden ortaya çıkıyor. Bazen sorun bir programın eksikliği değil, sürecin kendisidir; bunu fark edersek dürüstçe söylüyoruz. Amacımız size satış yapmak değil, işinizi gerçekten kolaylaştırmak. Analizi yaparken sadece yöneticiyle değil, işi gün boyu yürüten çalışanlarla da konuşuyoruz; çünkü gerçek darboğazı çoğu zaman onlar bilir. Analiz sonunda elimizde, herkesin aynı şekilde anladığı sade bir ihtiyaç listesi oluyor. Bu listeyi teknik terimlerle şişirmiyor, sizin de okuyup onaylayabileceğiniz bir dille yazıyoruz. Sağlam bir başlangıç, projenin geri kalanını baştan rahatlatır. İyi tanımlanmış bir iş, geri kalan her adımı da hafifletir.
Analizden sonra beklentileri gerçekçi bir çerçeveye oturtuyoruz. Bir programın neyi çözeceğini yazıya döktüğümüz kadar, neyi çözmeyeceğini de açıkça belirtiyoruz. Sınırları baştan çizmek, ilerleyen aylarda büyüyen ve kontrolden çıkan isteklerin önüne geçer. Bütçeyi ve takvimi de bu aşamada konuşuyoruz; sürprizlerle karşılaşmayın diye maliyetin nereden doğduğunu tek tek anlatıyoruz. Küçük başlayıp ihtiyaç oldukça büyütmenin, dev bir projeyi tek seferde kurmaktan daha güvenli olduğuna inanıyoruz. Bu yaklaşımı seçmemizin nedeni yıllar içinde gördüğümüz bir gerçek: kullanılmayan özellikler için ödenen para israftır. Bir özelliğin gerçekten gerekip gerekmediğini, onu kullanacak kişiye sorarak sınıyoruz. Onun için önce gerçekten gerekli olanı yapıyor, gerisini işiniz büyüdükçe ekliyoruz. Böylece hem bütçeniz korunuyor hem de sistem gereksiz yükle ağırlaşmıyor. Sınırları net çizilen bir proje, ortasında yön kaybetmez.
Kapsamı Somutlaştırıp Çekirdek Sürümle Yola Çıkıyoruz
Kapsam belirleme, bir yazılım projesinin en kritik ama en çok atlanan adımıdır. Herkesin kafasındaki basit program aslında birbirinden çok farklı şeyleri anlatır, bu yüzden hayali değil somut konuşuyoruz. Hangi ekranların olacağını, kimin hangi bilgiyi göreceğini ve sistemin ne yapıp ne yapmayacağını tek tek yazıyoruz. Bu belge, ileride ben bunu böyle anlamamıştım dertlerini büyük ölçüde ortadan kaldırır. İlk sürümü bilerek küçük tutuyoruz; en çok işe yarayan çekirdek işlevle başlayıp onu gerçek kullanımda sınıyoruz. Kullanmadan yazılan uzun istek listeleri çoğu zaman yanılır, oysa çalışan küçük bir sürüm size gerçek fikir verir. Elle tutulur bir sürümü erken görmek, sayfalarca belgeyi okumaktan daha çok şey öğretir. Kapsamı yazılı ve net tuttuğumuzda, iki taraf da neye söz verdiğini bilerek ilerliyor ve tartışmalar belgeye bakılarak kolayca çözülüyor. Somut bir belge, herkesin aynı resmi görmesini sağlıyor; böylece ekipler aynı hedefe bakarak ilerliyor.
İlk sürümü tasarlarken kullanıcıyı hep önümüzde tutuyoruz. Bir programı gün boyu kullanacak kişi teknik biri olmayabilir; bu yüzden ekranların sade, düğmelerin anlaşılır olmasına özen gösteriyoruz. Karmaşık bir arayüz, ne kadar güçlü olursa olsun, kullanılmadığı sürece işe yaramaz. Sık yapılan işleri en az tıklamayla halledecek şekilde kurguluyor, nadir işleri arka plana çekiyoruz. Çalışanlarınızın alışması için tanıdık kalıpları tercih ediyoruz; herkesin bildiği bir düzeni yeniden icat etmiyoruz. Hata yapmayı zorlaştıran, yanlış girişi nazikçe uyaran ekranlar tasarlıyoruz; çünkü iyi arayüz kullanıcıyı korur. İlk sürüm elinize geçtiğinde onu gerçek işinizde deniyor, aksayan yerleri not alıyorsunuz. Bu geri bildirim bizim için çok değerlidir, çünkü masabaşında öngörülemeyen ihtiyaçlar ancak sahada ortaya çıkar. Gördüğümüz eksikleri bir sonraki adımda gideriyoruz. Kullanıcıyı koruyan bir tasarım, sonradan çıkacak birçok sorunu baştan önler.
Küçük başlamanın bir başka yararı, riski dağıtmasıdır. Tek seferde kurulan büyük bir sistem, beklenmedik bir sorunla karşılaştığında her şeyi birden aksatır. Oysa parça parça ilerlediğimizde her adımı ayrı ayrı sınayıp güvenle bir sonrakine geçiyoruz. Her sürümü sizinle birlikte değerlendiriyor, yön değiştirmek gerekirse bunu erkenden ve ucuza yapıyoruz. Böylece proje, yolun sonunda büyük bir sürprizle patlamak yerine, denetimli biçimde olgunlaşıyor. Erken çıkan bir sürüm, işinize gerçek katkı vermeye de daha çabuk başlar; beklemek zorunda kalmazsınız. Öncelikleri de sabit görmüyoruz; işiniz değiştikçe hangi özelliğin öne alınacağını birlikte yeniden karara bağlıyoruz. Bu esneklik, planı bir kez yazıp körü körüne izlemekten çok daha sağlıklıdır. Sonunda elinizde, gerçek ihtiyaçla sınanmış, gereksiz yüklerden arınmış bir çözüm kalıyor. Parça parça ilerlemek, büyük bir kumarı küçük ve yönetilebilir adımlara böler.
Geliştirme, Test ve Entegrasyonları Adım Adım Yürütüyoruz
Geliştirme aşamasında işi görünür kılmayı önemsiyoruz. Aylarca kapalı kapılar ardında çalışıp sonunda kocaman bir sonucu önünüze koymak yerine, düzenli aralıklarla çalışan parçaları gösteriyoruz. Böylece gidişatı görüyor, erken müdahale edebiliyorsunuz. Her yeni parçayı yazarken sadece çalışıyor mu diye değil, yarın değişince ne olur diye de düşünüyoruz. Kodu düzenli ve okunur tutmak ilk gün fazladan emek ister ama sonraki her ay bu emeği fazlasıyla geri öder. Acele edip gelişigüzel yazılan bir program, kısa sürede bakılamaz hâle gelir. Yazdığımız kodu başka bir geliştiricinin de rahatça okuyabilmesini önemsiyoruz; çünkü bir sistem, tek kişiye bağlı kaldığında kırılgan olur. Biz baştan temiz bir düzen kurmayı, sonradan enkaz temizlemeye tercih ediyoruz. İşin ilerleyişini sade notlarla paylaşıyor, teknik ayrıntıları anlaşılır bir dile çeviriyoruz. Okunur bir kod, geleceğin geliştiricisine bırakılan en nazik mirastır.
Test, yazılım geliştirmenin isteğe bağlı bir süsü değil, ayrılmaz bir parçasıdır. Yazdığımız her işlevi hem tek tek hem de bütünün içinde deniyoruz; çünkü ayrı ayrı çalışan parçalar bir araya gelince beklenmedik biçimde çakışabilir. Sık yapılan işleri, uç durumları ve hatalı girişleri özellikle zorluyoruz, kullanıcının yapabileceği yanlışları önceden düşünüyoruz. Bir hatayı canlıya çıkmadan yakalamak, çıktıktan sonra düzeltmekten çok daha ucuzdur. Bir değişiklik yaptığımızda eski işlevlerin bozulmadığını da tekrar sınıyoruz; ilerlerken geriye bir şey kırmamak önemlidir. Entegrasyonlarda da aynı titizliği gösteriyoruz; mevcut muhasebe programınız, kargo sisteminiz ya da ödeme altyapınızla veriyi tek yönde ve güvenle akıtıyoruz. İki sistemin konuşması kulağa basit gelse de ayrıntıda çok tuzak barındırır. Bu yüzden bağlantıları önce güvenli bir ortamda kurup denedikten sonra gerçek veriye açıyoruz. Erken yakalanan bir hata, hiç yaşanmamış bir kriz kadar değerlidir.
Bir programı gerçek dünyaya bağlarken veri güvenini asla hafife almıyoruz. Bir entegrasyon kurarken, hatalı ya da eksik bir kaydın sistemi kilitlememesi için baştan önlem alıyoruz. Her aktarımı kayıt altına alıyor, bir sorun çıktığında nerede olduğunu hızla görebiliyoruz. Kullanıcıya da anlaşılır uyarılar veriyoruz; kişi neyin yanlış gittiğini bilirse doğru adımı kendisi atabilir. Karmaşık teknik hataları ekranda çıplak bırakmıyor, onları sade bir dile çeviriyoruz. Dışarıdaki bir servis geçici olarak yanıt vermezse sistemin tümden durmaması için de tedbir koyuyoruz. Test ve entegrasyonu tamamladıktan sonra sistemi bir süre yakından izliyor, gerçek kullanımda ortaya çıkan küçük pürüzleri gideriyoruz. Bu izleme dönemi, işin sağlam oturması için değerlidir. Aceleyle tamamdır deyip çekilmiyor, sistemin gerçekten güvenle döndüğünden emin oluyoruz. Sessizce izlenen bir sistem, sorunları daha büyümeden haber verir ve panik anlarını en aza indirir.
Veri Güvenliğini, Sürekli Bakımı ve Kod Sahipliğinizi Koruyoruz
Güvenlik, projenin sonuna eklenen bir denetim maddesi değil, en baştan gözettiğimiz bir tutumdur. Bir yazılım hangi veriyi tutuyorsa, o veriyi korumak da onun asıl görevlerinden biridir. Şifreleri güvenli biçimde saklıyor, yetkileri kişiye göre ayırıyor, herkesin her şeye erişmesini engelliyoruz. Dışarıdan gelen bilgiyi olduğu gibi kabul etmiyor, önce süzüyoruz; en sık yaşanan sızıntılar çoğu zaman bu basit denetimin atlanmasından doğar. Yedekleme düzenini baştan kuruyoruz ki beklenmedik bir arıza ya da hata veriyi silip süpürmesin. Yedeklerin gerçekten geri yüklenebildiğini de ara ara sınıyoruz; denenmemiş bir yedek, çoğu zaman yok sayılır. Güvenliği bir kez yapılıp unutulan bir iş gibi görmüyor, düzenli olarak gözden geçiriyoruz. İşinizin verisi sizin en değerli varlığınızdır; onu korumayı işin merkezine koyuyoruz, süs olarak değil. Baştan gözetilen güvenlik, sonradan yamanandan çok daha sağlam durur ve içinizi rahat tutar.
Bir sistem canlıya alındıktan sonra bakım gerektirir; bunu baştan söylüyor, sizi hazırlıksız bırakmıyoruz. Kullandığınız altyapılar zamanla güncellenir, yeni ihtiyaçlar doğar, küçük hatalar yüzeye çıkar. Kocaeli çevresindeki işletmelerle yıllara yayılan bu bakım ilişkisini defalarca kurduğumuz için önemini yakından biliyoruz. Bu yüzden bakımı bir seçenek değil, sürekliliğin doğal parçası olarak sunuyoruz. Düzenli güncellemelerle güvenlik açıklarını kapatıyor, yedekleri denetliyor, sistemin sağlığını izliyoruz. Bir sorun büyümeden önce belirtilerini fark etmeye çalışıyor, küçükken müdahale ediyoruz. Yeni bir ihtiyaç çıktığında bunu mevcut yapıya en az sarsıntıyla ekliyoruz. Bakım kapsamını ve karşılığını baştan açık yazıyoruz ki ne beklediğinizi tam bilesiniz. Dilerseniz bakımı biz üstleniyor, dilerseniz kendi ekibinizin devralması için gereken bilgiyi ve belgeleri veriyoruz. Düzenli bakım, ani ve pahalı arızaların önündeki en ucuz sigortadır.
En çok önem verdiğimiz ilkelerden biri, ürettiğimiz yazılım ve verinin sahibinin siz olmanızdır. Kaynak kodunu, veritabanını ve tüm erişimleri size teslim ediyoruz; bunlar bizim elimizde rehin kalmaz. Bir gün yolunuzu başka bir ekiple ayırmak isterseniz, elinizde her şey eksiksiz ve düzenli dururken ayrılabilmelisiniz. Müşteriyi teknik olarak kendine bağımlı kılmak yaygın bir yöntemdir ama bizim çalışma anlayışımıza ters düşer. Kodu okunur yazıyor, ne yaptığını anlatan sade belgeler bırakıyoruz ki sizden sonrası da rahat olsun. Kullandığımız araçları da olabildiğince yaygın ve açık seçeneklerden seçiyoruz; böylece sizi dar bir kapıya sıkıştırmıyoruz. Teslimde, sistemin nasıl çalıştığını ekibinize aktarıyor, sorularınızı sabırla yanıtlıyoruz. Amacımız tek seferlik bir teslim değil, güvene dayalı ve sürebilen bir iş ilişkisi kurmak. İşiniz büyüdükçe yanınızda olmayı, dayatmayla değil, verdiğimiz sözü tutarak hak etmek istiyoruz. Sahiplik sizde kaldıkça, ilişkimiz de eşit ve gönüllü kalıyor.
Yazılım Hakkında Sık Sorulan Sorular
Özel yazılım geliştirme süresi nasıl hesaplanır?
Süre; kullanıcı rolleri, ekran sayısı, veri yapısının karmaşıklığı, entegrasyon adedi ve test kapsamı belirlendikten sonra çıkarılır. Genelde aşamalı bir takvim kurulur ve ilk aşamada en çok kullanılan akış devreye alınır. Böylece ekip beklemeden çalışmaya başlar, kalan bölümler yayındaki geri bildirimle şekillenir. İlk aşamanın kapsamı dar tutulduğunda geri bildirim de daha erken alınır.
Hazır bir ürün yerine ne zaman kendi çözümümüzü yaptırmalıyız?
Hazır araçlar iş akışını güvenli ve verimli biçimde karşılıyorsa yeni bir geliştirmeye gerek kalmaz. Süreç hazır ürüne uydurulmak zorunda kalınıyorsa, veri birkaç sistem arasında elle taşınıyorsa ya da lisans yükü büyüyorsa özel yazılım seçeneği değerlendirilir. Karar, iki yolun toplam maliyeti karşılaştırılarak verilir. Karar verilirken mevcut verinin taşınma maliyeti de hesaba katılır.
Mevcut sistemlerimizle entegrasyon yapılabilir mi?
Karşı sistemin teknik erişime izin vermesi ve veri kurallarının belgelenmiş olması gerekir. Bu koşullar sağlandığında hangi verinin ne sıklıkla aktarılacağı yazılı hale getirilir ve bağlantı ayrı ayrı denenir. Erişim kapalıysa dosya tabanlı aktarım gibi ara çözümler değerlendirilir. Bağlantının koptuğu durumlarda verinin nerede bekleyeceği önceden tanımlanır.
Sistemin yönetimi tamamen bize devredilir mi?
Hesaplar, erişim bilgileri, kaynak dosyalar ve kullanım dokümanı sözleşmedeki kapsam doğrultusunda işletmeye aktarılır. Devir sırasında hangi işin kimde kaldığı tek bir belgede listelenir. Böylece ileride farklı bir ekiple çalışılmak istendiğinde sürekliliği bozan bir bağımlılık oluşmaz. Kaynak dosyaların nerede tutulduğu da aynı belgede açıkça yazılır.
Bakım ve yeni özellik talepleri nasıl yönetilir?
Hata giderme, bakım ve yeni geliştirme ayrı iş türleri olarak kaydedilir. Her talep sisteme girer, önceliklendirilir ve planlı sürümlerle yayına alınır. Acil olanlar ayrı bir akışta yürütülür; böylece planlı işler sürekli ertelenmek zorunda kalmaz. Her sürümün içinde hangi maddelerin yer aldığı kısa bir notla paylaşılır.
Veri güvenliği nasıl ele alınıyor?
Yetkilendirme, kayıt tutma, yedekleme ve hata senaryoları ilk mimari kararlarla birlikte değerlendirilir. Verinin nerede saklandığı ve kimin erişebildiği yazılı hale getirilir. Ekipten ayrılan kullanıcıların erişiminin ne kadar sürede kapatılacağı da aynı belgede tanımlanır. Yedeklerin gerçekten geri yüklenebildiği belirli aralıklarla ayrıca denenir.
