/SDLC-Methodologies

Software Development Life Cycle (SDLC) Methodologies

Yazılım Geliştirme Yaşam Döngüsü (SDLC)

Lean, daha az kaynak ile daha çok değer üreterek, tüm organizasyon için israfı azaltmaya, müşteri için değer üretmeye ve sürekli gelişmeye odaklanan bir yaklaşım biçimidir.

  • Değer;

    Müşterinin ödemek istediği şeydir. Müşterinin gerçek veya gizli ihtiyaçlarını keşfetmek çok önemlidir. Bazen müşteriler ne istediklerini bilemeyebilir veya bunu ifade edemeyebilir. Müşterilerin neleri değerli bulduğu keşfedilmelidir.

  • Değer Akışı;

    Sistem içindeki tüm faaliyetler Değer Yaratan, Değer Yaratmayan ve Zorunlu İsraf’lar olarak üçe ayrılır. Gereksiz süreçleri veya adımları azaltarak ve ortadan kaldırarak, müşterilerin tam olarak istediklerini elde etmelerini sağlamak amaçlanmalıdır.

  • Sürekli Akış

    İsrafı değer akışından çıkardıktan sonra kalan adımların akışının kesinti veya gecikme olmaksızın sorunsuz çalışmasını sağlamaktır.

  • Çekme

    Değerin akışını gerçekleştirmek için süreç hızını kontrol etmek önemlidir. Süreç hızının kontrolü ise sistemdeki tüm israflardan arınarak gerçekleşir. Her adım bir önceki adımın müşterisidir ve ondan ürün talep eder. Çekme tabanlı bir sistem, ürünlerin ihtiyaç duyuldukları anda ve sadece ihtiyaç duyulan miktarlarda oluşturulduğu tam zamanında teslimat ve üretimi sağlamaktır.

  • Mükemmellik

    İlk dört adımın gerçekleştirilmesiyle israf önlenir. Ancak mükemmelliğin peşinde koşmanın beşinci adımı, bunların en önemlisidir. Yalın düşünceyi ve sürekli süreç iyileştirmeyi organizasyon kültürünün bir parçası haline getirir. Küçük adımlarla devamlı gelişerek mükemmelliğe yaklaşmayı hedeflemektedir.(Kaizen)

Muda kelimesinin anlamı yararsızlıktır. Müşteri için katma değer yaratmayan ve kaynakları boşa harcayan işlemlerdir. 7 adet israf kategorisi altında toplanmıştır. Amacı israfı önlemektir.

Mura kelimesinin anlamı düzensizliktir. Bir süreçte düzensiz olarak alçalıp azalan üretim yapılmasıdır. Amacı düzenli ve stabil üretimi sağlamaktır.

Muri kelimesinin anlamı aşırı yüktür. Bir üretim elemanına aşırı yük bindirmektir. Amacı aşırı yükü önleyerek, yükü sağlıklı bir şekilde dağıtmaktır.

Yararsız ve kaynakları boşa harcayan 7 israf kategorisi aşağıdakilerden oluşmaktadır;

  • Hatalı Üretim
  • Aşırı Üretim
  • Fazla Stok
  • Bekleme
  • Yararsız işlemler ile aşırı işleme
  • Nakliye ile ürünün gereksiz taşınması
  • Makine yada insanların aşırı hareketi

Agile kısaca;

  • değişime hızlı karşılık verilmesini ve sorunların hızlıca giderilmesini sağlayan,
  • ekip arası iletişimi artırarak anlaşılabilirlik ve uyum sağlayan,
  • kaliteli ürün üretmeyi hedefleyen,
  • ürünü parçalara ayırarak odaklanmayı sağlayan,
  • başarıyı hedefleyen

bir düşüncedir.

  • 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 işbirliğine
  • Bir plana bağlı kalmaktan ziyade değişime karşılık vermeye
  • Yazılımın hızlı ve devamlı teslimi ile müşteri memnuniyeti hedeflenir.
  • Değişen gereksinimler yazılım sürecinin son aşamalarında bile kabul edilmelidir.
  • Geliştirmeler parçalara bölünerek düzenli aralıklarla müşteriye sunulmalıdır.
  • Konuyla ilgili kişiler hergün birlikte çalışmalıdır.
  • Bireylere güven duyulmalı ve motive edilmelidir.
  • Bilgi alışverişinin en önemli yöntemi yüzyüze iletişimdir.
  • Çalışan yazılım en önemli hedeftir.
  • Sabit tempo sürekli devam ettirilmelidir.
  • Motivasyon çevikliliği artırır.
  • Sadelik olmazsa olmazlardandır.
  • En iyi geliştirmeleri kendi arasında uyum sağlayan takımlar ortaya çıkarır.
  • Takım, düzenli aralıklarla nasıl daha verimli olabileceğinin üzerinde düşünür ve gelişmeyi hedefler.

