خانه > Agile, Scrum > Incremental یا Iterative

Incremental یا Iterative


یکی از سوالات اصلی که در هنگام سوئیچ از روش های قدیمی به Scrum با آن مواجه می شویم Incremental بودن و یا Iterative بودن اسکرام است . به عبارت دیگر ما قرار است به کدامین روش کار کنیم ؟ Incremental یا Iterative . من این سوال را از شما دارم ,  کدام روش ؟ مرد مومن تعریفی از هر دو مقوله ارائه بده تا بتوانیم تصمیم گیری بکنیم : کل تعریف هر دو روش در شکل زیر کاملا مشهود می باشد:

https://sirasad.files.wordpress.com/2010/07/patton_incremental_iterative_mnalisa.jpg

همانطور که 100% متوجه شده اید هر دور روش دقیقا معکوس یک دیگر عمل می کنند . در روش Incremental هدف توسعه یک محصول است اما تکه تکه . به عبارت دیگر ما آخر کار را به صورت قطعی می دانیم (همانطور که در تصویر معلوم شده است ) پس نسبت به دانش اولیه و کاملمان ,  در حال تکمیل قسمتی از محصول به صورت 100% و کامل هستیم . اگر دقت کنید در متد Incremental در سه مرحله ما به نقاشی دست پیدا کردیم . البته در مرحله قسمتی (تکه ای ) از شکل به صورت کامل تمام شده است . یعنی در مرحله دوم دیگر نیاز نیست ما بر روی چشم ها دوباره کار کنیم زیرا که در مرحله قبل تمام شده است . این نوع متد نیازمند یک دید کلی و کامل از نتیجه نهایی می باشد . یعنی بدون طراحی Up-front قبل از شروع به پیاده سازی چنین متدی امکان پذیر نمی باشد .

ولی در متد دوم یا همان Iterative شاهد این هستیم که در هر تکرار کل عکس شاهد دگرگونی می باشد . یعنی ما در هر تکرار بر روی کل عکس کار کرده ایم و در آخر تکرار کل عکس آماده است ولی نه به صورت 100 %  شکل . این نوع متد وابسته به خروجی تکرار قبلی است . به عبارت ساده تر در اول کار ما فقط می خواهیم عکس یک زن را بکشیم ولی طرح نهایی در ذهنمان وجود ندارد  یعنی دانشمان کامل نیست. هر مر حله ای که به جلو می رویم یاد می گیریم و بر اساس یادگیری ها مرحله بعدی را شروع می کنیم . این همان فید بک و Review هایی هست که در اسکرام انجام می شود .

خوب شاید الان بتوانید بگویید که اسکرام برپایه کدام روش می باشد ؟ بلی , اسکرام ترکیبی از هر دوروش می باشد . (درست گفته بودید ؟) . به نظر می رسد متوجه شده باشید که هر دوروش یک سری معایب و مزایای بزرگ دارند :

در روش Incremental ما بخشی از محصول را به صورت کامل تمام می کنیم (مزیت) ولی این تمام کردن نیازمند یک دانش کامل و فراگیر نسبت به کل محصول است که این محصول جز با طراحی های Up-front امکان پذیر نخواهد بود (عیب) { قابل ذکر است که عیب طراحی Up-front این است که در فاز شروعی پروژه زمانی زیادی برای اینگونه طراحی ها باید صرف شود که جز تلف کردن وقت چیزی نیست } . اما در روش Iterative ما نیازی به طراحی Up-front نخواهیم داشت زیرا رفته رفته طراحی میکنیم که اصلاحا به این نوع طراحی Just-In-time-Design اطلاق می شود . ولی در اینگونه طراحی می توانیم در دام کارهای 95% بیفتیم (شاید دیده باشید که پروژه در دو ماه به 95% می رسد ولی 5% پروژه 4 ماه طول می کشد که این همان دام 95% است که هیچ وقت تمام نمی شود ) .

