خانه > Agile, مهندسی نرم افزار > ضایعات نرم افزاری

ضایعات نرم افزاری

با شنیدن کلمه ضایعات چه چیزی به ذهن شما رسوخ می کند؟ نان خشکی، ضایعات آهن، کاغذی که الان در حل مچال کردن آن هستید و یا هزاران چیز دیگر. تعریف شما از کلمه ضایعات چیست و چه چیزی را زائد می نامید؟

اجازه بدهید دوباره به تویوتا و خط تولید آن رجوع کنیم. تائیچی اونو از سیستم تولید تویوتا به عنوان سیستمی برای حذف کامل ضایعات از فرآیند تولید نام می برد. او ادامه می دهد ما اینکار را بدین صورت انجام می دهیم که زمان را از لحظه دریافت سفارش تا هنگام دریافت پول از مشتری در نظر می گیریم و در صدد هستیم که خط زمانی (Timeline)  را با حذف کارهایی که ارزش افزوده تولید نمی کنند، کوتاهتر کنیم.

هر چیزی که برای مشتری ایجاد ارزش نمی کند، به عنوان ضایعات در نظر گرفته می شود. در سیستم تولید تویوتا افرادی که در مرحله بعدی تولید تویوتا هستند به عنوان مشتری برای کارکنان مرحله فعلی در نظر گرفته می شوند.

ما نیز در فرآیند تولید نرم افزار با شرایط مشابه روبرو هستیم و می توانیم مثل آنها عمل کنیم. بدین صورتیکه خط زمانی از لحاظ دریافت سفارش از مشتری شروع می شود و تا زمانی که نرم افزار را توسعه دادیم و نیازمندیهای او را حل کردیم ادامه دارد. و باید با حذف تمام مواردیکه برای مشتری ایجاد ارزش نمی کند خط زمانی را کاهش دهیم.

اما چه چیزی را می توانیم در فرآیند توسعه نرم افزار ضایعات بنامیم؟ تویوتا هفت نوع اصلی ضایعات، بدون ارزش افزوده در کسب و کار یا مراحل تولید را مشخص کرده است که در جدول زیر نمایش داده شده است و برای هر کدام از این موارد نمونه معادل در توسعه نرم افزار آورده شده است.

نرم افزار تویوتا
Extra features (تولید پیش از حد) Overproduction
Requirements (موجودی پیش از حد)Inventory
Extra Steps () Extra processing steps
Finding Information (جابه جایی غیر لازم) Motion
Bugs not caught by tests (معایب) Defects
Waiting for decisions, Including customers (انتظار)Waiting
Handoffs (حمل و نقل غیر ضروری) Transportation

از میان این هفت مورد کدام یک از آنها مهم تر است و باید فورا در جهت حذف آن اقدام کنیم؟ اکثر صاحبنظران توسعه نرم افزار  روی گزینه ویژگیهای اضافی (Extra features) توافق دارند. ویژگیهای اضافی! ویژگیها و عملکردهای از نرم افزار که مشتری از آنها استفاده نمی کند یا به ندرت از آن استفاده می کند.  طبق بررسی های انجام شده تقریبا فقط ۲۰ درصد از ویژگیها و عملکردهای یک نرم افزار به طور مکرر استفاده می شود و ۴۵ درصد از آن تقریبا اصلا استفاده نمی شود و ۳۵ درصد آن به طور کم مورد استفاده قرار می گیرد، یعنی همان قانون هشتاد و بیست.

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

در این حالت ما مدت زمان زیادی را صرف تحلیل سیستم و مصاحبه با افراد جهت شناسایی نیازمندیها می کردیم و سپس مرحله طراحی و در انتها پیاده سازی از روی خروجیهای دو فاز قبلی.  ولی ما می دانیم که اکثر کاربران نیازمندیهای واقعی سیستم را نمی دانند و یا نمی توانند نیازهای واقعی خود را بیان کنند و ثانیا نیازمندیهای سیستم در محیط پویا کسب و کار  امروز به سرعت تغییر می کنند پس چیزی که در انتها توسعه داده می شد چیزی نبود که واقعا به اکثر نیازمندیهای سیستم پاسخ بدهد. ما نرم افزاری را توسعه دادیم که دارای ویژگیهای فراوان است ولی چه کسی از ویژگیهای که به نیازهایش پاسخ نمی دهد استفاده می کند، این ویژگیها یعنی ضایعات نرم افزاری.

اما راه حل چیست؟

Ebey، شنیدن این کلمه شما را یاد چه چیزی می اندازید ؟ فروشگاه، خرید اینترنتی و شاید پیر امیدیار هموطنمان. اما اکثر ویژگیهای Ebay  چگونه توسعه داده شد؟ به شکل بسیار زیبا.  مشتریانی که پیشنهادی برای بهبود سایت داشتند (پیشنهاد مشتری = ارزش ) یک ایمیل به امید یار می فرستند و در سربعترین زمان ممکن آن ویژگی پیاده سازی می شد. نه نیازی به مرحله زمانبر تحلیل و طراحی فرآیندهای کلاسیک هست و نه در انتها خبری از ضایعات نرم افزاری.

مثال بالا یک نمونه ساده از چیزی که ما می خواهیم بدان برسیم بود، یعنی Agile. ما در اینجا به جای مشتریانی که برای امیدیار ایمیل می زدند Product owner یا on-site customer خواهیم داشت، به جای ایمیل ها، Story User ها که همراه با Product owner تهیه کردیم و توسط تیم اولویت بندی کردیم داریم و اجازه بدهید با کمی تحفیف Inbox را با Task Board یا Epic Board مقایسه کنیم و فیدبک کار را ایمیل مجدد یک مشتری در نظر بگیریم. اینها حداقل های هستند که با قرار دادنشان در جعبه ابزار خود و همراه کردن آن با یک فرآیند افزایشی می توانیم به فکر حذف ضایعات محصول خودمان باشیم و تصور یک فرآیند چابک را داشته باشیم. (چرا گفتم تصور؟ با اعتقاد به اینکه Agile یک فرهنگ است برای پاسخ، به نوشته زیر که بر گرفته از راه تویوتا است مراجعه کنید. )

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

حالا اگر در جعبه ابزار شما ابزارهای بالا همراه با ابزارهای و تکنیک های بهبود کد و تست هست و یک تیم همراه با Product owner یا on-site customer چگونه به نبرد با این ضایعات خواهید رفت؟ اگر در جعبه ابزار شما ابزار دیگری هست که ریشه در خلاقیت تیمی شما دارد آنها را بیان کنید تا ما نیز آنها را در جعبه ابزار خود قرار دهیم. پس اجازه بدهید جعبه ابزار خود را باز کنیم و تا پست بعدی بدنبال یک راه حل خوب باشیم.

  1. SirAsad
    ۹ اردیبهشت ۱۳۸۹ در ۰۷:۱۸ | #1

    بسیار عالی و البته با تبریک بلاگ جدید .

    داریم کم کم میرسیم به اصول Lean
    Muri
    Mura
    Muda

    یاشاسین

  1. ۱۷ مهر ۱۳۸۹ در ۱۳:۰۱ | #1