نتیجه توسعه و تحویل مداوم در پروژه‌های نرم‌افزاری!

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

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

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

برخلاف گروه B، افراد گروه A بجای اینکه بخوان تلاش کنند و سفال بسازن، کل ترم رو درگیر مسائل تئوری بودن که چطور میشه بهترین سفال ممکن رو ساخت! در نهایت چون شبیه افراد گروه B نتونستن ساخت سفال رو خیلی تمرین کنن، نتونستن سفال عالی که در ذهنشون بوده رو در واقعیت بسازن.

توی ساخت نرم‌افزار هم میشه همین نتیجه رو دید. بجای اینکه از طرف کاربر تصمیم بگیرید یا از پیاده‌سازی بعضی چیزها بترسید. بهتره که در یک فرآیند تکرار شونده تصمیماتمون رو پیاده کنیم و ذره ذره کارمون رو بهبود بدیم.