محدودیت کار در جریان (WIP): چرا کار هم‌زمانِ کمتر، تحویل سریع‌تر است

محدودیت کار در جریان (WIP): چرا کار هم‌زمانِ کمتر، تحویل سریع‌تر است
در این مقاله می‌خوانید
  1. کار در جریان یعنی چه و محدودیتش یعنی چه
  2. چرا کار هم‌زمانِ کمتر زودتر تمام می‌شود
  3. قانون لیتل، بدون فرمول ترسناک
  4. هزینهٔ رفت‌وبرگشت بین کارها
  5. صف‌های پنهان
  6. عدد اول را چطور انتخاب کنیم
  7. وقتی به سقف خوردید چه کنید
  8. اعتراض‌های رایج و پاسخ‌شان
  9. «یعنی وقتی منتظرم، بیکار بنشینم؟»
  10. «کارهای فوری چه می‌شوند؟»
  11. «محدودیت ما را کند می‌کند»
  12. «ما اسکرام کار می‌کنیم، به ما ربطی ندارد»
  13. اندازه بگیرید و تنظیم کنید
  14. برنامهٔ دوشنبه
  15. جمع‌بندی
  16. منابع و مطالعهٔ بیشتر

تابلویی را تصور کنید که ستون «در حال انجام» آن بیست‌وچند کارت دارد و تیمش پنج نفر است. هر کس هم‌زمان روی چهار یا پنج کار «کار می‌کند»، جلسهٔ روزانه پر از «هنوز رویش هستم» است و هفته‌ها می‌گذرد تا کارتی به ستون آخر برسد. همه سرشان شلوغ است، ولی مشتری چیزی تحویل نمی‌گیرد.

این مشکل تنبلی یا کم‌کاری نیست؛ مشکل شروع کردن بیش از حد است. در تیم‌هایی که با آن‌ها کار کرده‌ام، تغییری که کمترین هزینه و بیشترین اثر را داشت نه ابزار تازه بود و نه فرایند تازه؛ یک عدد کوچک بالای ستون بود: محدودیت کار در جریان. این مقاله توضیح می‌دهد چرا این عدد جواب می‌دهد، چطور انتخابش کنید و وقتی به سقفش خوردید دقیقاً چه کنید.

اگر هنوز تابلوی کانبان را راه نینداخته‌اید یا می‌خواهید ستون‌هایتان را از نو بچینید، اول راهنمای جامع کانبان را بخوانید؛ این مقاله یکی از اصول همان راهنما را عمیق‌تر باز می‌کند.

کار در جریان یعنی چه و محدودیتش یعنی چه

کار در جریان (Work in Progress یا WIP) یعنی هر کاری که شروع شده و هنوز تمام نشده است. کارتی که در ستون «در حال توسعه» است، کارتی که منتظر بازبینی کد مانده و کارتی که «فقط یک تست کوچک دیگر» لازم دارد، همه کار در جریان‌اند. کارت‌های بک‌لاگ هنوز شروع نشده‌اند و کارت‌های «انجام‌شده» تمام شده‌اند؛ این دو گروه حساب نمی‌شوند.

محدودیت کار در جریان یک قرار ساده است: در هر ستون (یا گروهی از ستون‌ها) حداکثر چند کارت می‌تواند هم‌زمان باشد. اگر ستون «در حال توسعه» سقف ۳ دارد و سه کارت در آن است، هیچ‌کس کارت چهارم را وارد نمی‌کند، حتی اگر وقت آزاد داشته باشد. به‌جایش کمک می‌کند یکی از آن سه کارت جلو برود.

این همان تفاوت «هل دادن» و «کشیدن» است. در سیستم هل‌دادنی، هر کس کارش را تمام کرد آن را به مرحلهٔ بعد پرتاب می‌کند و سراغ کار تازه می‌رود، بی‌توجه به اینکه مرحلهٔ بعد ظرفیت دارد یا نه. در سیستم کشیدنی، هر مرحله فقط وقتی کار تازه برمی‌دارد که جا داشته باشد. محدودیت WIP ابزاری است که سیستم را کشیدنی می‌کند.

چرا کار هم‌زمانِ کمتر زودتر تمام می‌شود

