Incremental یا Iterative

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

http://blog.irscrum.com/wp-content/uploads/2010/07/patton_incremental_iterative_mnalisa.jpg

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

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

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

در روش 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. اسپرینت ها روح اسکرام هستند . ما Iterative کار می کنیم تا یاد بگیریم و نه اینکه زود به زود یک سری ویژگی به درد نخور تحویل مشتری بدهیم . ما برآیند یک اسپرینت را تحویل مشتری می دهیم و همراه مشتری اسپرینت و برآیند اسپرینت را بازبینی می کنیم تا یاد بگیریم . یاد می گیریم که چگونه یک محصول با ارزش برای مشتری ارائه بدهیم . Mike Cohn یک اصلاح با ارزش دارد :  Get Feedback , Learn and Adapt . این کاملا یعنی روح اسکرام .

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

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

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

یاشیاسیز

اگر به تازگی با چابک یا اسکرام آشنا شده اید پیشنهاد می کنم این کتابچه چند صفحه را بخوانید و اگر مطالب بیشتری نیاز داشتید شاید این مطلب اول تا آخر چابک برای شما مفید باشد.

مطالب را هم دوست داشتید می توانید از طریق این لینک عضو فید دنیای چابک شوید تا مطالب جدید برای شما ارسال شود

در ضمن دوره های آموزشی نیز برگزار می کنیم که شاید برای شما یا تیم شما نیز مفید باشند اگر اینگونه بود خوشحال می شوم با من تماس بگیرید

اسد صفری

اسد صفری – مربی تحول چابک سازمان و تیم های نرم افزاری. مدارک حرفه ای: CSP - CSM - PSM - PSPO - CDA - Management 3.0 برخی تجربیات: رئیس دفتر تحول چابک شرکت داده ورزی سداد(بیشتر از ده تیم نرم افزاری) - مربی چابک شرکت رامند (تیم های موبایل و گیم سازی) - مدیر تولید نرم افزار SimplyDesk برای شرکت فرانسوی PCI - مربی مشاور شرکت های:خدمات انفورماتیک، ارکید فارمد، فراداده، الفبا برخی از سوابق مشاوره کوتاه مدت و تدریس : علی بابا، فناپ، تجارت الکترونیک پارسیان، بیمه سامان، انیستیتو ایزایران، مهندسین مشاور تجارت (بانک تجارت)، بیمه ایران، پارس آنلاین، شرکت رهنما، ورانگر، انتشارات پزشکی کوثر و صنایع ارتباطی آوا، فولا آلیاژی یزد، پارک علم فناوری کردستان و ... . عضو انجمن های بین المللی Agile Alliance - Scrum Alliance

15 دیدگاه

  1. Pingback: توسعه نرم افزار Agile « دنیای چابک

  2. حمیدی فر   •  

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

  3. مریم جاوید   •  

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

  4. احسان   •  

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

  5. سامان   •  

    بسیار خوب توضیح دادید؛ مطالبی که در وبلاگتان منتشر میکنید مرا راغب کرد تا در پروژه بعدی این فریم ورک را پیاده سازی نمایم.

    • admin   •     Author

      حتما، سعی کنید استفاده کنید
      ولی دانش کم در این چارچوب می تونه برعکس جواب بده که بعدا یه نوشته ای در این باره خواهم نوشت

      در هر حال امیدوارم موفق باشید

  6. darya   •  

    عالـــــــــــــــــــــــــــــــــــی بود.ممنونم

  7. pegah   •  

    خیلی خوب توضیح دادین، واقعا استفاده کردم، ممنون 🙂
    در مورد TFS هم توضیح بدین ممنون میشم

  8. Pingback: اسکرام چیست؟ | نوشته‌های روزانه برای زندگی بهتر

  9. مسعود   •  

    سلام

    برام من خیلی مفید بود.
    تشکر می کنم.

  10. سمانه   •  

    ممنووون خیلی خوب بود … مفاهیم رو با مثالتون خیلی خوب فهمیدم

  11. Hediye   •  

    عاااااااااالی بود! تازه فهمیدم چی شده! ترم پیش مهندسی نرم افزار داشتم الان فهمیدم هیچی نفهمیده بودم!

  12. کاظمی   •  

    یاشا
    شادلیقلا
    اوغورلارلا

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *