تست هفتم جوئل: آیا دارای لیست مشخصات هستید؟

هر محصول صنعتی دارای مشخصات (specifications) است، نرم‌افزار هم از این قاعده مستثنی نیست. هر کد نرم‌افزاری باید بر مبنای یک سند مشخصات یا به اختصار spec تولید شود.

جوئل در این مورد می‌گوید: > نوشتن لیست مشخصات (specifications) درست مثل استفاده از نخ دندان است:‌ همه قبول دارند كه كار خوبی است ولی هیچ كس حوصله‌اش را ندارد.

در فصل اول سریال فرار از زندان،اگر مایکل اسکوفیلد تونست از زندان فرار کنه، فقط به خاطر هوشش نبود، لیست مشخصات بخش‌های مختلف زندان رو هم داشت!

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

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

توجه کنید که سند مشخصات نرم‌افزار واقعاً باید یک سند مکتوب باشد و صحبت درباره مشخصات نرم‌افزار و آنچه که شما درباره نرم‌افزاری که دارید می‌سازید در ذهن دارید spec محسوب نمی‌شود!

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

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

بسیاری از تصمیمات و نتیجه‌گیری‌ها در این حوزه بر اساس locality شکل می‌گیرد و بدون spec مکتوب، فقط پروسه تولید را پیچیده و بهره‌وری را کم می‌کنیم. تجربه‌ای که من در این حوزه دارم بر اساس تولید محصولی است که هنوز هم پیاده سازی نشده و چندین و چند بار هم جلسات تحلیل برایش برگزار شده، اما چون از خروجی جلسات نتیجه‌ای مکتوب نشده‌، عملاً هنوز هم درگیر شناخت مساله (گام اول) هستیم!

جوئل اسپالسکی هم مثالی درباره عواقب عدم توجه به این مساله می‌زند: “به نظر می‌رسد كه مشكل Netscape نیز همین بوده - چهار نسخه اول آن قدر شلم شوربا شد كه مدیریت به طرز احمقانه‌ای تصمیم گرفت همه كد آن را دور بياندازد و از صفر شروع كند. سر Mozilla هم دوباره همین اشتباه را مرتكب شدند،كه محصول آن هیولایی خارج از كنترل است كه چند سال طول كشیده تا فقط به مرحله آلفا برسد.”

حالا که درباره اهمیت لیست مشخصات صحبت کردیم، در نوشته‌های دیگری به این موضوع خواهیم پرداخت که لیست مشخصات چیست و چطوری باید یک سند spec درست کنیم؟