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

1. طراحی در شرایط عدم قطعیت
طراح نرمافزار معمولاً با اطلاعات ناقص کار میکند
همهٔ سناریوها از ابتدا مشخص نیستند
نیازها و شرایط میتوانند تغییر کنند
بنابراین طراحی، بهمعنای رسیدن به پاسخ قطعی نیست، بلکه بهمعنای انتخاب بهترین تصمیم با دانستههای فعلی است.
2. نقش فرضها در طراحی
بسیاری از تصمیمهای طراحی بر پایهٔ فرضها شکل میگیرند. این فرضها ممکن است درست باشند یا در آینده نقض شوند. به همین دلیل لازم است فرضها:
شناسایی شوند
مستند شوند
و در صورت تغییر شرایط، بازبینی شوند
3. تصمیمگیری تدریجی
تصمیمها نباید همه در ابتدای پروژه قفل شوند. برخی تصمیمها میتوانند:
به زمان مناسبتری موکول شوند
با اطلاعات بیشتر گرفته شوند
این رویکرد کمک میکند ریسک تصمیمهای اشتباه کاهش پیدا کند.
4. هزینهٔ تصمیمهای زودهنگام
تصمیمهایی که خیلی زود و بدون نیاز گرفته میشوند ممکن است انعطاف سیستم را کم کنند و تغییرات بعدی را پرهزینه کنند.
بنابراین باید تشخیص داد:
کدام تصمیمها حیاتیاند
و کدام تصمیمها را میتوان به تعویق انداخت
5. بازبینی و اصلاح تصمیمها
تصمیمهای طراحی:
دائمی نیستند
باید در طول زمان بررسی شوند
و در صورت تغییر شرایط، اصلاح شوند
طراحی یک مسیر خطی نیست، بلکه فرآیندی بازگشتی است.
6. ارتباط تصمیمها با business
تصمیمهای طراحی جدا از business معنا ندارند. هر تصمیم باید با توجه به:
هدف سیستم
ارزش ایجاد شده
و محدودیتهای واقعی
گرفته شود، نه صرفاً بر اساس ترجیح فنی.
7. نقش تجربه و یادگیری
تجربه نقش مهمی در تصمیمگیری دارد اما تجربه هم جای تحلیل را نمیگیرد.
یادگیری از تصمیمهای قبلی و بازخوردها بخشی از فرآیند طراحی است.
جمعبندی
عدم قطعیت بخش جداییناپذیر طراحی نرمافزار است
تصمیمگیری یعنی انتخاب آگاهانه با اطلاعات محدود
طراحی خوب، امکان اصلاح و بازبینی را از بین نمیبرد