Die Rolle des Full-Stack-Entwicklers in großen Projekten

Vor etwas weniger als zwei Jahrzehnten waren die Dinge einfach. Softwareentwickler befassten sich hauptsächlich mit der End-to-End-Entwicklung von Software. Es gab keinen wesentlichen Unterschied zwischen den Personen, die die Benutzeroberfläche erstellt haben, und denen, die das Backend entwickelt haben. Die meisten Anwendungen waren entweder Desktop-Monolithen oder Desktop-Clients, die über das Netzwerk mit einer Art Server-Backend kommunizierten:

In beiden Fällen lieferten frühe Entwicklungstools genügend Bausteine, damit Entwickler alles unter demselben Projekt erstellen konnten. Dies führte zu homogenen, aber langweiligen und unattraktiv aussehenden Anwendungen. Damals war das Web größtenteils eine Reihe statischer Seiten, die miteinander verknüpft waren. Mit einigen exzentrischen Ausnahmen ähnelten die meisten dem Erscheinungsbild ihrer blockigen Windows-Kollegen.

Einige Jahre später, Anfang und Mitte der 2000er Jahre, kam die Web 2.0-Revolution, die alles wegfegte. Anstatt Einzweck-Monolithen zu bleiben, wurden Softwareanwendungen zu verteilten „Diensten“. Das traditionelle Modell der Installation von Hunderten von Megabyte auf dem Computer wurde durch die Eingabe der URL der bevorzugten Webanwendung in einem Webbrowser ersetzt. Mit der Zeit nahm die Relevanz des zugrunde liegenden Betriebssystems ab. In etwas weniger als einem Jahrzehnt wurde der Browser zum Betriebssystem – für viele war das einzige Fenster immer offen.

Web 2.0 und der folgende Ausflug in die mobile Welt erzwangen erhebliche Änderungen in der Art und Weise, wie die neue Welle von Softwareanwendungen erstellt werden sollte. Ausnahmsweise wurden Backend- und Frontend-Entwicklung zu getrennten Disziplinen, für die jeweils unterschiedliche Fähigkeiten und Fachkenntnisse erforderlich waren. Tatsächlich ist in den letzten Jahren die Lücke zwischen Frontend und Backend so groß geworden, dass eine neue Disziplin entstanden ist, die diese Teile wieder zusammenkleben soll – die Rolle des Full-Stack-Entwicklers.

Missverständnisse

Wenn Sie sich heutzutage die Stellenangebote ansehen, scheint es, als ob fast jeder nach Entwicklern sucht, die an allen Aspekten eines Projekts arbeiten können. Viele Unternehmen nennen dies eine “Full Stack” -Position, und tatsächlich haben viele Unternehmen bereits solche “Full Stack” -Positionen in ihren Teams eröffnet. Ich finde diese Idee, dass ein “Full-Stack” -Entwickler ein “Besserwisser” ist, fehlerhaft und wage zu glauben, dass es relativ wenigen Organisationen gelungen ist, die neue Rolle voll auszuschöpfen. Dieser Beitrag versucht zu beleuchten, wo der Full-Stack-Entwickler idealerweise in einem Team bleiben sollte, in der Hoffnung, diese Missverständnisse aufzulösen.

Es gibt zwei sehr widersprüchliche Missverständnisse, die herumgeworfen werden, wenn es darum geht, zu definieren, was ein Full-Stack-Entwickler ist und was der Full-Stack tun soll:

Der Full-Stack-Entwickler weiß von allem etwas, sodass unser Unternehmen durch die Einstellung einiger Mitarbeiter Personal sparen kann.

oder

Der Full-Stack-Entwickler weiß ein bisschen von allem, aber nichts Besonderes. Ein Full-Stack-Entwickler wäre nur eine Belastung für unser Team. Sie würde niemals in der Lage sein, auf die Detailebene einzugehen, wie es ein Frontend oder ein Backend-Typ tun würde.

Beides ist nicht 100% falsch, aber auch nicht richtig. Ein Full-Stack-Entwickler ist kein Whiz-Kid, der ein Team von Backend- und Frontend-Experten auf magische Weise ersetzen könnte. Nein. Obwohl eine Full-Stack-Entwicklerin beide Welten verstehen soll, besteht ihre Aufgabe nicht darin, diese beiden Gruppen zu ersetzen, sondern sie näher zusammenzubringen. Tatsächlich ist ein guter Full-Stack-Entwickler ein bisschen wie der Bassist einer Rockband:

Full Stack = Bassist?!?

Bass spielen in einer Rockband ist eine oft unterschätzte, aber unglaublich wichtige Rolle. Anders als die Sängerin oder die Gitarristin nimmt die Bassistin wenig Anerkennung für ihre Leistung. Mit Ausnahme von Jazz- und Funkmusik hat die Bassistin selten eine Prime Time für sich. Sie wird nicht immer ein atemberaubendes Solo herausholen, wie es die Leadgitarre tun würde. Sie wird auch nicht immer die Fans einbeziehen, so wie es nur der Sänger tun kann. Ein guter Bassist wird jedoch immer da sein und die gesamte Band zusammenkleben.

“Ein Bassist ist ein bisschen wie der Mörser zwischen den Steinen.” (David Elefson, Megadeth)

Hast du jemals eine gute Rockband mit einem schlechten Bassisten gesehen? Oder schlimmer noch, eine Rockband mit Selbstachtung ohne Bassisten? Nein? Dafür gibt es einige gute Gründe:

