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

برنامه ریزی برای تولید نرم‌افزار: نبایدها

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

  • برنامه‌ریزی برای اجرای یک پروژه نرم‌افزاری یا تولید نرم‌افزار دست و پنجه نرم کردن با deadline هاست. شما باید deadline ها را طوری کنار هم قرار بدهید که بتوانید پیش از سررسید کارها، آن‌ها را به اتمام برسانید. نبایدهیچ deadline‌ غیرمنطقی را بدون مقاومت بپذیرید! اگر این کار را بکنید، این کار به معنی رقصیدن به هر سازی است و زمان‌بندی اجرای پروژه‌های شما را به ناکجا آباد می‌برد.
  • نبایداز ابزارهایی استفاده کنید که کار با آن‌ها را بلد نیستید. اگر بلدید با Microsoft Project برنامه‌ریزی کنید ولی نمی‌دانید برنامه‌ریزی به روش اسکرام چگونه است، به گانت چارت‌های MSP بچسبید و به فکر اسپرینت‌های اسکرام نباشید. در نهایت این ابزار نیست که کار را انجام می‌دهد، شما به کمک ابزار نسبت به برنامه‌ریزی انجام شده آگاهی پیدا می‌کنید. اگر به خاطر استفاده از ابزار یا روش نامناسب نتوانید به کل پروژه مسلط شوید و بر زمان‌بندی‌های آن اشراف داشته باشید، برنامه‌ریزی با این نرم‌افزارها و روش‌ها با نقاشی کشیدن هیچ فرقی نخواهد کرد!
  • نبایدبرای جبران تاخیر در کارها، منابع (اعم از نیروی انسانی یا ماشین‌ها) را overallocated کنید. این کار استرس انجام پروژه و فشار روحی و جسمی را زیاد کرده و در نهایت به احتمال زیاد نه تنها به deadline نمی‌رسید بلکه بیشتر از زمان لازم برای اتمام کار باید وقت بگذارید.
  • نبایددرباره شرایط‌ زمانی و کاری اعضای تیمی که برای آن‌ها برنامه‌ریزی می‌کنید یا حتی شرایط اقتصادی (بودجه کار) و بازرگانی پروژه (قرارداد و ...) به حدس و گمان روی بیاورید. از همه چیز اطمینان حاصل کنید، مطمئن شوید چیزی که مشتری درخواست می‌کند در چارچوب قراردادش است. مطمئن شوید زمانی که برنامه‌نویس می‌دهد منطبق با واقعیت است. مطمئن شوید منابعی که لازم دارید (مثلاً یک نرم‌افزار یا سخت افزار خاص) در موقعی که به شما قول داده شده به دستتان می‌رسد و ... این‌طوری مجبور نیستید روی هوا برنامه‌ریزی کنید.
  • نبایدبعد از برنامه‌ریزی، پروژه را به حال خود رها کنید. برنامه‌ریزی قدم اول کار است، برنامه ریزی هیچ وقت نهایی نیست. همیشه نیاز به روز رسانی برنامه‌ریزی بر اساس اتفاقات جاری وجود دارد. اگر پروسه آپدیت کردن برنامه‌ریزی را مثلاً هر 15 روز یک بار انجام دهید، خواهید دید که برنامه شما همیشه دچار مشکل است و هیچ چیز طبق برنامه پیش نمی‌رود. در مورد بازه زمانی مناسب برای بررسی پیشرفت و به روز رسانی برنامه در مطلبی "بایدها" صحبت خواهم کرد.
  • نبایدهمه تخم‌مرغ‌هایتان را در یک سبد قرار بدهید: آدم‌ها مریض می‌شوند. تعطیلات غیرقابل پیش‌بینی اتفاق می‌افتد. دسترسی شما به اینترنت (در ایران البته) قطع می‌شود. مشتری به دلیل فشار رئیسش به شما فشار می‌آورد که کارش را زودتر از موعد تحویل بدهید و ده‌ها اتفاق غیرقابل پیش‌بینی دیگر. اگر همه کارها را بر اساس یک منبع خاص (نیروی انسانی، نرم‌افزار یا سخت‌افزار) برنامه‌ریزی کرده باشید ریسک fail شدن کار را بالا برده‌اید. همیشه plan b را در نظر داشته باشید.
  • نبایدبرای وظایف در گذشته برنامه‌ریزی کنید. اگر task ای در گذشته وجود دارد که به هر دلیل انجام نشده، آن را به آینده منتقل کنید و مجدداً برای انجامش برنامه‌ریزی کنید. توجه داشته باشید که امکان سفر در زمان هنوز فقط در فیلم‌های علمی-تخیلی وجود دارد.
  • نبایدبه زمان به شکل یک منبع نامحدود نگاه کنید. پروژه‌ها باید در یک زمان منطقی بسته شوند. پروژه باز و برنامه‌ریزی باز یعنی استفاده نادرست از زمان. زمان قیمت دارد. شما به ازای هر ساعت کاری که توسط اعضای تیم نرم‌افزاری انجام می‌شود و به ازای هر ساعت کاری که مدیر پروژه یا شخصی که کار برنامه‌ریزی تیم را به عهده دارد انجام می‌دهد هزینه پرداخت می‌کنید. مشتری‌ها دوست دارند که با بودجه محدودشان شما را در یک زمان نامحدود در اختیار داشته باشند، وارد این بازی با آن‌ها نشوید.