scrum etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
scrum etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Pazar, Kasım 16, 2008

Kişisel Hayatta Scrum

Scrum'un en faydalı yönlerinden biri de kolayca özelleştirilerek yazılım geliştirme projelerinin dışında da uygulanabilmesi. (Scrum hakkında daha fazla bilgi için). Bence bunun en önemli sebebi Scrum'un çok fazla kural ve kaidesinin olmaması ve temel prensiplerinin insanların düşünce ve çalışma yapısına uygun olması. Örneğin Maryland üniversitesinden Michael Hicks and Jeffrey S. Foster Scrum'u doktora öğrencilerinin katıldığı akademik araştırma gruplarında uygulamak üzere SCRAM adı altında özelleştirmişler.

Bunun gibi örneklerle karşılaştıkça ve Scrum hakkında daha fazla bilgi edindikçe acaba "Scrum'u kişisel hayatıma uygulayacak şekilde nasıl özelleştirebilirim?" diye düşünmeye başladım. Ufak bir araştırma sonucunda bu düşünceyi bir çok insanın hayatına uyguladığını ve olumlu sonuçlar elde ettiklerini gördüm. Ve Scrum'u aşağıdaki şekilde özelleştirip elimden geldiği kadar günlük hayatıma uygulamaya başladım;
  • İlk adım olarak kısa zamanda yapmam gereken ve 6 aylık zaman içerisinde yapmayı planladıklarımı öncelik sırasına göre yazarak bir liste oluşturdum (Product Backlog). Bu listeye zaman içerisinde yeni şeyler ekliyorum, yapmaktan vazgeçtiklerimi çıkarıyorum veya öncelik sıralarını değiştiriyorum. (Bunun için bir text dosyasını veya bir template olarak bu excel dosyasını kullanabilirsiniz.)
  • İkinci adım olarak her pazar akşamı o hafta içerisinde yapmayı planladıklarımı bu listeden alıp ve herbir iş bitirmem için gereken zamanı tahmin ederek ayrı bir liste oluşturuyorum. (Sprint Backlog). (Yine bunun için basit bir text dosyasını veya bu excel dosyasını kullanabilirsiniz.)
  • Ve her akşam yatmadan önce Sprint Backlog'u inceleyip, bitirdiğim işleri işaretleyerek Scrum'un en faydalı adımı olan Daily Sprint Meeting'i uyguluyorum.
  • Bugün neler yaptım?
  • Neler yapmayı plandıklarıma engel oldu ve nelerle karşılaştım?
  • Yarın neler yapacağım?
Yaklaşık 3-4 haftadır uyguluyorum ve gerçekten faydasını görmeye başladım. Eğer siz de zamanı iyi kullanamadığınızı, işlerin bir türlü yetişmediğini ve kendinize zaman ayıramadığınızı düşünüyorsanız Scrum'u kendize göre özelleştirip uygulayabilirsiniz, eminim ki daha ilk haftadan faydasını görmeye başlayacaksınız.

Kaynaklar:
http://agilesoftwaredevelopment.com/
http://www.cs.umd.edu/~mwh/papers/hicks08scram.html
http://www.agileadvice.com/archives/2006/07/personal_scrum.html

Çarşamba, Ekim 22, 2008

Agile Yazılım Geliştirme ve Scrum

Hepimiz içinde bulunduğumuz projelerde çeşitli sorunlarla karşı karşıya kalıyoruz. Bu sorunlar projelerin zamanında bitirilememesine, müşterinin isteklerine uymayan yazılımlar üretilmesine ve hatta projelerin başarısız olmasına bile sebep olabiliyorlar. Ben kişisel olarak projelerin gidişatına ciddi etkilerde bulunan sorunların kaynağının geleneksel yazılım geliştirme süreçleri olduğunu düşünüyorum. İşte bu yazımda başlıktan da anlaşılabileceği gibi yazılım geliştirme süreçlerinden kaynaklanan sorunlara çözüm olarak üretilen Agile Yazılım Geliştirme'den ve Scrum'dan kısaca bahsedeceğim.

