در این مقاله به بررسی چالش تخمین در iteration ها می پردازیم. یکی از چالش های برنامه ریزی برای انتشار ، برآورد سرعت تیم است.
در تخمین زدن به جای استفاده از یک عدد، از یک بازه استفاده کنید.
سه روش جهت برآورد تخمین وجود دارد:
- استفاده از تخمین های گذشته
- اجرای iteration
- پیش بینی کردن
استفاده از تخمین های گذشته
تخمین های گذشته عالی هستند اما قبل از استفاده از آنها از خودتان سوالات زیر را بپرسید
- آیا فناوری یکسان هست ؟
- آیا domain ( حوزه – دامنه مساله) یکسان است ؟
- آیا تیم یکسان است ؟
- آیا صاحب محصول یکسان هست ؟
- آیا ابزارها یکسان هستند ؟
- آیا محیط کار یکسان است ؟
- آیا تخمین ها توسط همان افراد انجام شده است ؟
اگر جواب شما “مثبت” است تخمین های گذشته به شما خیلی کمک می کنند و قابل اعتمادند
اجرای iteration
از آنجا که بهترین راه پیش بینی سرعت ، مشاهده واقعی سرعت است ، این رویکرد همیشه باید پیش فرض ما برای تخمین باشد
تیم با اجرای 3 یا بیشتر iteration می تواند به ساده ترین شکل محدوده سرعت خود را مشخص کنند.
شکل زیر حاصل تجربیات Mike Cohn است که به آن مخروط عدم قطعیت گفته می شود.
این مخروط به شما عدم قطعیت تخمین هایی که جهت برآورد سرعت هر iteration برآورد شده ، را نشان می دهد
همانطور که می بینید در iteration اول عدم قطعیت بین 60% تا 160% می تواند باشد یعنی اگر سرعت شما در iteration اول 30 باشد ، با توجه به مخروط عدم قطعیت سرعت شما بین 18 تا 48 می تواند تغییر پیدا کند و در iteration بعد این بازه 15% کمتر می شود.
جدول زیر بیانگر این موضوع است و می تواند به شما در تخمین دقیق تر کمک نماید.
پیش بینی کردن
مواقعی وجود دارد که ما نمی توانیم چند اجرا iteration را انجام دهیم و تخمین های گذشته ای هم وجود ندارد یا با شرایط ما تطابق ندارد و باید سرعت تیم را برآورد نماییم.
به عنوان مثال فرض کنید قرار است پروژه ای را به زودی شروع نمایید و با مشتری برای عقد قرار داد و مشخص کردن شرایط پروژه جهت زمان بندی ملاقات نمایید و کار را تمام نمایید.
در چنین مواردی 2 کار می خواهیم انجام دهیم
- می خواهیم هزینه ها را به حداقل برسانیم
- هر تخمینی از سرعت ، سطح بالایی از عدم اطمینان را نشان می دهد.
در چنین شرایطی ما سرعت را باید پیش بینی نماییم ، پیش بینی کردن معمولا به ندرت اتفاق می افتد اما در صورت بروز چنین شرایطی مراحل زیر را باید انجام دهیم.
- تعداد کل ساعاتی که هر شخص برای کار در دسترس خواهد بود را تخمین بزنیم
- تعداد کل ساعاتی که در طول یک iteration صرف خواهد شد را مشخص نماییم
- حال داستان هایی تصادفی انتخاب نماییم و برای آنها شروع به Tasks زدن می نماییم تا یک iteration پر شود (توجه فرمایید که تنوع داستان ها تصادفی مهم هستند به عنوان مثال هم داستان هایی که مربوط به واسط کاربری هستند وجود داشته باشد هم داستان های مربوط به پایگاه داده )
- سرعت تعیین شده در مرحله قبل را به یک محدوده تبدیل نمایید (به کمک مخروط عدم قطعیت)
نکته ای که وجود دارد در تخمین ساعتها برای افراد تیم باید در نظر گرفته شود که تقریبا هر کس مسئولیت هایی به غیر از انجام پروژه دارد. به عنوان مثال پاسخ به ایمیل ها یا تماس های تلفنی یا شرکت در جلسات و … ، زمانی که برای هر فرد تیم صرف می شود سازمان به سازمان متفاوت می باشد.
با این حال اعضای تیم معمولا 100% وقت خود را بر روی کار پروژه صرف نمی کنند
افرادی که تمام وقت به یک پروژه اختصاص داده می شوند بین 4 تا 6 ساعت از روز خود را بر روی پروژه صرف می کنند افراد به طور متوسط 55% از وقت خود را در نهایت کندی به فعالیت بر روی پروژه اختصاص می دهند و در نهایت بهروری و کارآمدی 80% را روی پروژه کار می کنند
برای برآورد زمان افراد می توان از این اعداد استفاده کرد.
منبع: کتاب Agile Estimating and Planning / نوشته Mike Cohn.