شهود اولیهٔ اغلب مدیران برعکس است: «اگر همه روی چند کار باشند، هیچ‌کس بیکار نمی‌ماند و در مجموع کار بیشتری انجام می‌شود.» مشکل این است که «سرشلوغ بودن» با «تحویل دادن» یکی نیست. سه دلیل اصلی دارد.

قانون لیتل، بدون فرمول ترسناک

قانون لیتل (Little’s Law) از نظریهٔ صف می‌آید و در شکل ساده‌اش می‌گوید: در یک سیستم پایدار، میانگین زمان انتظار هر کار برابر است با تعداد کارهای در جریان تقسیم بر سرعت خروج کار. فرض کنید تیمی به‌طور میانگین هفته‌ای ۵ کارت تمام می‌کند:

کارت‌های در جریان خروجی هفتگی میانگین زمان هر کارت از شروع تا پایان
۲۰ ۵ ۴ هفته
۱۰ ۵ ۲ هفته
۵ ۵ ۱ هفته

این اعداد فرضی‌اند و قانون لیتل دربارهٔ میانگین در یک سیستم نسبتاً پایدار حرف می‌زند، نه دربارهٔ تک‌تک کارت‌ها. ولی جهتش قابل اعتماد است: با همان آدم‌ها و همان سرعت، اگر کارِ باز کمتری داشته باشید، هر کار زودتر به دست مشتری می‌رسد. کار بیشتری انجام نمی‌دهید؛ کار را زودتر تحویل می‌دهید، و این برای مشتری فرق بزرگی است.

هزینهٔ رفت‌وبرگشت بین کارها

هر بار که برنامه‌نویسی از یک کار به کار دیگر می‌رود، باید دوباره بفهمد کجا بود، کدام فایل‌ها باز بود و چه تصمیمی گرفته بود. این هزینه در هیچ گزارشی دیده نمی‌شود، ولی هر کسی که هم‌زمان سه تسک باز داشته، آن را حس کرده است. پژوهش‌های روان‌شناسی دربارهٔ چندکارگی انسان هم نشان می‌دهند جابه‌جایی بین کارها رایگان نیست. محدودیت WIP تعداد این جابه‌جایی‌ها را به‌طور طبیعی کم می‌کند.

صف‌های پنهان

بیشتر وقتِ یک کارت صرف انتظار می‌شود، نه کار. کارت توسعه‌اش تمام شده و دو روز منتظر بازبینی است؛ بازبینی شده و سه روز منتظر تستر است. وقتی ستون‌ها سقف ندارند، این صف‌ها بی‌صدا بزرگ می‌شوند. وقتی سقف دارند، صف به‌سرعت پر می‌شود و همه می‌بینند گلوگاه کجاست. محدودیت WIP در اصل یک زنگ خطر است، نه یک قانون اداری.

عدد اول را چطور انتخاب کنیم

هیچ فرمول جادویی‌ای برای عدد درست وجود ندارد و کسی که عدد دقیق را از بیرون به شما بدهد، تیمتان را نمی‌شناسد. ولی یک روش شروع ساده جواب می‌دهد:

  1. وضع موجود را بشمارید. امروز در هر ستون چند کارت هست؟ این عدد را یادداشت کنید.
  2. کمی پایین‌تر از آن شروع کنید. اگر در ستون توسعه ۹ کارت است و ۴ برنامه‌نویس دارید، سقف را ۵ یا ۶ بگذارید، نه ۲. محدودیتی که از روز اول تیم را خفه کند، در هفتهٔ دوم کنار گذاشته می‌شود.
  3. ستون‌های انتظار را هم حساب کنید. اگر ستونی مثل «منتظر بازبینی» دارید، یا برایش سقف جدا بگذارید یا آن را با ستون قبلی یک گروه حساب کنید. وگرنه کارها آنجا تلنبار می‌شوند.
  4. دو هفته صبر کنید و بعد تنظیم کنید. عدد را هر روز عوض نکنید.

یک چیدمان نمونه برای تیمی با چهار برنامه‌نویس و یک تستر:

ستون سقف توضیح
بک‌لاگ بدون سقف هنوز شروع نشده؛ حساب نمی‌شود
آمادهٔ شروع ۶ کارت‌هایی که شفاف‌اند و می‌شود برداشت
در حال توسعه ۴ تقریباً یک کارت برای هر نفر
بازبینی کد ۲ اگر پر شد، برنامه‌نویس‌ها اول بازبینی می‌کنند
تست ۲ ظرفیت یک تستر
انجام‌شده بدون سقف کار تمام‌شده

یک نکته دربارهٔ سقف شخصی در برابر سقف ستونی: قانون «هر نفر حداکثر دو کار» هم بهتر از هیچ است، ولی سقف ستونی معمولاً بهتر کار می‌کند، چون آدم‌ها را تشویق می‌کند به کار هم کمک کنند، نه اینکه فقط سهم خودشان را خالی کنند.

اندازهٔ کارت‌ها هم مهم است. اگر یک کارت سه هفته کار دارد، سقف ۴ یعنی ستون یک ماه قفل می‌ماند. کارت‌ها را به اندازه‌ای بشکنید که در چند روز تمام شوند؛ در مقالهٔ کارت خوب چه شکلی است روش شکستن کارت‌های بزرگ را مفصل گفته‌ام.

وقتی به سقف خوردید چه کنید

لحظهٔ حقیقت همین‌جاست. کسی کارش را تمام کرده، ستون بعدی پر است و او نمی‌تواند کارت تازه بردارد. اینجا تیم‌ها یا یاد می‌گیرند یا سقف را بی‌سروصدا بالا می‌برند. ترتیبی که پیشنهاد می‌کنم:

  1. از راست به چپ نگاه کنید. نزدیک‌ترین کارت به «انجام‌شده» را پیدا کنید. چه چیزی جلویش را گرفته؟
  2. کمک کنید همان تمام شود. بازبینی کد، نوشتن تست، بررسی یک باگ، یا جفت شدن با همکاری که گیر کرده.
  3. مانع را برطرف کنید. اگر کارتی منتظر جواب کسی بیرون از تیم است، پیگیری‌اش هم کار است.
  4. اگر واقعاً کاری از دستتان برنمی‌آید، سراغ کارهای بی‌صف بروید: بدهی فنی کوچک، مستندسازی، آماده کردن کارت‌های بعدی.
  5. سقف را بالا نبرید، مگر اینکه بعد از دو هفته الگو تکرار شده باشد و دلیلش را بفهمید.

در جلسهٔ روزانه این گفت‌وگو شکل خیلی ساده‌ای دارد: «ستون تست پر است؛ چه کسی امروز می‌تواند به تست کارت پرداخت کمک کند؟» به همین دلیل پیشنهاد می‌کنم جلسهٔ روزانه را پای تابلو و از ستون آخر به اول برگزار کنید، نه نفر به نفر.

کارت‌های مسدود چه؟ کارتی که منتظر تصمیم مشتری است هنوز کار در جریان است و باید در سقف حساب شود. اگر حسابش نکنید، تیم انگیزه‌ای برای رفع مانع ندارد و ستون پر از کارت‌های «فعلاً منتظر» می‌شود. یک برچسب رنگی «مسدود» بزنید تا در نگاه اول دیده شود، ولی آن را از شمارش بیرون نگذارید.

اعتراض‌های رایج و پاسخ‌شان

«یعنی وقتی منتظرم، بیکار بنشینم؟»

نه. یعنی به‌جای شروع کار تازه، کمک کنید کار باز تمام شود. در عمل تقریباً همیشه کاری برای کمک هست. و اگر واقعاً نیست، ده دقیقه بیکاری بهتر از کارت نیمه‌کاره‌ای است که دو هفته در ستون می‌ماند.

«کارهای فوری چه می‌شوند؟»

یک ردیف یا ستون «فوری» با سقف ۱ بسازید. کار فوری از صف جلو می‌زند، ولی فقط یکی در هر زمان. اگر هر هفته چند کار «فوری» دارید، مشکل در برنامه‌ریزی است، نه در محدودیت.

«محدودیت ما را کند می‌کند»

هفتهٔ اول ممکن است این‌طور به نظر برسد، چون تیم به شروع کردن عادت دارد و حالا باید تمام کند. معیار درست تعداد کارت‌های شروع‌شده نیست؛ تعداد کارت‌هایی است که به «انجام‌شده» رسیده‌اند و مدتی که هر کدام در راه بوده.