Projelerde karşılaştığım sorunlardan konumuza uygun olanları şu şekilde sıralayabilirim;
  • teknolojinin çok hızlı gelişmesi ve bu yeniliklerin projeye uygulanamaması
  • müşterilerin proje başlangıcında büyük resmin tamamını yani bütün gereksinimleri ortaya koyamamaları
  • müşterilerin gereksinimlerinin çok çabuk ve sık değişmesinden dolayı müşterilerin güncel ihtiyaçlarına cevap veremeyen bir yazılım ortaya çıkması
  • projelerin yönetiminin gittikçe daha zor ve karmaşık hale gelmesi (bir yazılım geliştirme sürecinde 102 ayrı role'un olduğunu duymuştum)
Dünyanın her köşesindeki yazılım geliştirme takımı gibi bu sorunlarla karşılaşan 17 profesyonel Amerika'nın Utah eyaletinde çözüm üretebilmek, müşteri memnuniyetini arttırabilmek ve başarısız olan projelerin oranını düşürmek için 2001 yılının Şubat ayında bir araya geliyorlar ve aşağıdaki manifestoyu ortaya koyuyorlar;

The Agile Manifesto We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

• Individuals and interactions over processes and tools
• Working software over comprehensive documentation

• Customer collaboration over contract negotiation

• Responding to change over following a plan


That is, while there is value in the items on the right, we value the items on the left more.


Copyright 2001, the Agile Manifesto authors


(daha fazla bilgi için agilemanifesto.org)

Manifestonun açıkca belirtiği gibi Agile geliştirme sürecinin amacı; plan, dökümantasyon, proses ve araçlardan ziyade müşteri memnuniyeti, çalışan yazılım, uyumlu yazılım geliştirme takımı ve müşteri isteklerinde oluşan değişikliklere göre kısa zamanda geliştirilebilecek yazılımlar üretmek (buradan Agile yazılım geliştirmenin plansız, dökümansız yazılım geliştirmeyi teşvik ettiği sonucuna varmamak gerekiyor çünkü Agile yazılım geliştirme sadece bunlardan daha önemli kavramların olduğunu vurguluyor). "Agile yazılım geliştirme" süreçlerin, dökümanların ve dizaynların proje başlangıcında tümüyle tanımlanmasını değil, geliştirme aşamasında karşılaşılan ve değişen koşullara göre gerekli kararların verilmesi gerektiğini savunuyor.

Scrum'u Agile yazılım geliştirme metodunun yukarıda bahsettiğimiz presiplerine uygun olarak geliştirilmiş ve tasarlanmış bir metod olarak tanımlayabiliriz. (Diğer metodlardan XP ve Lean Software Development hakkında detaylı bilgilere buradan ve buradan ulaşabilirsiniz). Scrum diğer agile yöntemleri gibi çok fazla kuralı olmayan, sadece belirli prensipleri olan ve kolayca projelere uygulanabilecek bir yöntem.

Scrum'un genel akış şeması;


Scrum'ı sadece yazılım geliştirmek için değil hayatta karşılaşabileceğiniz her türlü olaya uygulanabilecek bir yöntem olarak düşünebilirsiniz. Şimdi kısaca yukarıdaki şemada geçen kavramları genel bir Scrum planlaması ve akışı içinde adım adım anlatmaya çalışacağım.

1- Roller (Roles)

  • Ürün Sahibi (Product Owner)
  • Scrum Yöneticisi (Scrum Master)
  • Takım Üyesi (Team Member)

2- Toplantılar (Meetings)

  • Sprint Planlama (Sprint Planning)
  • Sprint gözden geçirme (Sprint Review)
  • Günlük Scrum toplantısı (Daily Scrum)

3- Kavramlar (Artifacts)

  • Ürün gereksinim dökümanı (Product Backlog)
  • Sprint dökümanı (Sprint Backlog)
  • Sprint kalan zaman grafiği (Burndown Chart)

Projenin başlangıç adımı olarak yazılım gereksinimlerinin (requirements, features) ürün sahibi tarafından ürün gereksinim dökümanına yazılmasını düşünebiliriz. Bu dökümanın sahibi ürün sahibidir ve gereksinimleri önceliklerine (priority) göre sıralar. Ürün sahibi bu dökümana yazılım geliştirme süresince eklemeler ve çıkarmalar yapıp öncelikleri değiştirme hakkına sahiptir. Böylece ürün sahibi değişen ihtiyaçlarına uygun olarak bir yazılıma sahip olma şansını yakalamış olur.

Gereksinimler belirlendikten sonra yazılım geliştirme takımı Sprint planlama toplantısında bir sonraki Sprint'de geliştirilmek üzere ürün gereksinim dökümanından ürün sahibinin belirlediği yüksek öncelikli gereksinimleri seçerek Sprint dökümanına aktarırlar. Bu toplantıya Scrum yöneticisi, ürün sahibi ve takım üyeleri katılırlar ve Sprint süresi en az 2 en fazla 4 hafta olarak belirlenir.

Sprint planlama toplantılarıScrum yöneticisi yönetir. Scrum yöneticisinin asıl görevi Scrum'un temel prensiplerinin projeye uygulanmasını, bu prensiplerin takım üyelerince doğru şekilde anlaşılmasını sağlamaktır. En önemli görevi ise Sprint süresince takımı dışardan gelebilecek etkilere karşı korumak ve takımın ihtiyaçlarını karşılamaktır.

Scrum her Sprint'in sonunda mutlaka ürün sahibine kullanabileceği bir yazılım sağlamayı hedefler, bundan dolayı planlanan Sprint süresi (2-4 hafta) asla uzatılmaz. Fakat eğer bir gereksinim belirlenen Sprint süresi içerisinde gerçekleştirilemeyecekse bir sonraki Sprint'e aktarılabilir. Ve aynı şekilde eğer Sprint süresi bitmeden Sprint dökümanındaki gereksinimlerin hepsi tamamlanmışsa ürün gereksinim dökümanından yeni gereksinimler Sprint dökümanına aktarılabilir.

Sprint planlama toplatısında belirlenen gereksinimler takım üyelerince küçük görevlere (tasks) bölünerek takım üyelerine geliştirilmek üzere atanır. Scrum takımı geleneksel yazılım geliştirme süreçlerinden farklı olarak kesin rollere (architect, tester, developer, disagner vb.) sahip değildir. Scrum takımındaki bütün üyeler çapraz görevlerde yer alabilirler, böylece kodun tek bir kişiye bağımlılığı riski ortadan kaldırılmış olur. Sprint dökümanının sahibi bu sefer ürün sahibi değil yazılım geliştirme takımıdır, dolayısıyla bu dökümana ürün sahibi değil takım üyeleri katkıda bulunurlar.

Sprint dökümanına aktarılan gereksinimlerin tahmini geliştirme süresi saat bazında takım üyelerince belirlenir ve Sprint boyunca sürekli olarak tahmini bu zamanlar güncellenerek Sprint kalan zaman grafikleri (burndown chart) oluşturulur. Böylece Sprint süresince ürün sahibi ve scrum yöneticisi Sprint'in genel gidişi hakkında bilgi sahibi olur, aynı zamanda takım elemanları da kalan iş sürelerini ve harcadıkları zamanı takip edebilirler.

Scrum'un belki de verimliliği artıran en önemli kavramlarından biri de günlük Sprint toplantılarıdır. Bu toplantılar her gün belirli saatlerde farklı bir takım üyesinin liderliğinde ayak üstü yapılır ve en fazla 15 dakika sürer. Bu toplantılarda her takım üyesi şu 3 soruya cevap verir;

  • Dün ne yaptım?
  • Bugün ne yapacağım?
  • Önümde olan engeller ve karşılaştığım sorunlar neler?

bu toplatılara herkesin zamanında ve davet edilmeden katılması ve uzun sürmemesi çok önemlidir. Bu toplatılar sayesinde takım üyelerinin her biri diğer üyelerin nelerle uğraştığını öğrenme fırsatını edinirler ve çalışacakları işleri diğerleriyle paylaştıkları için işlerine daha iyi konsantre olabilirler.

Her Sprint'in bitiminde ortaya konulan ürün hakkında geri besleme alabilmek için yazılımla alakalı her türlü kişiye (Ürün sahibi, pazarlama, diğer takımlar vs.) açık Sprint gözden geçirme toplantısı yapılır. Bu toplantının amacı yazılımın ürün sahibinin gereksinimlerine uygun olarak geliştirildiğinden emin olmaktır. Bu sayede müşterinin gereksinimleri bir şekilde yanlış anlaşılmış ise bu farkedilir ve bir sonraki Sprint'de bu hataların önüne geçilir.

Bu adımlar ürün sahibinin ürün gereksinim dökümanına yazdığı, zaman içinde geliştirip, değiştirdiği gereksinimler bitene kadar tekrarlanır.

Umarım burada anlattıklarım Agile ve Scrum hakkında bir fikir sahibi olmanızı sağlamıştır. Özellikle Scrum'un projelerinizdeki başarı oranlarını ve kişisel olarak verimliliğinizi arttıracağına inanıyorum. Scrum ve Agile ilgili deneyimlerinizi ve sorularınızı paylaşabilirseniz sevinirim.

Scrum ile ilgili daha detaylı bilgilere aşağıdaki linklerden ulaşabilirsiniz.

Kaynaklar:
http://agilemanifesto.org/
http://www.pragprog.com/titles/pad/practices-of-an-agile-developer
http://en.wikipedia.org/wiki/Agile_software_development
http://www.ibm.com/developerworks/rational/library/08/0701_ellingsworth/
http://scrum-master.com/en/default.aspx
http://www.scrumalliance.org/