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