An der Erstellung und dem Betrieb komplexer IT-Systeme für den industriellen Einsatz sind in der Regel mehrere Personen beteiligt. Die
Teamgröße variiert dabei stark von zwei bis hin zu mehreren hundert Personen, sodass es keine typische Teamgröße gibt. Um die
sinnvolle Aufteilung von Aktivitäten unter einzelnen Personen von großen Teams managen zu können, werden einzelnen Personen
sogenannte Rollen zugeordnet. Ein Vorteil dieser Art von Arbeitsteilung ist die Möglichkeit zur Spezialisierung und der
Expertenbildung. Die folgende Abbildung zeigt ein Beispielszenario mit verschiedenen Rollen und deren Beziehungen.

Eine Rolle ist gekennzeichnet durch ihren Namen, spezifische Aufgaben und spezifische Zielsetzungen. Eine am Projekt beteiligte Person nimmt mindestens eine bestimmte Rolle ein. Je nach Größe des Projektes werden Rollen mehrfach vergeben. So gibt es in der Regel immer mehrere Personen mit der Rolle "Entwickler". Allerdings kann eine Person auch gleichzeitig mehrere Rollen innehaben. Ein "Entwickler" kann gleichzeitig auch die Rolle des "Testers" übernehmen, ein "Architekt" kann gleichzeitig auch ein "Entwickler" sein.
Mit der expliziten Aufteilung in Rollen und der Bestimmung von Zielsetzungen für jede Rolle werden automatisch Zielkonflikte zwischen Rollen in dem Projekt induziert - und damit auch zwischen den am Projekt beteiligten Personen. Während der Projektleiter auf die Einhaltung von Budget und Zeitplan achten muss, hat der Tester das Ziel möglichst lange und viel zu testen. Der Architekt zielt darauf ab, ein "technisch solides" und "sauberes" System zu bauen und der Entwickler möchte gerne möglichst schnell die von ihm geforderten Funktionen implementieren. Insbesondere durch diese Zielkonflikte zwischen den Rollen müssen in jeder Phase des Software Engineerings kontinuierlich Interessenskonflikte zwischen den am Projekt beteiligten Personen verhandelt und aufgelöst werden.
Damit ist die Qualität der Ergebnisse der einzelnen Aktivitäten stark abhängig von einer engen Interaktion und Kommunikation zwischen den beteiligten Personen. Insbesondere die persönlichen Beziehungen zwischen diesen Personen und die Wechselwirkungen zwischen den den Rollen zugeordneten Aufgaben sind maßgebliche Faktoren, die zum Erfolg oder Misserfolg eines Softwareprojektes beitragen.
Eine Grundannahme hinter allen Überlegungen im Software Engineering kann wie folgt beschrieben werden: Projekte funktionieren und können erfolgreich abgeschlossen werden, wenn die richtigen Personen unter Verwendung der geeigneten Methoden, (Modellierungs- und Programmier-)Sprachen und Werkzeuge vernünftig miteinander arbeiten.
Die Sicherstellung dieser Rahmenbedingungen ist damit eine wesentliche Aufgabe im Software Engineering.