طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد."
چارچوب نرم‌افزاری
این روند جنجالی مسئله مهمی را در مورد چهارچوب‌ها نتیجه می‌دهد. ساختن یک چهارچوب ظریف در مقابل چهارچوبی که صرفاً مشکلی را حل می‌کند هنوز یک مهارت است تا یک علم. "ظرافت نرم افزاری " به معنی نظم و ترتیب، وضوح و دقت به همراه ضعف اندک (عملکردهای اضافی که بیشتر آنها توسط کاربر تعریف می‌شوند) است. به عنوان مثال برای چهارچوب‌هایی که کد تولید می‌کنند، ظرافت به معنای ایجاد کدی است که واضح و قابل درک برای یک برنامه‌نویس (و به راحتی قابل اصلاح) باشد، در مقابل کدی که صرفاً تصحیح می‌کند. مسئله ظرافت این است که چرا تعداد نسبتاً کمی از چهارچوب‌های نرم‌افزاری در آزمایش زمان متوقف شده‌اند: بهترین چهارچوب‌ها توانسته‌اند به عنوان پیشرفته‌ترین فناوری که بر اساس آن ساخته شده‌اند پیشرفت کنند و تکامل بیابند، در حین تکامل یافتن، بسیاری از آنها قابلیت‌های قدیمیشان را حفظ کرده‌اند.