اسکرام برای اینکه بتواند روش کاملی باشد از هر دو روش بهره جسته است . Sprint های یک پروژه همان Iterative های ما می باشند و انجام دادن Feature های داخل هر اسپرینت Incremental ما خواهند بود . به عبارت سادتر در داخل یک Iterative که همان اسپرینت ما می باشد ما شاهد Incremental خواهیم بود .

2 نکته اساسی از نوشته های بالا قابل استنباط خواهد بود که هدف من از نگارش این مقاله فقط تبیین اهمیت این مطالب بوده است و نه ارائه یک سری تعریف کلاسیک :

  1. Feature های داخل هر اسپرینت زمانی که توسط یک نفر از اعضای تیم برای پیاده سازی انتخاب می شوند باید به صورت Incremental کار بشوند . یعنی اینکه باید تمام شود یعنی ویژگی های Done شدن را پیدا کند و کنار گذاشته شود و نه اینکه چند روزی کار شود بعد Stand-By و کار بروی ویژگی دیگر و بعد سوییچ به ویژگی قبلی و چند روزی دوباره کار و بعد دوباره Stand-By . برنامه نویس باید وظایف خود را در قبال ویژگی تمام کند و بلافاصله تست های لازم بر روی ویژگی باید انجام شود و خلاصه هر کاری که لازم است که این ویژگی Done شود باید پی در پی و بدون وقفه انجام شود تا سنت حسنه Incremental به جا آورده شود .
  2. Sprint ها روح Scrum هستند . ما Iterative کار می کنیم تا یاد بگریم و نه اینکه زود به زود یک سری ویژگی به درد نخور تحویل مشتری بدهیم . ما برآیند یک اسپرینت را تحویل مشتری می دهیم و همراه مشتری اسپرینت و برآیند اسپرینت را Review می کنیم تا یاد بگریم . یاد گیری منظور ,  اشتباهات نیست . بلکه یاد می گیریم که چگونه یک محصول با ارزش برای مشتری ارائه بدهیم . Mike Cohn یک اصلاح با ارزش دارد :  Get Feedback , Learn and Adapt . این کاملا یعنی روح اسکرام .

اسکرام واقعا زیباست . ما Incremental کار می کنیم که بتوانیم یک سری ویژگی های محصول را به صورت کامل (Done شده) در آخر اسپرینت برای Review به مشتری ارائه بدهیم . Iterative کار می کنیم که بتوانیم  Feedback های مشتری را دریافت کنیم (Get Feedback) ودر مورد محصول بیشتر یاد بگریم (Learn) {منظور از یادگیری این است که محصول چگونه باید  توسعه داده شود که برای مشتری هایمان با ارزش باشد }  و یادگیری هایمان را در Design اسپرینت های بعدی به کار می گیریم (Adapt) .

در آخر می توانم عرض کنم که من اصلا با بومی سازی اسکرام برای سازمان مخالف نیستم و بلکه بیشتر توصیه می کنم ولی دقت داشته باشید که در طی بومی سازی ,  روح اسکرام و Agile را از بین نبرید .

به امید توسعه محصولات نرم افزاری با ارزش

یاشیاسیز

  1. دسامبر 9, 2010 در 4:32 ب.ظ.

    سلام
    واقعا در قالب مثال ساده خیلی خوب تفاوت بین این دو موضوع طرح شده است .
    ممنونم

  2. مریم جاوید
    دسامبر 20, 2010 در 6:46 ق.ظ.

    خیلی خوب بود. ممنون

  3. احسان
    فوریه 1, 2011 در 4:00 ق.ظ.

    خیلی مفید بود در عین اختصار.

  4. tajfar
    سپتامبر 20, 2012 در 10:10 ق.ظ.

    نتونستم مراتب قدر دانیم رو ابراز نکنم. واقعا عالی بود..ادامه بدین

  5. masoud
    اکتبر 22, 2012 در 7:32 ب.ظ.

    mer30 az in site khobeton
    ma shoam haro nadashtim bayad chi kar mikradim !!!

  6. نسرین قاسمی
    مارس 18, 2013 در 6:54 ق.ظ.

    عااالی ممنون

  1. دسامبر 8, 2010 در 8:54 ق.ظ.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: