Agile Yönteme Geçiyoruz. Hayat Daha Güzel Olacak !

Teknoloji çağında neredeyse her gün yeni bir kavram, yeni bir teknoloji ya da yazılımdan haberdar oluyoruz. Hızla gelişen ve her geçen gün hızına ivme katan teknoloji dünyasını takip etmek ve yeniliklere adapte olmak da zorlaşıyor.  Fazla geriye gitmeden son beş on senede sıkça duymaya başladığımız bir çok kavram hayatımıza girdi. Akıllı sistemler, NFC vb teknolojiler,  Big Data, Drone, Devops gibi kavramlar hızlı bir şekilde popülerleşti. Bu teknolojilerden bazıları üstüne katarak gelişirken bir kısmı da  popülerliğini kaybedebiliyor. Birkaç sene önce sıkça duyduğumuz Big Data kavramı artık eskisi kadar dillendirilmemektedir. Big data’dan vazgeçilmiş değil, şahsi fikrim ileri de duymaya devam edeceğiz. Büyük şirketler bu alana yönelip sadece bu alanda çalışacak ekipler oluşturuyor ancak aktif ve başarı olarak –en azından takip etmeye çalıştığım büyük firmalar arasında- duyduğumuz bir çalışma yok. Eğer big data ilginizi çekiyorsa big data ile ilgili verilerin de yer aldığı “2017’de Big Data Projelerinin %60’ı Başarısız Olacak” isimli çalışmayı okuyabilirsiniz. Bu kısa girişten sonra yukarıdaki kavramlar gibi son zamanlarda daha çok duymaya başladığımız bu yazının konusuna gelebilirim :Agile. Türkçeye çevik yöntem olarak çevirilen Agile projenin varolmaya başlamasından bitirildiği son ana kadar ki süreci belirleyen bir yöntemdir.

On altı senelik bir geçmişi olan Agile proje yönetim süreçlerinin belirlenmesi amacıyla 2001’de guru sayılan 17 kişi  tarafından 12 maddeden oluşan manifesto hazırlanmıştır. Manifesto paydaşlar arası iletişim ve işbirliği, güncellenebilen yazılımlar, ekibin kendisini organize edebilmesi, ve değişimlere adapte olabilmesine vurgu yapar. Agile çerçevesi kesin hatlarla belirlenip  ve yalın üretim(lean manufacturing) prensipleriyle netleştirilmiş waterfall gibi süreçlere karşı yeni bir çözüm olarak ortaya çıkmıştır.

Agile yöntem, zamanı yönetmeyi, müşteriyi sürece dahil etmeyi, yüksek işbirliğini, esnekliği, ürünlerin düzenli production’a alımını, sürecin ve üretimin beraber devam edecek şekilde gelişimini önemser. Waterfall gibi süreçlerde iş hatları daha belirgin ve değişkenken agile ile daha çok söz sahibi ve daha esnek bir iş yapış süreci mevcuttur. Daha az çalışma değil işin değişme imkanı da dikkate alındığı için daha esnektir :)  Bir proje ile ilgili ihtiyaç ve hedefler proje sürecinde güncellenebiliyor; değişebiliyor. Bu da sürecin değişime açık ve esnek olmasını zorunlu hale getiriyor. Esnek olması ürün sahibi ve ürünü ortaya çıkaracak ekip için de bu yöntemi cazip hale getiren etkenlerden bir tanesi. Scrum da ilk zamanlarda geleneksel, ardışık yaklaşımlara karşı daha esnek bir yapıda olunmasıyla tanıtılan bir yaklaşımdı. Ancak günümüz yazılım projelerinde dökümantasyon ve sprintler gibi sıkı denebilecek bir metodoloji olarak görülmektedir.   Proje yönetimi, proje üretimi ve yazılım geliştirme takımlarının sayısının artması da geleneksel waterfall metodolojisinden agile metodolijlerine yöneltiyor.  Aslında agile, scrum metodolojlerinden biridir. Scrum, agile hareketinin bir parçasıdır. Agile ve Scrum birbirilyle ilişkilidir ancak farklı yönleri de vardır.

Agile, agile menifestosunda belirtilen prensiplerin iterasyonlar halinde yazılımın geliştirilmesidir. allmethodologies

Scrum ise yazılım geliştirme sürecinde takip edilecek özel kurallar bütünüdür. Agile de iş ve teknik taraf diye iki taraf yerine o işin sorumlusundan geliştiricisine kadar bir takım vardır.

Waterfall eşyayı her katta görevlendirilen birisine aktararak eşyayı taşımaya benzerken agile’da asansörle eşyanın parça parça daha hızlı bir şekilde yukarıya çıkması gibidir.

Agile elbet her derde deva olmayabilir ama yazılım projelerini tüm paydaşlar açısından daha balşarılı ve kaliteli bir şekilde sonuçlandırma adına faydaları vardır. Müşteri açısından bakacak olursak  daha kısa sürelerde ürünün belli kısımlarını üretim ortamında kullanmaya başlayabilir. Inception fazında projenin tüm paydaşları ve özellikle de yazılım ekibiyle beraber ihtiyaçlar belirlendiği için istekleri net bir şekilde anlaşılmış olur. Scrum’da yazılım ekibi analiz safhasında yer almadığı için yazılım açısından uygulanabilirlikten dolayı bazı ihtiyaçlar proje ortasında yapılacak işler arasından çıkarılıyordu. İki ya da üç haftalık periyotlarda öncesinde müşteriye demo yapılarak ürünün belli kısımları üretim ortamına alınır. Bu sayede ürünü kullanmak için projenin sonlandırılması beklenmez.

