In kleineren Entwicklungsprojekten ist es selten offensichtlich, wie die Programmieraufgaben am besten verteilt werden. Sollen sich die Entwickler eher technisch oder fachlich aufteilen?
Nach meiner Erfahrung spezialisieren sich auch in kleineren Projekten (für mich sind das Teams mit maximal 10 Entwicklern) die Entwickler häufig nach technischen Kriterien: Es gibt den Datenbankdesigner, den Backend-Programmierer und die Web-Entwicklerin.
Auf dem ersten Blick spricht auch einiges für diese Aufteilung:
- Für die Projektleitung ist es relativ einfach, die benötigten Fähigkeiten zu definieren und gezielt passende Entwickler zu suchen. Anforderungsprofile enthalten die jeweils eingesetzten Technologien, also Html/CSS/JSF oder Spring/Hibernate oder PL/SQL.
- Jeder Entwickler arbeitet üblicherweise in dem Bereich, in dem seine oder ihre Stärke liegt. Viele Probleme lassen sich mit Erfahrung besser lösen.
- Es entstehen technische Schichten, die tendenziell einheitlich und in sich geschlossen entwickelt werden. Je weniger Entwickler an einem Code-Bereich arbeiten, desto weniger unterschiedliche Stile werden kombiniert.
- Die Schnittstellen der Schichten werden tendenziell besser dokumentiert und getestet. Wenn ein Entwickler des Backend-Services diesen beispielsweise nicht selber aufruft, sind Unit-Tests seine einzige Möglichkeit, die Funktionalität sicherzustellen.
Trotzdem arbeite ich selbst lieber vertikal quer durch alle technischen Schichten an fachlichen Themen. Und auch dafür gibt es gute Gründe:
- Ein fachliches Thema vollständig durch alle Systemschichten umzusetzen, bringt häufig mehr Genugtuung und Anerkennung als nur einzelne Bausteine beizutragen.
- Nach Conway’s Law spiegelt sich in einem System die Organisationsstruktur wider: Wenn sich ein Team in Spezialisten für einzelne Systemschichten aufteilt, wird das System starr nach diesen Schichten entwickelt. Alternative Architekturansätze werden seltener in Betracht gezogen.
- Wenn die einzelnen Teammitglieder in jedem Bereich Erfahrung sammeln, bleibt das große Ganze bei den alltäglichen Entwurfsentscheidungen eher im Blick. Bei Änderungen im Frontend-Bereich wird beispielsweise eher berücksichtigt, welche Backend-Methoden „teuer“ sind, also zu einer hohen Systemlast führen.
- Schließlich ist jeder einzelne Entwickler eher ersetzbar, wenn sich technisches Fachwissen nicht jeweils in einzelnen Köpfen konzentriert. Denn Fachwissen ist tendenziell breiter gestreut.
Letztlich kommt es vermutlich stark auf die Vorlieben und Fähigkeiten der Entwickler an, vor allem, wenn mit einem bestehenden Team ein neues Projekt angefangen wird. Manche Entwickler möchten lieber innerhalb einer Systemschicht bzw. Technologie arbeiten, andere wollen lieber Fachanforderungen schichtenübergreifend umsetzen.
Welche Erfahrungen habt ihr / haben Sie gemacht?