Yazılımda Muda (İsraf) Nedir?
Yazılım geliştirmede doğru ürünü doğru şekilde geliştirmek ilerleme sağlamak için önemli bir şarttır. İşi gerçekleştirmek için verilen zaman ve sahip olunan enerji bellidir. Bu enerjiyi boşa harcamak diğer bir deyişle değer akışını istenen düzeyde tutamamanın nedeni her aşamada yapılan israflardır. Değer üretmeyen her bir süreç adımı veya programa katılan ama kullanılmayan özellik israftır. Bu israfları en aza indirgeyecek yaklaşıma da Yalın yaklaşım denmektedir.
Rekabette öne çıkmak için mümkün olduğunca israfı azaltıp üretilen değeri en yüksek oranda tutmaya çalışılmalıdır. İsraf yani “waste” Japonca’da muda kelimesine karşılık gelir. Toyota’nın önemli mühendislerinden Taiichi Ohno israfı yedi türe ayırmıştır.
Envanter – Kısmi Yapılmış İş
Sürekli yapılmakta olan iş olmasına rağmen ortaya çıkarılamayan değer. Sadece bir parçası yapılmıs olan kullanıcı hikayeleri, düzeltilmemiş hatalar, tamamlanmamış ama sisteme alınmış işler. Birçok kez iş çıkarmakta, yük getirmekte ve stress yaratmaktadır. Refactor edilmemiş, test edilmemiş, dokümante edilmemiş ve sisteme alınmamış kod.
Fazla Üretim – Fazladan Özellikler
Talep edilenden fazla üretim yapılması. Takım düşük öncelikli işleri yapmakta bu yüzden yüksek öncelikli iş yapabilme kapasitesini azaltmaktadır. Önceliklendirmesi yanlış yapılmış özellikler, gereğinden fazla özellik katma, ürün ihtiyaçlarını iyi anlayamama ve hedef kitleyi belirlemeden yapılan işler.
Ekstradan İşlem – Yeniden Öğrenme
Süreç içinde olan ama aslında gerçekten ihtiyaç duylmayan adımlar. Hatalardan kaynaklanan borçlar, yeniden devreye alma, sorunları sınıflandırma, fazladan test, başkalarının kodunu öğrenme, kırılmış bağımlılıkların giderilmesi. Takımın sahip olduğu bilginin kullanılmaması ve tekerleği yeniden keşfetme çabası. Dokümantasyonun eksikliği. Bilgi paylaşılması ve bilgi dağılımının geçişken iletişim olmadığından eksik olması. Söylemeden eylemle anlaşılan bilginin eksik olması.
Taşıma – Aktarım
Üretilen malların bir yerden başka yere taşınması. Roller, takımlar, departmanlar arasında aktarım. Bilginin görünebilirliği konusunda zorluklar, başka lokasyonlarda çalışan takımlar.
Hareket – Task Değiştirme
Süreç içinde dolaşma. Aletlerin yönetilmesi, erişim hakları, veri transferi, laboratuvar kurulması, paralel sürümler. Yazılım takımının bir den fazla proje üzerinde çalışması. Devam eden işlerde kesilmeler. Ürün sahibi ile geliştirme takımı arasında koordinasyon eksikliği.
Bekleme – Gecikme
Süreç adımları arasında duraklama. Gecikmeler, ilerlemeyi engelleyen hatalar, eksik gelen parçalar ve bağımlılıklar. Takım üyesi eksikliği, devam eden çok sayıda iş, dışsal bağımlılıklar, neyin değer kattığının anlaşılmaması. Varsayımlar ve engellerin neden olması.
Düzeltme – Hatalar
Çıktılarda kusurların olması. Hurda ve kodun üzerinde yeniden çalışılması. User story’lerin yanlış anlaşılması, TDD uygulanmadığı ve refactor edilmeyen kodlar, kabul kriterinin eksik olması, test uzmanlarının sürece sonradan katılmaları ve takımda teknik yeterliğin az olması.
Yazılım geliştirmede bu tür israflar özellikle birbirinden farklı uzman roller olduğunda genelde gözden kaçmaktadır. Açıklandığı üzere her konuda her adımda her noktadan israf mümkün olmaktadır. Bu yüzden yazılım geliştirken bu israf noktalarında dikkat edilmeli önlenmesi için tedbir alınmalıdır.
Attila Alkoç, PSM I, PSPO I, CSM, CSPO
Agile Coach, ACM Software