Geliştirme Ekibi de bu yöntemin mutlu olacak taraflarından biridir. Inception fazında ihtiyacın ne amaçla istendiğini bildiği için yaptığı geliştirmenin business tarafına da hakim olacaktır. Yazdığı yazılımın kullanımı ve değerini daha aktif görebilirler. Analiz süreci ve –kullanılmayacak olan- dökümanların hazırlanması süreci ortadan kalkmış olur. Müşterinin kullanacağını bildiği ve değerini inception fazında gördüğü için daha keyifli çalışmaya başlarlar.Projenin diğer paydaşları için de faydaları sıralamak zaten uzun olacak bu yazıyı daha da uzatacağı için o konuya girmiyorum :)

Yukarıda saydığımız agile yöntemin avantajlarının yanında bazı zorlukları da vardır : Raporlanması, finansal yönetimi, zaman ve kaynak yönetimi, müşterinin artık sürece dahil olması, değişikliğin her zaman yapılabilmesi, net bir planın olmaması. Bu zorlukların hepsini tek tek açıklayabiliriz ancak zorluk olmalarının ortak özelliği sürecin esnekliği ve güncellenebiliyor olmasıdır. Agile yöntemde belirlenmiş, kesin çizgiler yoktur.

Agile ile ilgili özellikle üzerinde durulması gereken iki kavram var: User Stories (Kullanıcı Hikayeleri) ve Iterations. Iterasyondan kısaca bahsettiğim için burada kullanıcı hikayelerinden bahsedeceğim. Zira bu kısım önemli. Ürün backlog’unu oluşturmak için en popüler yöntemlerden biri müşteri ya da kullanıcının gereksinimlerinin küçük açıklamalar  ile yazıldığı user storyler şeklinde hazırlanmasıdır. Kullanıcı hikayeleri ürünün müşterileri ya da kullanıcının perspektifinden gereksinimin kısa ve basit olarak ifade edilmesidir. Kullanıcı hikayeleri yazılım dilinden öte müşterinin diliyle oluşturulur. Kullanıcı neyi neden istiyor sorusunun cevabı bulunmaya çalışılır. Yazılım ekibi ve projenin tüm paydaşlarının hem fikir olacağı kullanıcı hikayeleri neticesinde yapılacak projenin kapsamı tahmin edilir. Bu kullanıcı hikayelerinin eforu belirlenerek iki haftalık iterasyonlarla üretim ortamına alınır.

Waterfall, Kanban, Scrum ve Agile Hakkında Kısa Karşılaştırmalar

Waterfall metodolojisinde geliştirme başlamadan tüm gereksinimlerin analiz edilip dökümante edilmesi gerekir. Agile’da ise gereksinimler kısa iterasyonlar halinde geliştirilir ve değiştirilebilir. Geliştirme öncesi bir handshake durumu yoktur. Agile development öncesi geçirilen uzun zaman periyotlarını ortadan kaldırır. Ayrıca uzun geliştirme süreçlerinde ortaya çıkabilecek –analizde olmayan, kaçınılmaz- değişiklerin bir problem olarak ortaya çıkmasını engeller.  Waterfall’de analizde yazılan herşeyi birebir ürün haline getirmiş olabilirsiniz. Bu geliştiren takım için başarılı bir sonuçtur. Ancak müşteri tarafında ihtiyaç değişmiş olabilir ve ortaya konan ürün kullanılmayacak bir ürün olabilir.  Bu şekilde üretici ihtiyacını karşılamadığı , geliştirici efor sarfettiği, proje yönetimi ise kaynak ayrılan bir ürünün kullanılmayacak olmasından mutsuz olur.

Kanban ise Scrumdan biraz daha esnektir. Kanbanda yürütülen bir süreç kolayca Agile a dönüştürülebilir. Kanbanda bir tahta üzerinden süreç yönetilir : progresstestingready for release ve released aşamaları vardır. Eğer etkili ve uzun bir proje süreci olacaksa Scrum ama zaten süregelen bir proje ise kanban kullanılabilir. Scrum ve Agile buz ile su gibi benzerdir. Scrum ve kanban da agile yazılım metodolojilerinin özelleştirilmiş halidir. Scrum ve kanbanı karşılaştırmak ise iki ayrı agile metodolojisini karşılaştırmak gibidir.

methodologies

Sonuç olarak bu metodoloji ve toolların temelde bir amacı var : Projeleri daha verimli, kaliteli ve mutlu bir şekilde sonuçlandırmak. Bu sebeple küçük bir proje için use story’ler için biraraya gelip işin tüm bireylerini biraraya getirmek yerine Kanban belki waterfall bile daha etkili olabilir. Eğer başka birimlere bağımlığınız fazla ve beraber yürüyemeyecek bir süreçse –bence yine de tercih etmeyin waterfall tercih edilebilir.

Son olarak üç tip yöntemde de çalışmış biri olarak Agile yöntemin diğerlerinden çok daha iyi olduğunu düşünüyorum. Tabii burada Agile yöntemlerin tamamiyle uygulanmaya çalışılmasıyla iyi bir şekilde proje yönetilebilir. Esnek diye sürekli geliştiriciye müşteri yeni istek istedi agile yapıyoruz bunu da hemen çıkmamız gerekiyor denilen bir ortamda geliştirici nasıl mutlu olamazsa, her işe uzun eforlar verip esnekliği rahata dönüştüren bir ortam da müşteri için memnun edici bir süreç olmayacaktır.

Çevik süreçler dileğiyle..

Bir kaç link :

http://canertosuner.com/post/kisaca-agile-nedir-neler-gerektirir

https://www.mountaingoatsoftware.com/agile

https://www.smartsheet.com/agile-vs-scrum-vs-waterfall-vs-kanban

Leave a Reply