، میخواهم [کار] تا [ارزش]» است؛ ارزش (بخش «تا») مهمترین قسمت آن است.|معیار INVEST شش شرط کیفیت داستان را میسنجد: مستقل، قابل مذاکره، ارزشمند، تخمینپذیر، کوچک و آزمونپذیر.|جزئیات باید بهموقع اضافه شوند؛ نوشتن جزئیات زودهنگام، هزینهٔ نگهداری و تغییر را بالا میبرد.|نقشهٔ داستان، تصویر کل محصول را میدهد و از داستانهای پراکنده و بیارتباط جلوگیری میکند.|معیار پذیرش خوب، قابل آزمون است؛ اگر نتوان برایش تست نوشت، نیازمندی هنوز روشن نیست.”]
پاسخ سریع: جمعآوری نیازمندی در Agile چگونه انجام میشود؟
در Agile، نیازمندی از طریق گفتوگوی مستمر با کاربر و ذینفع جمع میشود و در قالب داستانهای کوچک و قابلآزمون در بکلاگ قرار میگیرد. هر داستان فقط تا حدی نوشته میشود که تیم بتواند آن را تخمین بزند و در یک اسپرینت بسازد؛ جزئیات دقیق در جلسات پالایش و درست پیش از ساخت اضافه میشوند. این چرخه با بازخورد محصول واقعی اصلاح میشود، نه با امضای یک سند.
چرا نیازمندی چابک با نیازمندی سنتی متفاوت است؟
سه تفاوت بنیادی وجود دارد و هر سه به یک نتیجه میرسند: کاهش هزینهٔ تغییر.
اول، سند جای گفتوگو را نمیگیرد. در نگاه سنتی، سند نیازمندی منبع حقیقت است. در نگاه چابک، سند فقط یادآور گفتوگوست. ران جفریز این را با سه کلمه خلاصه کرد: کارت، گفتوگو، تأیید (Card, Conversation, Confirmation). کارت چیزی است که مینویسید، گفتوگو جایی است که فهم مشترک ساخته میشود، و تأیید همان معیار پذیرش است.
دوم، جزئیات بهتعویق میافتد. نوشتن جزئیات یک قابلیت که شش ماه بعد ساخته میشود، تقریباً همیشه اتلاف است: یا عوض میشود یا فراموش میشود. در Agile، جزئیات در «آخرین لحظهٔ مسئولانه» نوشته میشود.
سوم، نیازمندی با محصول واقعی سنجیده میشود. در مدل سنتی، تأیید نیازمندی یعنی تطابق با سند. در Agile، تأیید یعنی کاربر واقعی از محصول استفاده میکند و نتیجه میگیرد.
> نکته مهم: «نیازمندی تمامشده» در Agile وجود ندارد. بکلاگ یک سند زنده است؛ اگر سه ماه به آن دست نزنید، دیگر نمایانگر نیاز واقعی نیست.
همین امروز به دوایتیفای بپیوندید
پروژهها را بدون سردرگمی پیش ببرید: همهٔ وظایف، پیشرفتها و گزارشهای تیم در یک محیط یکپارچه. ساختهشده برای شرکتها، استارتاپها و تیمهای دورکار — با راهاندازی چنددقیقهای، پشتیبانی فارسی و نسخهٔ آزمایشی رایگان.
داستان کاربر را چطور بنویسیم که به کار بیاید؟
قالب رایج، همان جملهٔ سهبخشی است: «بهعنوان [نقش]، میخواهم [کار] تا [ارزش].» این قالب در اوایل دههٔ ۲۰۰۰ در یک شرکت بریتانیایی شکل گرفت و بعدها به استاندارد رایج تبدیل شد. مایک کوهن، که بیشترین سهم را در رواج آن دارد، تأکید میکند که بخش سوم مهمترین است، چون به تیم میگوید چرا این کار انجام میشود و همین «چرا» راهحل را تعیین میکند.
مثال ضعیف: «بهعنوان کاربر، میخواهم فیلتر جستجو داشته باشم.» این جمله به تیم نمیگوید چه فیلتری، برای چه کسی و برای چه هدفی.
مثال بهتر: «بهعنوان کارشناس پشتیبانی، میخواهم تیکتها را بر اساس زمان انتظار مرتب کنم تا قبل از پاسخ دادن بدانم کدام مشتری بیشتر منتظر مانده است.» حالا تیم میداند مرتبسازی بر چه اساسی است، چه کسی استفاده میکند و موفقیت چه معنایی دارد.
سه اشتباه رایج در نوشتن داستان:
- نقشهای مبهم: «کاربر» برای همهچیز. اگر نقش روشن نیست، ارزش هم روشن نیست.
- جملهٔ راهحل بهجای نیاز: «میخواهم یک دکمهٔ آبی» بهجای «میخواهم سریع بفهمم وضعیت سفارش چیست».
- داستانهای بزرگ با عنوان کوچک: داستانی که در یک اسپرینت جا نمیشود، داستان نیست؛ یک موضوع (Epic) است.
معیار پذیرش: بخشی که داستان را قابل ساخت میکند
معیار پذیرش، فهرست شرطهایی است که اگر همه برقرار باشند، داستان «انجامشده» است. قالب پرکاربرد، ساختار «با فرض… وقتی… آنگاه…» است که از دنیای تست مبتنی بر رفتار آمده و برای نوشتن شرطها بسیار کارآمد است.
مثال برای همان داستان مرتبسازی تیکتها:
- با فرض اینکه ۱۲ تیکت باز دارم، وقتی مرتبسازی بر اساس زمان انتظار را انتخاب میکنم، آنگاه قدیمیترین تیکت بالای فهرست قرار میگیرد.
- با فرض اینکه تیکتی بسته میشود، وقتی فهرست را بازخوانی میکنم، آنگاه تیکت بستهشده در فهرست باز نیست.
- با فرض اینکه دو تیکت زمان انتظار برابر دارند، وقتی مرتب میکنم، آنگاه ترتیب پایدار و قابل پیشبینی است.
اگر نمیتوانید برای یک معیار پذیرش تست بنویسید، آن معیار هنوز شرط نیست؛ یک آرزوست.
معیار INVEST: شش شرط داستان خوب
INVEST در سال ۲۰۰۳ توسط بیل ویک معرفی شد و هنوز سادهترین ابزار سنجش کیفیت داستان است. جدول زیر هر شرط را با یک سؤال عملی نشان میدهد.
| حرف | شرط | سؤال آزمون | نشانهٔ نقض |
|---|---|---|---|
| I | مستقل (Independent) | میتوانم این داستان را بدون دیگری بسازم و تحویل بدهم؟ | داستان فقط با دو داستان دیگر معنا دارد |
| N | قابل مذاکره (Negotiable) | متن داستان جای گفتوگو را باز میگذارد؟ | داستان عملاً یک مشخصات فنی است |
| V | ارزشمند (Valuable) | کاربر یا کسبوکار از آن چه چیزی میگیرد؟ | ارزش فقط «بهروزرسانی فنی» است |
| E | تخمینپذیر (Estimable) | تیم میتواند اندازهاش را بزند؟ | ابهام در دامنه، تخمین را غیرممکن کرده |
| S | کوچک (Small) | در یک اسپرینت جا میشود؟ | بیش از نیمی از ظرفیت اسپرینت را میبرد |
| T | آزمونپذیر (Testable) | میتوانم برایش تست بنویسم؟ | معیار پذیرش وجود ندارد یا مبهم است |
دو نکته دربارهٔ INVEST:
اول، این معیار ابزار گفتوگوست، نه دروازهٔ عبور. داستانی که «کاملاً مستقل» نیست هم میتواند ساخته شود؛ مهم این است که وابستگیاش معلوم و مدیریتشده باشد.
دوم، ارزشمندی را از دید کاربر بسنجید، نه از دید تیم. «مهاجرت به نسخهٔ جدید کتابخانه» برای تیم ارزش دارد، اما داستان کاربر نیست. این نوع کار را میتوان بهعنوان کار فنی (Technical Story) ثبت کرد، اما نباید بخش بزرگی از بکلاگ را بگیرد.
کدام تکنیکها برای جمعآوری نیازمندی کار میکنند؟
هیچ تکنیکی برای همهٔ موقعیتها بهترین نیست. جدول زیر انتخاب را ساده میکند.
| تکنیک | چه زمانی | خروجی | زمان لازم |
|---|---|---|---|
| مصاحبهٔ کاربر | فهم مسئله و زبان کاربر | نقلقولها، نیازهای خام | ۴۵ تا ۶۰ دقیقه به ازای نفر |
| مشاهدهٔ کار واقعی | فهم فرایند پنهان | گلوگاهها و کارهای دورزده | نیم تا یک روز |
| نقشهٔ داستان | دیدن کل سفر کاربر | داستانهای مرتبشده در قالب سفر | یک کارگاه ۳ ساعته |
| مثالسازی | روشن کردن قواعد پیچیده | معیار پذیرش و مثالهای مرزی | ۳۰ دقیقه به ازای داستان |
| نقشهٔ اثر | اتصال هدف به قابلیت | زنجیرهٔ هدف، بازیگر، اثر، تحویل | کارگاه ۲ ساعته |
| طوفان رویداد | فهم دامنهٔ پیچیده و اصطلاحات | نقشهٔ فرایند و واژهنامه | نیم تا دو روز |
| نمونهٔ اولیه | کاهش ابهام تجربهٔ کاربر | بازخورد قابل استفاده | ۳ تا ۱۰ روز |
نقشهٔ داستان: تصویر کل، نه فهرست پراکنده
نقشهٔ داستان (Story Mapping) که جف پاتون آن را رواج داد، داستانها را در دو محور میچیند: محور افقی، ترتیب مراحل سفر کاربر؛ محور عمودی، میزان اهمیت. نتیجه یک تصویر واحد است که هم کل مسیر را نشان میدهد و هم مشخص میکند در نسخهٔ اول چه چیزی لازم است و چه چیزی میتواند صبر کند.
کاربرد اصلیاش تشخیص «داستانهای یتیم» است: داستانهایی که خوب نوشته شدهاند اما در مسیر کاربر جایی ندارند. همچنین جلوی خطای رایج «ساخت همهچیز بهطور نصفه» را میگیرد؛ چون برش نسخه بر اساس مسیر کامل کاربر انجام میشود، نه بر اساس ماژول.
مثالسازی: جزئیات را سر جای خودش بگذارید
مثالسازی (Example Mapping) یک جلسهٔ کوتاه است با چهار نوع کارت: داستان، قاعده، مثال، و سؤال. تیم دور میز مینشیند و برای یک داستان، قاعدهها و مثالهای مرزی را جمع میکند. خروجی، معیار پذیرش آماده است و سؤالهای باز بهصورت شفاف بیرون میافتند.
مزیتش این است که یک جلسهٔ ۳۰ دقیقهای، معمولاً جای یک هفته رفتوبرگشت ایمیلی را میگیرد. عیبش این است که به حضور Product Owner و یک نفر با دانش دامنه نیاز دارد؛ بدون آنها جلسه به حدسزنی جمعی تبدیل میشود.
مثال عددی: برنامهٔ پالایش برای یک تیم ۷ نفره
تیمی با ۷ نفر و ظرفیت خالص ۲۸۰ ساعت در اسپرینت دوهفتهای. بکلاگ ۶۰ داستان دارد و تنها ۱۴ داستان برای سه اسپرینت آینده آماده است.
قاعدهٔ ساده: پالایش باید حدود ۱۰ درصد ظرفیت هر اسپرینت باشد، یعنی ۲۸ ساعت در هر اسپرینت. اگر هر جلسهٔ پالایش ۲ ساعت باشد و ۵ نفر شرکت کنند، هر جلسه ۱۰ نفرساعت مصرف میکند؛ پس ماهی حدود سه جلسه منطقی است.
حالا حساب کنیم چقدر بکلاگ آماده لازم است. اگر سرعت تیم ۹ داستان در اسپرینت باشد و افق آمادهسازی سه اسپرینت باشد، باید همیشه ۲۷ داستان آماده داشته باشد. با ۱۴ داستان آماده، تیم یک اسپرینت و نیم فرصت دارد تا شکاف را پر کند — و این دقیقاً همان جایی است که تیمها دیر متوجه میشوند و اسپرینت را با داستانهای نپخته شروع میکنند.
مثال عددی: شکستن یک داستان ۱۳ واحدی
داستان «مدیریت کامل سفارشها» با تخمین ۱۳ واحد، در اسپرینت جا نمیشود و هر بار نصفه میماند. تیم آن را به سه بخش شکست:
- ثبت سفارش با اعتبارسنجی موجودی: ۵ واحد
- تغییر وضعیت سفارش با تاریخچه: ۳ واحد
- لغو سفارش با بازگشت موجودی: ۳ واحد
مجموع ۱۱ واحد، اما نکتهٔ مهم این است که هر سه بخش مستقل قابل تحویلاند. حالا اگر ظرفیت اسپرینت ۱۰ واحد باشد، دو بخش اول تحویل میشود و بخش سوم به اسپرینت بعد میرود؛ بدون اینکه چیزی نیمهکاره رها شود.
قاعدهٔ عملی شکستن: داستان را بر اساس مسیر کاربر بشکنید، نه بر اساس لایهٔ فنی. شکستن به «ساخت دیتابیس، ساخت API، ساخت رابط کاربری» هیچ ارزشی در پایان اسپرینت تحویل نمیدهد.
مثال عددی: هزینهٔ تغییر نیازمندی در زمانهای مختلف
یک قاعدهٔ تجربی رایج در مهندسی نرمافزار میگوید هزینهٔ رفع یک نقص یا تغییر نیازمندی، هرچه دیرتر کشف شود، چند برابر میشود. اگر هزینهٔ اصلاح در مرحلهٔ نیازمندی را ۱ واحد بگیریم، در مرحلهٔ طراحی حدود ۵ واحد، در مرحلهٔ ساخت حدود ۱۰ واحد و بعد از انتشار میتواند به ۲۰ تا ۱۰۰ واحد برسد.
این اعداد دقیق نیستند و به پروژه بستگی دارند، اما جهتشان روشن است. کاربرد مدیریتی: اگر پالایش و مثالسازی، ۱۰ درصد ظرفیت را بگیرد و تنها ۲۰ درصد تغییرها را زودتر کشف کند، در پروژهای با ۱۰۰ تغییر، ۲۰ تغییر از هزینهٔ ۱۰ واحدی به ۱ واحدی منتقل میشود — صرفهجویی معادل ۱۸۰ واحد کار نسبت به حالت بدون پالایش.
نیازمندی غیرکارکردی را کجا بنویسیم؟
کیفیت، امنیت، کارایی و دسترسپذیری، نیازمندی غیرکارکردیاند و در بکلاگ چابک اغلب فراموش میشوند، چون داستان کاربر بهطور طبیعی به عملکرد میپردازد.
سه راه عملی: اول، معیار پذیرش هر داستان را با یک شرط کیفیت تکمیل کنید («پاسخ زیر ۳۰۰ میلیثانیه برای ۹۵ درصد درخواستها»). دوم، برای نیازمندیهای سراسری مثل امنیت، یک «تعریف انجامشده» مشترک بسازید که همهٔ داستانها را ملزم کند. سوم، برای نیازمندیهایی که به تصمیم معماری نیاز دارند، یک داستان فنی مستقل با معیار سنجش بنویسید.
چطور نیازمندی را از راهحل جدا کنیم؟
بیشتر نیازمندیهای بد، در واقع راهحلاند که بهجای نیاز نوشته شدهاند: «یک دکمهٔ خروجی اکسل اضافه شود» بهجای «میخواهم هر هفته گزارش فروش را بدون بازسازی دستی داشته باشم». تفاوت مهم است، چون راهحل اول شاید فقط یکی از پنج راه ممکن باشد و تیم را از گزینهٔ بهتر محروم کند.
یک تمرین سهخطی برای جدا کردن این دو:
- بنویسید چه چیزی امروز درد دارد: «هر دوشنبه دو ساعت صرف جمع کردن گزارش از سه فایل میکنم.»
- بپرسید نتیجهٔ مطلوب چیست: «گزارش تا ساعت ۹ صبح آماده و قابل اتکا باشد.»
- حالا راهحلها را فهرست کنید: خروجی خودکار، اتصال مستقیم به منبع داده، یا حتی تغییر ساعت جلسه. گاهی بهترین راهحل، سادهترین و ارزانترین است و اگر از ابتدا راهحل را در داستان قفل کرده باشید، هرگز دیده نمیشود.
این کار به تیم آزادی میدهد راهحل ارزانتر پیشنهاد بدهد و به Product Owner کمک میکند ارزش را بسنجد. در داستان کاربر، بخش «تا» جایی است که ارزش نوشته میشود؛ اگر آن بخش را با نام یک قابلیت پر کنید، نیازمندی به راهحل تبدیل شده است.
اشتباهات رایج در جمعآوری نیازمندی چابک
اول، نوشتن همهٔ جزئیات از قبل. بکلاگ ۲۰۰ صفحهای که کسی آن را نمیخواند، هزینه است نه دارایی.
دوم، تبدیل داستان به مشخصات فنی. وقتی داستان شامل جزئیات پیادهسازی میشود، تیم از حل مسئله منع میشود و نوآوری از بین میرود.
سوم، نداشتن Product Owner در دسترس. اگر پاسخ سؤالها یک هفته طول بکشد، پالایش بیاثر میشود و تیم حدس میزند.
چهارم، داستان بدون معیار پذیرش. «انجامشده» به سلیقه تبدیل میشود و در مرور اسپرینت، بحث بر سر تفسیر آغاز میشود.
پنجم، جمعآوری نیازمندی فقط از مدیران. نیاز واقعی معمولاً در کار روزمرهٔ کاربر دیده میشود، نه در جلسهٔ مدیران.
نیازمندیها را کجا نگه داریم؟
بکلاگ وقتی کار میکند که داستان، معیار پذیرش، اولویت، تخمین، وضعیت پالایش و وابستگیها کنار هم باشند. اگر این اطلاعات در سه فایل و دو پیامرسان پخش شوند، هر برنامهریزی به یک جلسهٔ بازیابی اطلاعات تبدیل میشود.
دوایتیفای محصول ماست و طبیعتاً از نزدیک با آن آشنا هستیم. برای تیمی که میخواهد بکلاگ، اسپرینت، معیار پذیرش و گزارش پیشرفت را در یک محیط ببیند، ترکیب بورد و تسک، زیرتسک و چکلیست، اسپرینت و بکلاگ و مستندات پروژه نقطهٔ شروع منطقی است. اما اگر تیم شما چهار نفر است و ماهی یک نسخه منتشر میکند، یک بورد ساده و یک فایل مشترک هم کافی است؛ ابزار پیچیدهتر از نیاز، خودش به یک بدهی فرایندی تبدیل میشود.
چکلیست کیفیت بکلاگ
| سؤال | اگر پاسخ «نه» است |
|---|---|
| آیا هر داستان نقش، کار و ارزش دارد؟ | بخش «تا» را بازنویسی کنید |
| آیا هر داستان معیار پذیرش قابل آزمون دارد؟ | یک جلسهٔ مثالسازی بگذارید |
| آیا داستانها در یک اسپرینت جا میشوند؟ | داستانهای بزرگ را بشکنید |
| آیا برای سه اسپرینت آینده داستان آماده دارید؟ | ظرفیت پالایش را افزایش دهید |
| آیا نیازمندیهای غیرکارکردی در تعریف انجامشده هست؟ | تعریف انجامشده را تکمیل کنید |
| آیا Product Owner در دسترس روزانه است؟ | دسترسپذیری را توافق کنید |
سوالات متداول
جمعبندی
جمعآوری نیازمندی در Agile، نوشتن سند کامل نیست؛ ساختن فهم مشترک در زمان درست است. داستان کاربر، نقش و ارزش را روشن میکند؛ معیار پذیرش، آن را قابل آزمون میسازد؛ INVEST کیفیتش را میسنجد؛ و نقشهٔ داستان مطمئن میشود که این داستانها به یک محصول منسجم میرسند.
اگر امروز فقط یک کار میکنید، این باشد: سه داستان بعدی بکلاگ را بردارید و برای هرکدام یک معیار پذیرش با قالب «با فرض… وقتی… آنگاه…» بنویسید. اگر نتوانستید، آن داستان هنوز آماده نیست و ساختنش فقط زمان میبرد، نه ارزش میسازد.
اگر موضوع جمعآوری نیازمندی در Agile برایتان مفید بود، پیشنهاد میکنیم آیا Salesforce ابزارهای مدیریت پروژه دارد؟ و آیا Hubspot نرم افزار مدیریت پروژه دارد؟ را هم بخوانید.
همین امروز به دوایتیفای بپیوندید
پروژهها را بدون سردرگمی پیش ببرید: همهٔ وظایف، پیشرفتها و گزارشهای تیم در یک محیط یکپارچه. ساختهشده برای شرکتها، استارتاپها و تیمهای دورکار — با راهاندازی چنددقیقهای، پشتیبانی فارسی و نسخهٔ آزمایشی رایگان.