Agile Yazılım Geliştirme (Scrum, Kanban ve XP) Temel İlkeleri Nelerdir ?
Scrum, Kanban ve Extreme Programming konusuna ve farklarına daha önceki yazımızda değinmiştik. Fakat yazılım geliştirme modellerinin temelindeki agile(çevik) ilkelerden detaylı bahsetmedik. Temel ilkelerin orjinaline bu linkten erişebilirsiniz.
Bu blogu okumadan önce yazılım geliştirme süreçleri ve fazları hakkında önceden yayınlamış olduğum aşağıdaki 4 yazıyı okumanızı öneririm.
- Yazılım Geliştirmenin Fazları
- Yazılım Geliştirme Modelleri
- Neden Farklı Yazılım Geliştirme Modelleri Var?
- Kanban, XP, Scrum Arasındaki Farklar
Bu yazı öncesinde üzerine vurgulayarak söylemek istediğim konu, her ürün ve proje için Agile(Çevik) modellerin uygun olmayacağıdır. Bu yazıyı okurken agile(çevik) uygun bir yazılım geliştirdiğinizi düşünün.
Bu yazıda Çevik(Agile) geliştirme modelleri birbirinden farklılıklar içersede temelde aşağıdaki ilkelerde oy birliği sağlamış olmalarıdır. Bu değerli grup😃 aşağıdaki manifestoyu yayınladı.
Bu manifestodan da göreceğiniz gibi çevik yazılım geliştirme öncesi yazılım geliştirme modellerinden bir takım farklılıklarını sağ kısımdaki koyu ve daha büyük harflerle belirtmişler ve bunları daha değerli görmüşler.
- Süreçler ve araçlardan ziyade — Bireyler ve Etkileşimlere
- Kapsamlı dökümantasyondan ziyade — Çalışan Yazılıma
- Sözleşme Pazarlıklarından ziyade — Müşteri ile İşbirliğine
- Bir Plana Bağlı Kalmaktan Ziyade — Değişeme Karşılık Vermeye
Bu manifestoyu doğru şekilde anlamayıp, aşağıdaki ilkelere içselleştirmeyen şirketler her ne çevik süreci işlettiğini düşünüyorsa düşünsün başarılı olamaz.
İşin ruhuna sahip olmadıkları için Agile(Çevik) süreçleri sözde uygulamış, sonra başarısız olunca, kendi kendilerine çevik süreçler uyguladık neden başarız olduk diye sormaya başlarlar. 😃
Şimdi bahsedilen ilkelere birlikte bakalım;
1. İLKE
En önemli önceliğimiz
değerli yazılımın erken ve devamlı teslimini sağlayarak
müşterileri memnun etmektir.
Çevik (Agile) bildirinin merkezinde müşterinin yer aldığını görebilirsiniz.
- Değerli yazılım derken temelde para vb.. somut kazançlar sağlayacak ürünün/yazılımın erken ve sürekli müşteriye ulaştırması,
- Özünde müşterilerinizi mutlu etme,
- Problemleri en erken safhalarda tespit etme,
- Geribildirimler ile ürünü doğru yola sokma çabasıdır.
2. İLKE
Değişen gereksinimler yazılım sürecinin son aşamalarında bile kabul edilmelidir.Çevik süreçler değişimi müşterinin rekabet avantajı için kullanır.
Bu ilke de yine müşteriyi memnun etme çabası vardır. Çünkü müşteri istediği ürünü en başta tarif ederken tam olarak ne istediğini bilmiyor olabilir.
Yazılım şekillendikçe ve ortaya çıktıkça, müşterilerin ürün hakkında daha çok ve kaliteli yorum yaptığını görebilirsiniz.
Bu değişimleri teknolojik gelişmelerden dolayı veya siz projeyi geliştirirken rakiplerinizin, pazarın durumu, ve bir çok konu gereksinimlerinizi değiştirme yolunda tetikleyebilir.
Bu değişimi yazılımın her aşamasında karşılamayı ve kabul etmeye hazır olunmalıdır.
3. İLKE
Çalışan yazılım, tercihen kısa zaman aralıkları belirlenerek
birkaç haftada ya da birkaç ayda bir düzenli olarak müşteriye sunulmalıdır.
Agile(Çevik) Geliştime modelinde kısa zaman aralıklarında düzenli olarak müşterinin önüne çalışabilir uygulamalar sunarak, müşteriden geribildirimler ile Analiz → Tasarım → Gerçekleştirim kısmını tekrar ederek tekrar müşterinin karşısına çıkmayı hedefler.
Not: Çevik geliştirme modeli işletim sistemlerinin geliştirilmesinden, askeri yazılımlara çok geniş alanda yer bulmaktadır.
Bu yazılımların çevik geliştirme yöntemini kullandığını şurdan anlayabilirsiniz;
Yazılım Güncellemesi, İşletim Sistemi Güncellemesi gibi çok sık aralıklar ile güncellemeler yapılıyor ise geliştirme modeli temelinde Agile Model üzerine kurgulanmıştır.
4. İLKE
İş süreçlerinin sahipleri ve yazılımcılar proje boyunca her gün birlikte çalışmalıdırlar.
Yazılım geliştirme bir ekip işidir. Geliştiren ekip, bakım ekibi ve aşağıda bahsettiğim grupların birbirleri ile uyumlu ve senkron çalışması ürünün daha kaliteli ve müşterinin istediği gibi ortaya çıkması sağlanır. Son kullanıcı ürünü kullanarak bir nevi gereksinim ve diğer testleri yaparak geliştirme ekibine geribildirimlerde bulunur.
Not: Çevik olmayan geliştirme modellerinde de ekipler birlikteydi ama bu ekipler de daha katman katman yapılar ve bir hiyerarşi söz konusu idi, çevik yöntem ise bu grupları birbirlerine harmanlayarak, hiyerarşiyi ortadan kaldırarak daha etkileşimli çalışmalarını önerir.
Aşağıdaki resmi bir çoğunuz hatırlıyorsunuz belki 😃
İşte buna benzer bir sonuçla karşılaşmamak için yukarıda bahsettiğim yazılım paydaşlarının her bir resim çerçevesinde bir arada olmaları çok çok önemlidir.
5. İLKE
Projelerin temelinde motive olmuş bireyler yer almalıdır. Onlara ihtiyaçları olan ortam ve destek sağlanmalı, işi başaracakları konusunda güven duyulmalıdır.
Bu ilke bence çok çok önemli, bakın bu ilke ile müşteri ve ürün odağından ekibe yöneldik. Yani 5nci ile ekibe odaklandı. Ekibin motive olmuş bireylerden oluşması, ihtiyaçları olan ortam ve desteğin sağlanması ne demek ?
Burada kastedilen donanım ve fiziksel araç gereç değil.
Zaten ekibinize bütçeniz doğrultusunda işleri yapabilecek en iyi fiziksel ortamı, araç gereçleri sağlamanız hem kişinin kendisini değerli hissetmesine sebep olacak, hem de işleri daha hızlı sorunsuz hale getirecektir. Bu ilkede esas işi verdiğiniz kişilere duyduğunuz GÜVEN’den ve o kişilere bu güveni hissetirmenizden bahsediyor. Aşağıdaki soruların cevapları bu açından çok önemli;
- Ekip veya ekipteki kişiler birbirine şüphe ile mi bakıyor ?
- Yöneticiler verdiğiniz tahminlemelere inanmıyor mu ?
- Size gerekli yetkileri veya bu yetkileri nasıl kullanacağınız konusunda bilgi verilmiyor mu?
- Bir problemle karşılaştığınızda olaya bireysel mi yaklaşılıyor? Şuçlama ile mi yaklaşılıyor ?
- Bireyler ile konuşmadan arka planda bilgi birikimini yedeklemeye mi çalışıyorlar ?
Yani yukarıda yazılanlara benzer durumları ekip bir arada açık bir şekilde konuşmuyor ve arkaplanda bunlar yaşanıyor ise, ekipteki bireylerin motivasyonun uzun süreli olması beklenemez.
6. İLKE
Bir yazılım takımında bilgi alışverişinin en verimli ve etkin yöntemi yüzyüze iletişimdir.
4ncü ilkede de bundan bahsetmiştik ama bu ilkede özellikle yüzyüze kelimesine vurgu yapılıyor.
Özellikle remote çalışma ile birlikte, kurumsal şirketlerde bir takım dokümanlar veya araçlar üzerinden asenkron iletişim yöntemleri sıkça kullanılmaya başlandı. Slack, ePosta vb.. Yönetim araçları online sistemler üzerinden kişiler bir birini görmeden yapılmaya çalışılıyor. Bu şekilde geliştirme yöntemi çevik yöntemde önerilmez.
Ekibin bir arada olması, aynı anda yüz yüze konuşarak ortamda fikirlerini ve geribildirimlerini almaları, bu kısımlarda anlaşılmayan konuların üzerinde konuşularak ve tartışılarak daha net hale getirilmesi amaçlanmaktadır.
Not: Buradan da şu sonuç çıkmasın bir takım araçların kullanılması Örneğin Git, ePosta, Wireframe/Sketch vb.. araçların kullanılması reddetmiyor. Sadece bunun dengesini iyi ayarlamamızı söylüyor.
- Örneğin bir Wireframe/Sketch tasarımları yapıldı Invision, Figma vb araçlar ile bu araçlar üzerinden herkes bu tasarımları görebiliyor, burdan yorumları ve bu yorumlara cevaplarıda yazabiliyoruz. Fakat bunu bir dengede tutmak önemli. Yeri geldiğinde ara ara yüz yüze toplantılar yapılıp, tasarımın ve yorumların ne olduğunu yüz yüze konuşmanın öneminden bahsediyor.
- Yazılım geliştirdiniz ve yazılıma PR açtınız, bu PR’a bir takım yorumlar veriliyor bu yorumları sürekli asenkron çevaplayıp çözmek yerine belki birlikte pair yaparak yüz yüze çözmek bir çok konunun veye yorumun daha net anlaşılmasını sağlayacaktır.
Özetle hangi ekip içerisinde veya rolde yer alırsanız alın, Test , Kalite Kontrol, Mimari, Ürün, Analiz, Market, Satış Pazarlama vb.. aklımızdaki şeyleri dokuman ile yazışarak anlatmak çoğu zaman mümkün değildir, bu nedenle yüzyüze iletişimi bir ilke haline benimsemek çok önemlidir.
7. İLKE
Çalışan yazılım ilerlemenin birincil ölçüsüdür.
Çevik Model çalışan ürünü hem geribildirim almak açısından hem de geliştirme ekibinin motivasyonu açısından ilerlemenin birincil ölçüsü olarak ele alır.
Aşağıda ki 2 farklı modele bakalım. Waterfall Modelinde her bir fazın daha uzun sürede, belli işlere odaklanmış kişilerce bir fazda yapıldığını ve ürünün son aşamada müşterinin karşısına çıktığını görebilirsiniz.
Farklı alanda özelleşmiş bireyler (Örneğin Planlama Grubu) bir arada çalışırken , çıktılarını diğer gruba aktaran bir modeldir, Riskleri fazladır.
Agile yönteme baktığımızda farklı farklı alanlardan ve yetenekteki kişilerin bir araya gelerek ortak geliştirimleri yaptığı, hep çalışan bir ürünü ayakta tutmaya çalıştıklarını görebilirsiniz.
Yeni yazılım mimarileri de Örneğin microservice ve microfrontends yaklaşımları hep bu yöndedir. Hatta projeyi modüller halinde parçalayarak parallel geliştirme ve canlıya çıkma süreçleri (CI/CD) çevik yöntemler ile inanılmaz bir hıza ulaşmıştır. Bu da en ufak bir değişimin hemen müşteriye yansıtılıp geri bildirim alabilmemizi sağlar. (Örneğin A/B Testing vb..)
Özetle dokümanlar değil çalışan yazılıma öncelik verilmelidir.
8. İLKE
Çevik süreçler sürdürülebilir geliştirmeyi teşvik etmektedir. Sponsorlar, yazılımcılar ve kullanıcılar sabit tempoyu sürekli devam ettirebilmelidir.
Sürdürebilirlik çok çok önemli bir konu. Çünkü yazılım geliştirme, ürünün hayatta kalması sürekli kullanılması, güncellenmesi ve değer yaratması ile ilgilidir.
Yazılım sistemleri canlıdır. Yazılımcılar ve kullanıcılar aslında bu yazılımı hayatta tutmak için uzun bir maraton koşmaktadır. Bu maratonda tükenmemek için sabit tempoyu uzun süre devam ettirebilmeli, motivasyonu ve ürün geliştirmeye devam edilmelidir. Aksi taktirde kullanılmayan kısımlar zaman içerisinde ölecektir.
9. İLKE
Teknik mükemmeliyet ve iyi tasarım konusundaki sürekli özen çevikliği artırır.
Yazılım konusunda teknik mükemmeliyet ve iyi tasarım konusunda sürekli özen göstermek çevikliği arttırır. Peki bunu nasıl yapacağız ? Bu konu derin ve detaylı bir konu aşağıdaki yazıları okuyarak konuyu daha net anlaşılabileceğini düşünüyorum.
10. İLKE
Sadelik, yapılmasına gerek olmayan işlerin mümkün olduğunca arttırılması sanatı, olmazsa olmazlardandır.
Çevik olabilmeniz için olabildiğince üzerinizde az yük olması gerekir. Sade bir şekilde işleri yapıyor ekstra yazılımı hiç bir şey katmıyor olmak çok önemli;
- Süreçler
- Ekip
- Yönetim
- Gereksinimler
- Mimari ve Kod Tasarımlarınız
- UI Tasarımlarınız
- Kod
- Dokümantasyon
- Test
- vb…
yazılımın parçalarını oluşturan her kısmın sade ve yalın olması gerekir. Bunun için bir kaç yöntemden bahsetmek istiyorum.
- MVP (Minimum Viable Product)
- Overengineering (Bunu ilerde AntiPatterns kısmında bahsediyor olacağım)
- KISS, YAGNI.
KISS (Keep It Simple, Stupid): Kodu olabildiğince basit ve sade bir şekilde sadece işi yapacak şekilde geliştirmek. YAGNI(You aren’t gonna need it) Extreme Programlamanın temellerinden olan bu yöntemde gerekmiyorsa fazladan bir fonksiyon ekleme. Bu 2 yöntemde de geleceğe yönelik overengineering yaparak karmaşık sistemler tasarlamamak üzerine
DRY (Don’t repeat yourself): Kodunuzda farklı modülün içerisinde benzer fonksiyonalitede yapılar bulunur, bunları her modülde tekrar yazmanız kod tekrarı(code dublication) neden olacaktır. Olabildiğince belli işlerin sorumluluğunu ilgili modüllere vererek abstraction iyi sağlamak gerekiyor.
11. İLKE
En iyi mimariler, gereksinimler ve tasarımlar kendi kendini örgütleyen takımlardan ortaya çıkar.
Bir takım kendi kendini örgütleyip, gereksinim yönetimi, tasarım, gerçekleştirim, test, deployment vb… kısımları kendi kararlar alarak ortaya çıkartırsa, bir o kadar içselleştireceği anlamına gelir.
Bu nedenle
- birbiri ile koordineli bir ekip,
- kendi kararlarını,
- kendi süreçlerini,
- dinamiklerini,
- geleneklerini
ortaya koymuş ekiplerden en iyi mimariler ve ürünler çıkar. Bu tarz ekipler self-organized dır.
12. İLKE
Takım, düzenli aralıklarla nasıl daha etkili ve verimli olabileceğinin üzerinde düşünür ve davranışlarını buna göre ayarlar ve düzenler.
Bu ilkeyi önceki ilkeler ile birlikte düşününce, zaten self-organized(kendini örgütleyen bir ekip ise), aynı zamanda işleri
- daha hızlı
- daha kaliteli
- daha güvenli
- daha eğlenceli
- daha müşterinin istediği
hale getirmek için ve verimliliğini arttırmak için sürekli bir çaba içerisinde olacaklardır. Bu ilke özellikle verimlilik üzerinde durmaktadır.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.