Çevik süreçler şu an bilişim sektörü en güçlü Amerika ve İngiltere gibi ülkelerde altın zamanını yaşıyor. 4-5 yıl öncesiyle karşılaştırdığımızda artık çok büyük şirketlerin çevik süreçlerden yarar sağlamak için çalışmalar yürüttüklerini görüyoruz. Şirketlerin ilgisindeki artış en büyük nedeni artan rekabet koşulları, şirketlerin IT projelerine yaptıkları yatırımların sonucu daha hızlı görmek istemeleri , çevik süreçlerin bu ihtiyaçlara cevap verebilmesi ve müşteriye katma değer sağlamaya odaklı olmasından kaynaklanıyor.
Çevik süreçlerin benimsediği ve Agile Manifesto(www.agilemanifesto.org) ile özetlenen prensipler ve değerler bütünü, yazılım geliştirme dünyası için yeni bir yaklaşım olarak görülüyor. Fakat benzer yaklaşımları başta üretim sektörü olmak üzere farklı sektörler uzun süredir başarıyla kullanıyor. Çevik süreçler bu yaklaşımların yazılım dünyasına izdüşümü olarak görülebilir. Bu yaklaşımın temelini Yalın Düşünce(Lean Thinking) oluşturuyor.
Yalın düşünce öncelikle hedefiniz nedir sorusunu sorar. Amaç her zaman bizi hedefe yaklaştıracak değerleri yaratmak olmalıdır. Yazılım bağlamında düşünüldüğünde hedef müşteri ihtiyaçlarını karşılayan kaliteli yazılımı hızla teslim etmektir. Yalın düşünce bu hedefe ulaşılırken kullanılan sürece ne kadar değer ürettiği, müşteriye ne sağladığı gözüyle bakar. Müşteriye değer sağlamayan süreç faaliyetleri zaman,kaynak ve para israfıdır ve sürecin etkinleşmesi için israfın yok edilmesi gerekir. Tüm faaliyetlerin ne kadar değer oluşturduğunun sürekli sorgulanması gerekir. Değer akışı bu sayede sürekli iyileştirmelerle müşteriye mükemmel değer sağlayacak şekilde ayakta tutulur. Bu sayede hem müşteriler ihtiyaçlarına daha kaliteli, hızlı ve ucuz şekilde ulaşırlar hem de firmalar rekabet güçlerini ve karlılıklarını arttırmış olurlar.
Yalın düşüncenin çıkışı Toyota Üretim Sistemi’dir(Toyota Production System). Bu sistemin temelinin atıldığı 1950′li yıllarda Henry Ford’un ortaya koyduğu kitle üretim(mass production) yaklaşımı kabul görüyordu. Fabrikalarda düşük vasıflı işçiler ve özel makinalar üretim hatlarında ucuz arabalar üretebiliyordu. Mevcut sistem üretime direk katkısı olmayan ve değer sağlamayan faaliyetleri beraberinde getiriyordu. Örneğin detaylı planlama, stok yönetimi, araç yatırımları gibi faaliyetler ve sistemin insan kaynağına özensiz bakış açısı ana problem kaynağıydı.
Savaş sonrası yıllarda Toyota kendi üretim süreçlerini kurarken Ford üretim sistemini inceledi. O yıllarda Toyota’nın zaman ve kaynak israf etmek gibi lüksleri yoktu, ayakta kalabilmek için çok verimli çalışarak müşteri ihtiyaçlarını karşılayan kaliteli ürünleri piyasaya hızlıca sürmesi gerekiyordu. Amaç üretimi tüketici istedikçe yapmak ve hızlıca tüketiciye ulaştırmaktı. Sistemde israfa yer yoktu. Stok, detaylı planlama aktiviteleri, kararlarının gecikmesi israf olarak algılanıyordu. Üretim büyük kitleler halinde değil müşterinin istediği kadar yapılıyordu. Çalışma düzeni olarak farklı makinelerin dizildiği düz bir üretim hattı yerine U şeklinde bir işçinin birden fazla makinenin sorumluluğunu aldığı bir yerleşim kullanıldı ve monotonluğu azalttığı için çalışanların iş tatmini arttı. Toyota Üretim Sistemi’nin en önemli özelliklerinden biri çalışanlara ve iş memnuniyetlerine verdiği önemdi.
Yalın yaklaşımın fabrikalarda yoketmeye çalıştığı israf 7 kategoride değerlendirilir.
İsraf 1 : Fazla üretim
Bir sipariş gelmeden malı üretmek. Örneğin yalın yaklaşımı benimseyen Dell Computer çok az bir stok tutup bilgisayarları müşteri siparişi geldiğinde özel olarak üretebilmesi ile ünlü.
İsraf 2 : Stok
Ham madde ve üretilen ara parçalar maliyetleri arttırır. Bunları üretim sırasında taşımak, saklamak gerekecektir.İdeal durum hiç stok yapma ihtiyacı olmadan ham maddenin nihai ürün olana kadar hızlı şekilde akıtılmasıdır.
İsraf 3 : Gereksiz iş adımları
Gereksiz iş adımları süreci kompleks hale sokabilir. Eğer bir iş adımı olmadan süreç işleyebiliyorsa o adım israftır.
İsraf 4 : Hareket
İşin yapılması için çok fazla efor sarfetmek gerekiyorsa bu israftır.
İsraf 5 : Hatalar
Hataları daha ortaya çıkmadan önlemek gerekir. Üründe farkedilen hatalar o ürünün üretilmesi için kullanılan kaynakların israfıdır.
İsraf 6 : Beklemeler
Bir iş adımı için başka iş adımlarının çıktıları bekleniyorsa bu bekleme israftır.
İsraf 7 : Taşıma
Bir parçayı bir yerden diğerine taşıma zorunluluğu maliyetleri arttırır ve israftır.
Amerikan firmaları Yalın yaklaşımı benimseyen ve yukarda anlatılan israfları önleyen Japon şirketleri karşısında pazar kaybetmeye başladılar. 1980′li yıllarda Toyota yeni bir araba modelini Amerikan şirketlerinin 3 de biri zamanda üretebiliyordu. Araç kalitesi ve tüketici memnuniyetinde de Japonlar açık ara önde gidiyordu.Günümüzde bile 10-15 yıldır saat gibi işleyen Japon arabalarını hala yollarda görmek mümkün. Amerikan arabalarının ise ilk 6 ay içinde dahi problemler çıkarması hatta arabaların geri çağrılması gibi problemler olağandı.
Zaman geçtikçe aynı verimi hedefleyen Amerikan ve Avrupa şirketleri yalın yaklaşımları benimsedi ve yalın yaklaşım üretim sistemleri dışında yazılım sektörü gibi birçok farklı alanda uygulanmaya başlandı. Yazılım geliştirme alanına baktığımızda Yalın yaklaşımın çevik süreçler olarak yorumlandığını söyleyebiliriz. Toyota ‘ nın ürün tasarımına bakışı çevik süreçlerin pratiklerine şaşırtıcı derecede benziyor.
İsrafı yazılım projelerine yorumlarsak aşağıdaki liste ortaya çıkıyor.
İsraf 1:Ekstra özellıklerin eklenmesi
Müşterinin sadece ihtiyaç duyduğu özelliklerin yazılıma eklenmesi gerekir. Çevik süreçler sadece günün gereksinimlerine odaklanır. Gelecekte bu gereksinim de ortaya çıkar diyerek müşterinin geri beslenimi olmadan yazılıma ek özellikler eklemez. Kodlama aşamalarında da aynı şekilde kodlar sadece günün ihtiyaçlarını karşılayacak şekilde basitçe tasarlanarak yazılır. Gelecekte ihtiyaç olacak diye sistemin kompleksliğini arttıracak özelliklerin yazılıma eklenmesinden kaçınılır.
İsraf 2: Gereksinimler
Baştan tüm gereksinimlerin detaylandırılması ve analiz dokümanlarının oluşturulması baştan hammadde stoğu oluşturmak gibi israftır. Gereksinimleri büyük yığın halinde stoklamak yerine çevik süreçler kısa adımlarla gereksinimleri alır ve bunları çalışan yazılıma dönüştürür. Bu teslimler sürekli yapılır ve analiz projenin başından son aşamalarına kadar devam eder. Teslimlerde yazılıma hangi özelliklerin ekleneceği müşterinin kendisi tarafından belirlenir.
İsraf 3:Gereksiz iş adımları
Gereksiz dokümantasyon, gözden geçirme çalışmaları , pratikte işlemeyen test süreci gibi ilk başta akla gelen iş adımları müşteriye yazılım teslimi hedefine katkıda bulunmaz. Aksine bu çalışmalar zamanla amaç haline gelir ve ekip asıl hedefi unutabilir. Çevik süreçler disiplinli şekilde yazılım geliştirilebilmek için gereken en temel pratikleri içerir ve çalışan yazılımı iş ürünleri oluşturmaktan yeğ tutar.
İsraf 4: Bilgiye ulaşırken harcanan efor
Ekibin bilgiye kolayca ulaşabilmesi ve paylaşabilmesi gereklidir. Örneğin analiste sorulacak bir soru için toplantılar düzenlemek gerekiyorsa, yazılım geliştirici işi ile ilgili kaynaklara zor ulaşabiliyorsa bu israftır. Çevik süreçlerde tüm ekip üyeleri açık bir ofis ortamında oturur ve sürekli iletişim halindedir. Ekiplerin oturma düzeni bilgi paylaşımını arttıracak şekilde düzenlenir. Ekip bilgiyi duvarlara asılan panolarda paylaşır. Örnek olarak alan modeli, projenin son performans ölçümleri, versiyon kontrol sistemi bağlantı özellikleri, önemli iletişim bilgileri, halen geliştirilmekte olan özellikler gibi bilgiler ekibin çalıştığı ortamda herkesin görebileceği şekilde paylaşılır.
İsraf 5:Hatalar
Yazılımda test aşamalarından sonra bulunan hatalar israf edilen kaynaktır. Çevik süreçlerden XP testleri birinci önceliğe koyar ve kodların yazılması için önce testler yazılır. Testler sayesinde mevcut yapının belli bir işlevi yerine getirmediği ispatlanır. Sonrasında bu işlev için gereken kodlar yazılır ve testler tekrar çalıştırılır. Test geçtiğinde işlev yazılıma eklenmiş demektir. Bu gerekenden fazla iş yapılmasınında önüne geçer.
İsraf 6:Beklemeler
Örneğin bir işin başlaması için onaylar bekleniyorsa bu israftır. SRS onayı bunun en güzel örneklerinden biridir. Testcilerinde teste başlamak için kodlamanın bitmesini beklemesi aynı şekilde israftır. Çevik süreçlerde beklemeler minimuma indirilmiştir. 2-4 haftalık sürelerle ihtiyaçlar hızlıca geliştirilip yazılıma eklenir ve müşteriye teslim edilir. Toplantılar dahi kısa zaman alması için ayakta yapılmaya çalışılır.
İsraf 7:Ekipler arası iş teslimi
Bu tür teslimleri azaltmak için Testçi, Analist, Yazılım geliştirici gibi rollerdeki ekip üyeleri hergün yazılıma yeni özellikler eklemek hedefiyle beraber çalışırlar. Örneğin gereksinimi belirten bir kullanım hikayesi(user story) ile ilgili kodlama çalışmaları başlamadan önce ekip üyeleri biraraya gelip kısaca kapsamı tartışabilir. Bu tür basit fakat etkili yöntemlerle dokümantasyon ihtiyaçları ve ek iş ürünlerinin getirdiği israf önlenmiş olur.
Çevik süreçler bu israfları önlemeye çalışırken Çevik Manifestoyu(Agile Manifesto) kullanır. Çevik manifesto tüm çevik süreçlerin kabul ettiği prensipleri ortaya koyar.
Aşağıdaki maddelerde soldakileri sağda yazılanlardan daha önemli tutar.
Bireyler ve iletişim > Kullanılan araçlar ve süreçler
Çalışan yazılım > Kapsamlı dokümantasyon
Müşteri ile işbirliği > İş sözleşmesi üstünde görüşmeler
Değişime hızlı adapte olabilmek > Bir planı takip etmek
‘den daha önemlidir. Bu sağda yazılanların önemsiz olduğu anlamına gelmez fakat solda yazanlar ilk önceliğe sahiptir.
Prensipler :
Çevik süreçlerin ilk önceliği yalın yaklaşımla örtüşecek biçimde kaliteli yazılımı müşteriye teslim edebilmektir. Bu projenin ilk aşamalarından itibaren sürekli teslimlerle yapılır ve müşterinin yazılımı çok önceden kullanmaya başlayarak değer sağlamasına olanak sağlanır. Günümüzde çevik süreçlere artan ilginin başlıca nedenlerden biri , yapılan yatırımların hızlı geri dönüşünün olmasıdır.
Çevik süreçler değişiklikleri projenin ilerki aşamalarında dahi olsa kabul eder. Amaç müşterinin ihtiyaçlarını karşılayan yazılım üretmektir ve ihtiyaçlarda meydana gelen değişiklikler projenin sonraki aşamalarında dahi yazılıma aksettirilmelidir. Test güdümlü tasarım, kapsamlı otomatik testler, sürekli entegrasyon, basit tasarım gibi pratikler sayesinde değişikliklerin getireceği maliyetler minimuma indirilir ve süreç değişikliklere çabuk adapte hale getirilir.
Çevik süreçler çok kısa aralıklarla yazılım teslimleri yapar. Bu aralıklar tipik olarak 2-4 hafta arasıdır. Bu sayede sürekli geri beslenim sağlanır ve müşterinin tam istediği şekilde yazılım evrimleşerek gelişir.
Alan uzmanları , yazılımcılar, testciler günlük olarak birlikte çalışırlar. Farklı roller arasında duvarlar örülmez. Rol bazlı ekipler yerine yazılım özelliklerine göre ekipler oluşturulur. Yazılımcı, analist, yazılım geliştirici aynı ekibin içinde çalışır ve sürekli iletişim halindedir.
Projeler motive bireyler çevresinde kurulur ve ekip üyelerine gereken kendileri ile ilgili alacakları kararlar konusunda güvenilir. Ekip kendi kendine organize olacak yetkiye sahiptir.
Yüzyüze iletişim diğer her türlü iletişim yönteminden önde tutulur.
Projedeki gelişmenin tek ölçüsü o ana kadar geliştirilmiş özellikler ve çalışan yazılımdır.
Çevik süreçler devam ettirilebilir bir hızı sağlamaya çalışır. Planlamaların sağlıklı olması için ekibin iş teslim hızının çok oynanaması gerekir. Örneğin fazla mesailer gibi yöntemlerle ekibin hızını geçiçi olarak arttırmak tercih edilen yöntemler değildir.
Teknik açıdan mükemmel , basit fakat sofistike çözümler oluşturulmasına özen gösterilir.
Ç