Agile proje yönetim metodolojilerinden biridir. Organizasyonlar, ekipler ve insanlar için karmaşık problemlerin süreçlerini yönetmek için kullanılmaktadır. İhtiyaca yönelik esnek yapısı sayesinde, müşteri ihtiyaçlarına ve değişime cevap vermeyi sağlamaktadır. Bir bütünü parçalayarak, parçaları tekrarlı bir biçimde tamamlamayı hedeflemektedir. Her parça tekrarında, eksiklikler belirlenerek takım içi iletişim ve etkileşimi artırmaktadır. Ayrıca eksikliklerin belirlenmesiyle süreli gelişim sağlanmaktadır. Scrumın temel tasarımını veya fikirlerini değiştirmek, öğeleri dışarıda bırakmak veya Scrum kurallarına uymamak, Scrumın faydalarını sınırlandırarak yararsız hale de getirebilmektedir ve sorunlara neden olabilmektedir.

  • Şeffaflık (Transparency)

    Projenin ilerleyişi, yeni gelişmeleri ve karşılaşılan sorunlar herkes tarafından görülebilir olmalıdır.

  • Denetleme(Inspection)

    Projenin ilerleyiş durumu düzenli olarak kontrol edilmelidir.

  • Uyarlama(Adaptation)

    Proje ve ekip üyeleri değişimlere uyum sağlayabilmelidir.

  • Taahhüt (Commitment)
  • Cesaret (Courage)
  • Odaklanma (Focus)
  • Açıklık (Openness)
  • Saygı (Respect)

Scrum takımı; bir ürün sahibi, bir scrum master ve geliştiricilerden oluşmaktadır. Bir scrum takımında alt takım bulunmamaktadır. Her seferinde tek bir hedefe odaklanan uyumlu bir takımdır. Scrum takımı, çevik olabilecek kadar küçük ve önemli bir işi tamamlayabilecek kadar büyük olmalıdır. Genel olarak 10 veya daha az kişiden oluşmalıdır ve bu küçük takımlar daha iyi iletişim sağlayabilmektedir.

  • Ürün Sahibi (Product Owner)

    Müşteri ve geliştirme takımı arasındaki iletişimi sağlar. Ürün İş Listesini(Product Backlog) oluşturur. Ürün İstek Listesinin şeffaf, görünür ve anlaşılır olmasını sağlar.

  • Scrum Master

    Scrum kurallarını, teorilerini ve pratiklerini iyi bilir ve takımın bu kurallarını uygulaması sağlar. Takımın üretken olmasını sağlar ve verimli çalışmayı engelleyen durumları ortadan kaldırarak bir zaman çerçevesi sağlar.

  • Geliştirme Takımı (Development Team)

    Bir Sprint’e alınan bütün işleri tamamlayacak özelliklere sahip kişilerdir. Sprint backlogu oluştururlar. Kendi kendini organize ederler ve çapraz işlevlidirler.

Sprint Nedir?

Sprintler, fikirlerin değere dönüştürüldüğü scrumın kalbidir. Belirli bir işin tamamlandığı ve incelemeye hazır hale getirildiği zaman sınırlamalı(bir ay veya daha kısa süreli) bir olaylardır. Yeni bir sprint, önceki sprintin bitiminden hemen sonra başlar. Sprint hedefi geçerliliğini yitirirse Sprint iptal edilebilir. Sadece ürün sahibi sprinti iptal etme yetkisine sahiptir.

  • Sprint Planlama (Sprint Planning)

    Sprint planlama sprinti başlatır. Ürün iş listesindeki(Product Backlog) belirlenen gereksinimler, tüm scrum takımının ortak çalışmasıyla küçük görevlere ayrılır. Takımdaki her bir kişinin bu görevleri üzerine alması ile görev dağılımı sağlanır. Bu toplantıya product owner, development team ve scrum master katılır. Bir ay veya daha kısa süreli sprintler oluşturulur. Sprint hedefi, sprint planlama sona ermeden önce kesinleştirilmelidir.

  • Günlük Scrum (Daily Scrum)

    Scrum Takımının, iletişimi artırmak, engelleri tanımlamak için gerçekleştirdiği 15 dakikalık bir etkinliktir. Karmaşıklığı azaltmak için, her iş günü aynı saat ve aynı yerde yapılır. Yaşanan sorunlar konuşulur ve scrum master veya geliştiricilerin yardımıyla sorunlar giderilir. Takım üyelerinden birinin geç kalması veya gelmemesi toplantıyı etkilemez.

  • Sprint İncelemesi (Sprint Review)

    Amacı sprintin sonucunu incelemek, değerlendirmek ve gelecekteki uyarlamaları belirlemektir. Yazılımın ürün sahibinin gereksinimlerine uygun olarak geliştirildiği kontrol edilir.

  • Sprint Retrospective (Retro)

    Amacı kaliteyi artırmanın yollarını aramaktır. Sprint sırasında nelerin iyi gittiğini, hangi problemlerle karşılaşıldığını, problemler için neler yapıldığı ve çözülemeyen sorunlar üzerine tartışılır. Kaliteyi artırmak için en yararlı değişiklikler belirlenir. İyileştirmeler mümkün olan en kısa sürede ele alınır. Bir sonraki sprint için spring backloga bile eklenebilir. Sprint retrospektifi, sprinti sonlandırır.

Agile, şirketlerin daha iyi ürünler geliştirmelerine yardımcı olmaktadır. Sürece daha az odaklanır ve ürünü geliştirmeyi hedefler. Lean ise yalın ve daha iyi ürün kalitesiyle süreci iyileştirmeyi hedefler.

Lean, ürünü teslim eden süreci iyileştirmeye çalışırken, Agile, ürünün kendisini geliştirmeye çalışır. Her ikisi de önemli perspektiflerdir.