Erstens gibt es eine große Lücke im Klangspektrum zwischen Schlagzeug am unteren Ende und hohen Gitarren und Gesang am anderen Ende. Diese Lücke wird normalerweise vom Bass gefüllt. Wenn Sie den Bass aus der Gleichung herausnehmen, bleibt eine flache Melodie übrig, die von „Seele und Geist“ übrig bleibt. Sie können es immer noch anhören, aber es wird sich immer so anfühlen, als ob etwas fehlt.

Einen erfahrenen Bassisten in der Band zu haben, ist für die anderen Bandkollegen genauso wichtig wie für das Publikum. Eines der schwierigsten Dinge beim Spielen in einer Band ist es, im Einklang zu spielen und mit den anderen zu synchronisieren. Hier ist die Rolle des Bassisten als Koordinator und Drehscheibe zwischen den Spielern so wichtig. Sie behält das Tempo und den Rhythmus des Schlagzeugers jederzeit bei und legt eine Grundlage für die Hauptmelodie, die während des gesamten Songs ziemlich gleich bleibt. Auf diese Weise kann der Gitarrist ein wunderschönes Solo spielen, ohne befürchten zu müssen, dass sich der Klang löst.

Zurück zum Team

Ein Software-Team sieht heutzutage der Rockband ziemlich ähnlich, die ich bisher beschrieben habe. Normalerweise haben Sie reine Backend- und Frontend-Entwickler, die ihre eigenen Aufgabenspektren abdecken. Wenn das vorliegende Projekt gut spezifiziert ist, einigen sich beide Seiten in der Regel auf eine API und tun weiterhin das, was sie am besten können, und teilen wenig Bedenken darüber, wie die andere Seite die Dinge tut.

Wie wir alle wissen, funktionieren nur sehr wenige Dinge im Leben in ihrem idealen Zustand. Die meiste Zeit verbringen Entwickler damit, die Missverständnisse in ihrer Kommunikation auszuräumen. Sie tun dies bei langen Treffen. Wenn Sie an einem solchen Meeting teilgenommen haben, wissen Sie, wie wenig Respekt ein Frontend-Typ Ihren detaillierten Vorschlägen zur Beschleunigung des Backends entgegenbringen würde. Seien wir ehrlich, wenn es darum geht, dass Frontend-Leute ihre Probleme erklären, sind Sie an der Reihe, sich Ihr Telefon anzusehen. Das ist nur die Realität. Meistens weichen die Visionen der beiden Seiten voneinander ab, und der einzige Weg, sie wieder auf den richtigen Weg zu bringen, sind mehr Besprechungen und Umgestaltungsbemühungen.

Hier kann die Einführung eines Full-Stack-Entwicklers in das Team die Produktivität des Teams erheblich steigern. Nicht unbedingt, um neue Funktionen auf den Markt zu bringen, sondern vielmehr, um die Teamreibung zu verringern und die Refactoring-Bemühungen zu reduzieren.

Der Full-Stack-Entwickler kann die Bedenken beider Seiten verstehen und sie in Code übersetzen, der die Eingaben von einer Seite übernimmt und die Verarbeitung für die andere Seite erleichtert. Bei großen Projekten wird normalerweise eine dünne Abstraktionsebene zwischen Frontend und Backend erstellt. Diese Schicht, auch als „Middleware“ bezeichnet, sollte die Implementierungsdetails von Frontend und Backend verbergen und einen nahtlosen Datenfluss von einem Ende zum anderen ermöglichen.

Bei der Entwicklung einer Middleware, die traditionell unter Verwendung des Backend-Technologie-Stacks angenommen wird, habe ich eine Verschiebung hin zur weiteren Überbrückung der Lücke festgestellt. Es ist keine Überraschung, einen gemischten Stack auf dem Server zu sehen, bei dem das Kern-Backend möglicherweise Java-basiert ist und eine auf NodeJS basierende Middleware im Vordergrund steht. Bei großen Softwareprojekten kann das Durchführen einer solchen Leistung dazu führen, dass das Projekt in die Höhe schnellen oder auf die Erde gebracht wird, wenn es nicht ordnungsgemäß ausgeführt wird. Dies ist ein Ort, an dem ein Teammitglied, das über den gesamten Stapel hinweg kompetent ist, einen großen Unterschied machen kann.

Nicht nur das. Full-Stack-Entwickler können die Treiber für die Entwicklung neuer Funktionen sein. Obwohl man kaum eine neue Funktion für den gesamten Stack entwickeln kann, ist es sinnvoll, Full-Stack-Entwickler ein Gerüst bauen zu lassen, an dem Backend- und Frontend-Entwickler später arbeiten können. Dies kann wiederum frühzeitig Zeit und Kommunikationsaufwand sparen sowie später im Projekt umgestaltet werden.

Wie Sie sehen, ist die Rolle eines Full-Stack-Entwicklers in einem großen Projekt weit davon entfernt, der Experte oder das Zauberkind zu sein, das alles kann. Ähnlich wie bei einem Bassisten in einer Rockband ist die Rolle des Full-Stack-Entwicklers viel eher die eines Kommunikators und Koordinators zwischen Frontend und Backend. Es ist nicht dazu gedacht, eine dieser Rollen in naher Zukunft zu ersetzen, sondern sie zu unterstützen und Brücken zwischen ihnen zu schlagen. Ich hoffe, all dies macht auch für Sie Sinn, und Sie werden es berücksichtigen, wenn Ihre Organisation das nächste Mal beschließt, einen Full-Stack-Entwickler an Bord zu holen.

Haftungsausschluss: Ich bin sowohl ein Full-Stack-Entwickler als auch ein begeisterter Bassgitarrist ?

Dieser Beitrag erscheint auch in meinem Blog