«ما اسکرام کار می‌کنیم، به ما ربطی ندارد»

اسپرینت خودش نوعی محدودیت است: فقط کارهای همان اسپرینت. ولی درون اسپرینت هم می‌شود ده کار را هم‌زمان باز کرد و روز آخر با ده کار نیمه‌تمام رسید. سقف WIP درون اسپرینت هم مفید است. اگر بین دو روش مردد هستید، مقالهٔ اسکرام یا کانبان تفاوت‌ها را کنار هم گذاشته است.

اندازه بگیرید و تنظیم کنید

محدودیت WIP یک آزمایش است و آزمایش بدون اندازه‌گیری فقط سلیقه است. دو عدد کافی است:

  • زمان چرخه: از لحظه‌ای که کارت واقعاً شروع شد تا لحظه‌ای که واقعاً تمام شد. برای این کار باید تاریخ شروع و پایان واقعی را ثبت کنید، نه فقط سررسید؛ در مقالهٔ تاریخ برنامه‌ای در برابر تاریخ واقعی توضیح داده‌ام چرا این دو باید جدا باشند.
  • خروجی: چند کارت در هفته به «انجام‌شده» رسید.

بعد از دو هفته نگاه کنید. اگر کارت‌ها مدام در یک ستون منتظر می‌مانند ولی آدم‌ها هم مدام بیکارند، سقف احتمالاً خیلی تنگ است؛ یکی بالا ببرید. اگر صف ستونی مدام بلند می‌شود و زمان چرخه بالا می‌رود، سقف را یکی پایین بیاورید یا ببینید آن مرحله ظرفیت کم دارد.

در بردماگ هر کارت فیلدهای شروع و پایان برنامه‌ای و واقعی دارد، پس زمان چرخه از خود کارت‌ها درمی‌آید. قفل خودکار WIP ندارد؛ ما عدد سقف را در نام ستون می‌نویسیم، مثل «در حال توسعه (۴)»، و چون تابلو برای همه بی‌درنگ به‌روز می‌شود، هر کس پیش از کشیدن کارت می‌بیند ستون پر است یا نه. تجربهٔ من این است که قرار تیمی از قفل نرم‌افزاری مهم‌تر است: تیمی که قانع نشده، راه دور زدن قفل را هم پیدا می‌کند.

برنامهٔ دوشنبه

  1. کارت‌های هر ستون را بشمارید و روی کاغذ بنویسید.
  2. با تیم پانزده دقیقه بنشینید و برای ستون‌های میانی سقف بگذارید؛ کمی پایین‌تر از وضع فعلی.
  3. عدد را در نام ستون بنویسید تا همه ببینند.
  4. قرار بگذارید: «وقتی ستون بعدی پر است، کار تازه شروع نمی‌کنیم؛ کمک می‌کنیم.»
  5. برای کارت‌های مسدود یک برچسب مشترک تعریف کنید.
  6. تاریخ شروع و پایان واقعی کارت‌ها را از همین هفته ثبت کنید.
  7. دو هفته بعد یک جلسهٔ کوتاه بگذارید: کجا گیر کردیم و سقف کدام ستون باید عوض شود؟

جمع‌بندی

محدودیت کار در جریان یکی از ارزان‌ترین تغییراتی است که یک تیم می‌تواند بدهد: نه هزینه دارد، نه ابزار خاصی لازم دارد. کاری که می‌کند ساده است: تیم را از «شروع کردن» به «تمام کردن» می‌برد، صف‌های پنهان را آشکار می‌کند و گلوگاه را جلوی چشم همه می‌گذارد. عدد اول مهم نیست؛ مهم این است که وقتی به سقف خوردید، به‌جای بالا بردن سقف، بپرسید چه چیزی جلوی کار را گرفته است.

منابع و مطالعهٔ بیشتر

کار تیم‌تان را روی BoardMug ببینید

تابلوی کانبان راست‌چین، ستون اسپرینت با تاریخ برنامه‌ای و واقعی تا لایو شدن نسخه، و گفت‌وگوی تیم کنار خود کار.

درخواست دمو