تصمیمات اقتصادی تصمیمات احساسی

همه ما در پروژه های مهندسی نرم افزاری بودیم و هستیم که هر روز هر فرد تصمیماتی می گیرد. این تصمیمات شاید در کوتاه مدت نتایج خود را نمایان نکنند. ولی بخشی از روند کلی یک پروژه را همین تصمیمات مشخص می کنند.

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

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

  1. عدم شناخت دقیق نیازمندی ها
  2. تغییرات همیشگی و عدم قطعیت در نیازمندی ها
  3. تغییرات ساختاری زیاد در فناوری ها

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

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

اولین موردی که در اتخاد یک تصمیم خوب (لااقل در مهندسی نرم افزار) باید در نظر گرفته شود این است که همه چیز در این رشته قابل سبک و سنگین کردن است. مخصوصا در زمینه مهندسی فرایندها و مدیریت پروژه. تقریبا هیچ قانون و قاعده و روش جهان شمولی در مهندسی نرم افزار وجود ندارد (شاید برعکس رشته های مانند مهندسی عمران). هیچ کسی نمی تواند ادعا کند که به طور مثال مدیریت پروژه چابک راه حل همه مشکلات است و باید بدون و کم و کاست تمام قواعد آن اجرایی شود. شاید در بعضی فرهنگ ها و سازمان ها و پروژه ها حتی مدل waterfall نیز جواب خوبی داده باشد!!!!

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

سبگ و سنگین کردن (trade off) در هر تصمیم روزمره هریک از نیروهای فنی و غیر فنی شاغل در یک پروژه نرم افزاری دخالت دارد.

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

  1. قابل بررسی و اندازه گیری از نظر نتایج نیستند. (چون دلایلی و اهداف ملموسی پشت آن ها نبوده است)
  2. فرد تصمیم گیرنده موضع شخصی در قبال آن تصمیم خواهد گرفت

این موارد بحث و تبادل نظر در مورد تصمیمات اتخاد شده را بسیار مشکل می کنند.

هزینه دیرکرد

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

این هزینه به صورت دقیق قابل اندازه گیری نیست و الزاما هزینه های مادی را شامل نمی شود. ولی همین که به صورت نسبی به این موضوع دقت شود تاثیر بسیار زیادی در تصمیم گیری ها خواهد داشت.

به طور مثال در موضوعات فنی ممکن است روش انجام دادن درست و صحیح یک کار مدت زمان تحویل آن بخش از محصول را یک ماه عقب بیندازد. اگر در برخورد با مدیریت و تحلیل شرایط، تیم به این نتیجه رسید که هزینه دیر شدن این بخش از سیستم بسیار بیشتر از هزینه انجام غیر مهندسی آن است، تیم می تواند احساسات مهندسی (!) خود را نادیده گرفته و به سریعترین حالت ممکن این امکان را در سیستم ایجاد کند و در ادامه مراحل تولید زمانی برای رفع مشکلات ناشی از آن کنار بگذارد.

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

بهتر است در اتخاذ تصمیمات به بار مالی آن نیز توجه کنیم.  اکثر مواقع نتیجه تصمیمات بر اساس نتایج مالی آنها سنجیده می شوند. یکی از هنرهای مدیران و مهندسین نر م افزار ایجاد توازن در رسیدن به اهداف کوتاه مدت (مانند ارائه نسخه های مورد نظر جهت جذب سرمایه گذاری و یا قرارداد) و اهداف بلند مدت (قابلیت نگهداشت نرم افزار، هزینه های نگهداشت و …) است. اگر تصمیمات در رده های مختلف سازمانی بدور از احساسات و برداشت های غیر مهندسی باشند این امر به راحتی اتفاق خواهد افتاد.

مقدمه ای بر کانبان – Kanban

Kanban یک روش مدیریتی کارا و موثر در مدیریت فرایند تولید نرم افزار است. این روش، یک روش اقتباس شده از روش مدیریت تولید شرکت Toyota است که در اواسط قرن بیستم توسط مهندسین این شرکت ابدا شده.

واژه  Kanban در زبان ژاپنی به معنای کارتهای بصری یا visual card است. در این روش تمامی فرایند تولید نرم افزار به صورت بصری در یک تخته بزرگ نمایش داده می شوند.

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

تنگناها – Bottleneck

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

