طراحی نرم‌افزار
طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان "تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده" یا "فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد."
نرم‌افزار مدیریت پروژه
یک سیستم جمعی طراحی می‌شود تا چندین کاربر بتوانند به صورت هم‌زمان بخش‌های مختلف یک طرح را تغییر دهند. مثلاً برای به روز رسانی حوزه‌ها افراد شخصا مسئول یکپارچگی چیزی هستند که درسراسر پروژه تخمین زده‌اند. ابزارهای مبتنی بر وب، از جمله اکسترانت اساساً در این گروه قرار می‌گیرند. اما محدودیت‌هایی دارند. از جمله این که کاربر بایستی برای استفاده از نرم‌افزار به اینترنت دسترسی داشته باشد. برای گذر از این محدودیت برخی از ابزارهای نرم‌افزارها از معماری client-server استفاده می‌کنند و یک نسخه برای کاربر که بر روی کامپیوتر رومیزی وی اجرا می‌شود را فراهم می‌سازند تا اطلاعات پروژه و وظایف را در اختیار دیگر اعضای تیم پروژه قرار دهد. البته این کار از طریق یک سرور مرکزی و زمانی انجام می‌شود که کاربر به شبکه وصل می‌شود. برخی از ابزارها به اعضای تیم پروژه اجازه می‌دهد تا در زمانی در شبکه نیستند اطلاعات زمان بندی کارها را تهیه و تنظیم کنند (البته اطلاعات دیگر اعضا ‘فقط خواندنی’ است). زمانی که دو باره به دیتا بیس متصل می‌شود همهٔ تغییرات با زمان بندی‌های دیگر همگام(synchronized) می‌شود.