یکی از آشناترین جملهها در پروژههای نرمافزاری این است: «تقریباً تمام شده.» این جمله ممکن است هفتهها یا حتی ماهها تکرار شود، در حالی که نسخه قابل استفاده هنوز آماده نیست.
طولانی شدن پروژه همیشه نتیجه ضعیف بودن برنامهنویس نیست. بسیاری از پروژهها قبل از رسیدن به مرحله کدنویسی دچار مشکل شدهاند: مسئله دقیق تعریف نشده، محدوده مشخص نیست و هر تصمیم جدید تبدیل به یک تغییر کوچک در پروژه میشود.
مشکل اول: پروژه از ابتدا تعریف نشده است
اگر تیم نداند خروجی نهایی دقیقاً چیست، پایان پروژه هم معنای مشخصی ندارد. «یک سیستم مدیریت کامل» یا «یک سایت حرفهای» هدف قابل اندازهگیری نیست. باید مشخص شود چه کاربران و چه فرایندهایی قرار است پوشش داده شوند و نسخه اول چه قابلیتهایی دارد.
Scope Creep چگونه پروژه را فرسوده میکند؟
هر درخواست جدید ممکن است به تنهایی کوچک به نظر برسد: «این فیلتر را هم اضافه کنیم»، «این گزارش را هم داشته باشیم»، «حالا که این بخش ساخته شده، این قابلیت هم سخت نیست». اما مجموع همین درخواستها محدوده پروژه را تغییر میدهد.
راهحل این نیست که هیچ تغییری پذیرفته نشود. راهحل این است که هر تغییر اثرش بر زمان، هزینه، معماری و اولویتها مشخص شود.
تصمیمگیرنده مشخص نداریم
وقتی چند نفر درباره یک قابلیت نظر متفاوت دارند و هیچ مالک محصولی مسئول تصمیم نهایی نیست، تیم توسعه بین گزینهها رفتوبرگشت میکند. این رفتوبرگشت فقط زمان جلسه نیست؛ ممکن است باعث طراحی دوباره، تغییر دیتابیس و بازنویسی کد شود.
تست نباید آخر پروژه شروع شود
اگر محصول برای اولین بار در هفتههای آخر با کاربر واقعی آزمایش شود، مشکلات زیادی همزمان کشف خواهند شد. هرچه خطا دیرتر پیدا شود، اصلاح آن معمولاً پرهزینهتر است. تست مرحلهای کمک میکند تصمیمهای اشتباه قبل از اینکه در بخشهای دیگر پروژه پخش شوند دیده شوند.
«تمام شدن» باید تعریف داشته باشد
برای هر قابلیت باید معیار پذیرش مشخص باشد. مثلاً یک فرم زمانی تمامشده محسوب شود که اعتبارسنجی، ذخیره داده، پیام خطا، سطح دسترسی و حالت موبایل آن بررسی شده باشد؛ نه اینکه فقط ظاهر صفحه ساخته شده باشد.
پروژهای که پایان آن تعریف نشده، هرگز واقعاً تمام نمیشود؛ فقط متوقف میشود.
چطور پروژه را قابلکنترل کنیم؟
- هدف و خروجی پروژه را دقیق بنویسید.
- قابلیتهای نسخه اول را از قابلیتهای آینده جدا کنید.
- برای هر قابلیت معیار پذیرش تعیین کنید.
- یک مالک تصمیمگیری مشخص داشته باشید.
- تغییرات جدید را ثبت و اثر آنها را ارزیابی کنید.
- هر بخش را قبل از انباشته شدن مشکلات تست کنید.
- در پایان هر مرحله یک خروجی قابل مشاهده داشته باشید.
پروژه خوب پروژهای نیست که هیچوقت تغییر نکند. پروژه خوب پروژهای است که بتواند تغییر را کنترل کند، اولویتبندی کند و بدون از دست دادن مسیر اصلی، به یک خروجی واقعی برسد.