ظرفیت هر یک از این گروه ها به صورت زیر است:

  • تحلیلگرها: ۱۰ آیتم در هفته
  • برنامه نویس ها: ۱۰ آیتم در هفته
  • تسترها: ۵ آیتم در هفته

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

  • فشار کاری بر روی تسترها افزایش می یابد و روی انگیره افراد تاثیر خواهد داشت. مخصوصا زمانی که مقایسه با دیگر گروهها مطرح شود
  • به دلیل فشار کاری زیاد کیفیت تست پایین خواهد آمد و باگ های بیشتری به دست مشتری خواهد رسید
  • زمان تحویل کارهایی که درخواست شده بودند به دلیل انباشت کار در صف تست زیاد خواهد شد. حتی کارهایی که از نظر برنامه نویسی و تحلیل مورد های پیچیده ای نبوده اند.
  • گروههای دیگری که بعد از تست ممکن است کار publish یا ارائه به مشتری را انجام می دهند بیکار خواهند ماند

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

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

اصول اولیه Kanban

۱) تجسم یا بصری سازی کارها – Visualize the work 

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

۲) محدود کردن کار در فرآیند – Limit the work in process 

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

۳) تمرکز بر جریان – Focus on flow 

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

۴) پیشرفت مداوم – Continuous Improvement 

یکی از فرهنگ هایی که با پیاده سازی Kanban در سازمان بوجود می آید، پیشرفت مداوم است. گروه ها می توانند با بررسی جریان کارها، ایرادات و مشکلات خود را یافته و برای رفع آنها تصمیمات مناسب اتخاذ کنند.

 نکته مهم: در Kanban قواعد و مقررات زیادی وجود ندارد و شما می توانید با استفاده از فرایند فعلی سازمان شروع به استفاده از این مدل مدیریتی کنید. به طور مثال نمونه ای از تخته های Kanban که به صورت الکترونیکی است را در زیر مشاهده می کنید:

برای مشاهده کامل تخته Kanban به اینجا  مراجعه کنید.

در این تخته ستون های زیر وجود دارند:

  • Todo: لیست همه کارهای قابل انجام و تمامی سفارشات در این ستون می آیند.
  • Analysis: این اولین مرحله از فرایند است و لیست همه کارهای در حال تحلیل در این ستون آورده می شوند. عدد یک در کنار نام این ستون نشان دهنده محدودیت کارهای ناتمام در این مرحله است. به عنوان مثال در این فرایند گروه تحلیل تنها می تواند یک آیتم در حال تحلیل داشته باشد. و فقط در صورتی می تواند کار جدید از ستون Todo بردارد که تحلیل آیتم فعلی به پایان رسیده باشد. از این جهت Kanban را یک Pull system یا سیستم مدیریت کششی می نامند. یعنی گروه ها هستند که کارها را جهت انجام بر می دارند.
  • Analysis Done: همه آیتم های تحلیل شده به این ستون منتقل می شوند.
  • Development: وفتی گروه برنامه نویسی جایی برای کار جدید داشت (یعنی کمتر از ۱۰ عدد کار موازی در حال انجام بود) می تواند از لیست Analysis done آیتمی را برای برنامه نویسی انتخاب نماید.
  • Development Done: وقتی گروه برنامه نویسی کار آیتمی را به اتمام رسید می تواند آن را به این ستون منتقل نماید.
  • Test: تیم تست نیز کارهای در حال انجام خود را در این ستون وارد می کنند. قراعد مراحل قبلی در این مرحله نیز صادق است.
  • Test Done
  • Publish
  • Publish Done: این مرحله نماینده اتمام آیتم مورد درخواست است. الان وقت این است که پول دریافت شود!!!

در این تخته نمونه از مفاهیمی مانند Queuing (تمامی ستون هایی که با کلمه Done به پایان می رسند) نیز استفاده شده که در محدوده این مطلب نیستند.  همچنین موضوعات مربوط به اولویت بندی در فرصت مناسبتری بررسی خواهد شد.

نکته مهم در مورد Kanban

زمانی که تصمیم به استفاده از روش Kanban گرفته می شود. نیازی نیست تمام فرایندهای فعلی موجود در سازمان دور ریخته شود. در واقع Kanban از فلسفه ژاپنی Kaizen استفاده میکند. که به معنای بهبود مداوم است. به این صورت که فرایندهای مورد استفاده در سازمان به صورت انقلابی کنار گذاشته نشود. و به مرور به نقطه بهبود و کارایی مناسب برسد و همیشه در حال بهبود باشد.

برای مطالعه بیشتر در این زمینه می توانید از منابغ زیر استفاده نمایید.

Kanban: Successful Evolutionary Change for Your Technology Business

Personal Kanban: Mapping Work | Navigating Life