طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد."
الگوی طراحی
در طراحی نرم‌افزارهای مختلف مسایلی دایماً بروز می‌یابند که در پروژه‌های قبلی، که حتی دارای قلمرو کاربردی مختلفی هستند، نیز وجود دارند. راه حل موجود برای این روش‌های غالباً یکسان است و یافتن طراحی مناسب برای این موارد تکراری وقت‌گیر و هزینه‌بر است. از این رو می‌توان راه‌حل‌هایی را ارائه نمود که مسایل را ساده نماید. از طرفی روح برنامه‌نویسی شیءگرا بر مبنای قابلیت باز-استفادگی و جز-محوری است، موجب ایجاد برنامه‌هایی قابل استفاده در آینده خواهد شد. اریک گاما ،ریچارد هلم، رالف جانسون، جام ولیسایدز که بعدها به دستهٔ۴ معروف شدند در سال ۱۹۹۴ کتاب الگوهای طراحی را به همراه مقدمه‌ای از سوی گریدی بوش به رشتهٔ تحریر درآوردند. این کتاب به دسته‌بندی ۲۳ الگوهای طراحی می‌پرداخت که تا آن زمان ابداع شده‌بودند. گریدی بوش در مقدمهٔ کتاب "الگوهای طراحی" از الگوهای طراحی به عنوان راه حلی برای ایجاد سیستم‌های پیچیده نام می‌برد و از آن به عنوان زبانی نام می‌برد که می‌تواند بر روی دامنه‌های مختلفی مورد استفاده قرار گیرند.