Ist es üblich, bei Webentwicklungsprojekten Back-End und Front-End in zwei Positionen zu trennen?

31

Ist es bei einem Webstart üblicher, dass ein Techniker das Front-End UND das Back-End des Features bearbeitet (im Grunde genommen ist er für das gesamte Feature verantwortlich)? Oder haben Ingenieure zwischen Backend und Frontend getrennt?

Welche sind für welche Situationen vorteilhafter?

Der Nachteil, den ich festgestellt habe, wenn es darum geht, dass ein Ingenieur für das gesamte Feature verantwortlich ist, ist, dass die Person möglicherweise nur in der Frontend- oder Backend-Entwicklung besonders stark ist, nicht jedoch in beiden, und daher manchmal Geschwindigkeits- und Qualitätsverluste aufweist.

Wenn Sie Frontend- und Backend-Entwickler für ein Feature haben, erhöhen Sie die Geschwindigkeit des Features und die Qualität UND fördern die Zusammenarbeit. Ich mache mir jedoch Sorgen, dass zwei Ingenieure an einem Feature arbeiten, was möglicherweise zu einem schlechten Ressourcenverbrauch führt, da der eine Ingenieur an einem anderen Feature zum Bearbeiten eingesetzt werden kann.

Was ist die übliche / bewährte Methode für die Zuweisung von Backend- / Frontend-Engineering-Ressourcen bei einem kleinen Frühstart? Und wie wird es sich dann ändern, wenn es wächst?

lamp_scaler
quelle

Antworten:

29

Hier ist meine Weisheit aus 14 Jahren Erfahrung:

  • Wenn Sie ein Startup haben, weisen Sie keine Rollen zu. Besser hoffen, dass Sie ein gutes selbstorganisierendes Team zusammengestellt haben. Wenn sich alle kennen, weiß jeder, wer was am besten kann. Ein Projektmanager wird nur im Weg stehen.
  • später ist die Unterscheidung zwischen Front-End und Back-End sinnvoll. Im Backend steht Qualität an erster Stelle. Code muss performant, sicher und transaktionssicher sein. Im Front-End zählt die Implementierungszeit. Und Sie müssen sich auf ein gutes Backend verlassen können. Die unterschiedlichen Ziele von Front- und Back-End funktionieren nicht gut zusammen.
  • Das Back-End sollte bereits vorhanden sein, bevor der Front-End-Codierer mit der Arbeit beginnt. Andernfalls wird der Front-End-Codierer zu stark verlangsamt.
  • Das Backend muss schnell auf Frontend-Anforderungen reagieren können, um diese nicht zu verlangsamen
rdmueller
quelle
7
+1 fürif you have a startup, don't assign roles. Better hope that you assembled a good self organizing team. If everybody knows each other, everybody knows who does what the best.
Qwerky
7
-1 Qualität ist am Frontend genauso wichtig.
Florian Margaine
2
Ja, Qualität ist auch im Front-End wichtig, aber ein Fehler hat nicht die gleichen Konsequenzen wie ein Fehler im Back-End. Beispiel: Im Backend müssen Sie transaktionssicher sein, im Frontend (hoffentlich) verwenden Sie ein transaktionssicheres Backend :-)
rdmueller 22.07.13
4
@Ralf und wenn 40% Ihrer Benutzer keine Transaktion initiieren können, weil die Schnittstelle fehlerhaft ist, spielt es keine Rolle, ob diese Transaktion transaktionssicher gewesen wäre oder nicht. Qualität ist im Frontend genauso wichtig wie im Backend.
Racheet
1
@Racheet: Vielleicht hätte ich das anders ausdrücken sollen. Ich denke, was ich sagen wollte, ist, dass die Qualität unterschiedlich ist. Das Backend sollte das Frontend vor bestimmten Problemen wie der Transaktionssicherheit schützen. Wenn es richtig gemacht wird, müssen Sie sich nur um Transaktionen im Frontend kümmern, aber dennoch um Funktionalität, Benutzerfreundlichkeit, Design usw. Benutzerfreundlichkeit und Design sind Aspekte, die im Backend so gut wie nicht existieren - nur weil es kein Frontend ist: -)
rdmueller
26

Die beste Antwort kommt von @Shark, aber nur der letzte Teil "Es kommt darauf an." Nach meiner Erfahrung von ungefähr 16 Jahren habe ich gesehen, dass beide Optionen in einer Vielzahl unterschiedlicher Konfigurationen versucht wurden. Als Full-Stack-Entwickler habe ich Folgendes gelernt:

* (BE = Backend, FE = Frontend)

Allgemeine Vorbehalte der Split-Stack-Entwicklung:

  1. Agile Development Practices (heutzutage eine gängige Strategie) empfehlen die Entwicklung von Features, bei denen es sich aus Kundensicht um ein einzelnes wertvolles Funktionspaket handelt. Aus dieser Perspektive sollten Sie beide von Ihrem Entwickler implementieren lassen.

  2. Durch Aufteilen des Stapels entlang der Servergrenze wird ein Integrationspunkt zwischen den beiden Entwicklern erstellt. Wenn sie nicht effektiv kommunizieren und gut zusammenarbeiten, führt dies zu einer Reihe von Fehlern, wenn die beiden Funktionen zusammenkommen.

  3. Wenn Sie die Kommunikationsregel n (n-1) / 2 aus dem Monat des mythischen Mannes anwenden, werden Sie feststellen, dass die Aufteilung von Funktionen in zwei Teile zwischen zwei Personen Ihre Gesamtarbeitsbelastung erhöht. Zugegeben, diese Regel gilt auch für Features, aber die Aufteilung des Stacks verdoppelt den Kommunikationsaufwand.

  4. Ein Designer wird die Probleme der BE-Entwickler lösen, die nicht in der Lage sind, attraktive Schnittstellen von Grund auf neu zu erstellen. Dies setzt voraus, dass sie mindestens HTML und CSS kennen und eine Oberfläche erstellen können, die den vom Designer erstellten Screenshots entspricht.

  5. Features sind in der Regel isolierte Komponenten, die nur sehr wenig mit anderen Features interagieren. Dies ist nicht immer der Fall, aber normalerweise befindet sich der Interaktionspunkt wie bei einer Datenbank oder einem Dateisystem auf einer niedrigen Ebene. Ein Full-Stack-Entwickler kann diese Funktion also nicht implementieren. Wenn ein FE-Entwickler jedoch auf einen BE-Entwickler warten muss, um eine Aufgabe abzuschließen, kommt zu dem Produktivitätsverlust in Punkt 3 noch eine Verzögerung hinzu.

  6. Web2.0 verwischt die Unterscheidung zwischen FE & BE noch weiter. Da MVC-Frameworks und ganze Anwendungen auf Client-Seite erstellt werden, ist jetzt viel BE-Wissen erforderlich, um sichere und effiziente FE-Anwendungen zu implementieren.

  7. Mein größter Kritikpunkt an dieser Praxis ist, dass sie die Fähigkeiten aller am Projekt Beteiligten einschränkt. Obwohl dies in den frühen 2000er Jahren eine gängige Praxis war, wurde dies aus der Not heraus getan, da es ziemlich schwierig war, Entwickler zu finden, die beides konnten (nur wegen der Neuheit, nicht wegen einiger intrinsischer Schwierigkeiten, beides zu lernen). Was von der Praxis übrig bleibt, ist Ein Jahrzehnt später haben wir immer noch "Webentwickler", die CSS nicht kennen.

  8. Meine zweitgrößte Beschwerde ist, dass es ein Entwicklungsteam leicht segmentieren kann. Ein FE-Entwickler erstellt einen Fehler, nachdem er den BE-Code geändert hat, und das Team stimmt ab, um die Entwicklung über mehrere Stapel hinweg einzuschränken. Während Code Reviews und Aufklärung das Problem lösen könnten, werden die Menschen stattdessen territorial.

Vorteile / Anwendungsfälle der Split-Stack-Entwicklung:

  1. RESTful APIs eignen sich perfekt für diese Abgrenzung, da es keine FE gibt. Häufig arbeitet ein Unternehmen zuerst an einer RESTful-API und entwickelt anschließend seine Webanwendungen. In diesem Fall gibt es gute Gründe, das BE-Team auf die nächste Hauptversion zu konzentrieren, während die FE die Anwendung beendet. Die Gefahr der Abwanderung besteht jedoch weiterhin - insbesondere, wenn neue Informationen, die in der FE-Entwicklungsphase entdeckt wurden, nicht triviale Änderungen an der BE-API erfordern.

  2. Unausgeglichene Arbeitslasten zwischen FE & BE sind auch ein gutes Beispiel für die Bildung eines FE-Only-Teams. Auch dies ist sehr situativ, da die Hauptentwicklung möglicherweise über eine Desktop-Anwendung erfolgt und das Unternehmen versucht, eine "Lite" -Webschnittstelle zu entwickeln.

  3. Ausbildung neuer / Junior-Entwickler. Wenn Sie einen Praktikanten oder einen Junior-Entwickler einstellen und sich Sorgen machen, diese in die Tiefe zu treiben, ist es eine gute Option, einen Teil dieser Kommunikations- / Integrationskosten in ein Peer-Entwicklungssystem zu investieren.

Bedenken bezüglich der von @ Ralf akzeptierten Antwort auf dieser Seite:

  1. Der erste Punkt ist ziemlich mutig - und er wird schnell scheitern, wenn Sie nicht über eines dieser "gut organisierten Teams" verfügen. Selbst wenn Sie dieses Team haben, ist es in Ihrem und ihrem Interesse, ihre Grenzen zu erweitern. Und gute selbstorganisierende Teams sind nicht immer selbstmotiviert, dies zu tun.

  2. Ihr zweiter Punkt ist einfach falsch. Moderne Webentwicklung erfordert FE-Code, der performant, sicher, asynchron, XSS-sicher, browserübergreifend und schnell entwickelt ist. Die Ziele konkurrieren einfach nicht mit BE, sie sind effektiv gleich.

  3. Der dritte Punkt ist ebenfalls eine schlechte Annahme - die FE-Entwicklung kann mit reinem HTML / CSS / JS ohne jegliche BE-Grundlagenarbeit beginnen. Von dort aus ist es nur noch eine triviale Anstrengung, es in Vorlagen für das BE-Rendering zu zerlegen. Oft ist es am besten, mit der FE-Arbeit zu beginnen, da dies den Stakeholdern ein warmes und unscharfes Gefühl gibt, um den visuellen Fortschritt von vornherein zu sehen.

Fazit:

Wenn Sie ein Startup sind und nicht viel Zeit oder Geld zum Brennen haben, stellen Sie keine FE- oder BE-Entwickler ein. Stellen Sie hochrangige Webentwickler und einen guten UX / Designer ein, damit Ihre Anwendung so schnell wie möglich in Betrieb genommen werden kann. Sie kosten mehr, sind aber weitaus produktiver und benötigen weniger davon.

Marcus Pope
quelle
5

Ich denke die Frage ist falsch.

Alle Startups, an denen ich teilgenommen habe, hatten keine FE-BE-Architektur.

Die meisten Startups, die ich kenne, haben:

  • Kern - das eigentliche Produkt, das eine Schnittstelle verfügbar macht
  • UI - BE und FE. Die BE verwendet die API des Core.

APIs sind zustandslos und leicht zu verspotten - auch ohne die Notwendigkeit eines Core-Entwicklers. Zur Hölle, wenn ich ein Projekt von Grund auf neu starten müsste, könnte ich mit einer ganzen Benutzeroberfläche beginnen, die nur mit Mocks funktioniert - was sich hervorragend für Präsentationen eignet. Das meiste Feedback kommt von der Benutzeroberfläche. Kunden bemerken, dass mehr - (hängt von Ihrer Zielgruppe ab.)

Zum Beispiel: Die Google-Suche enthält die Core-Komponente, mit der das Web durchsucht, indiziert usw. wird. Die Google-Benutzeroberfläche ist eine völlig andere Welt. Dieser Core unterstützt problemlos Suchvorgänge außerhalb des WWW, die Benutzeroberfläche jedoch nicht.

Auf diese Weise ist Ihre Benutzeroberfläche "steckbar" und Sie haben Trennung von Bedenken.

Sie sprachen von Entwicklungswissen, übersehen jedoch Aspekte des Projektmanagements. Während das Kernteam möglicherweise eine Sprintdauer von 2 Wochen benötigt, verwendet das UI-Team CI - alles wird die ganze Zeit hochgeladen. Das Kernteam benötigt Abwärtskompatibilität, die Benutzeroberfläche jedoch nicht.

Die Sprache ist unterschiedlich. Sie werden wahrscheinlich C-Entwickler für die Core-Komponente benötigen - und Sie werden in Ordnung sein, wenn sie auf einem einzelnen Betriebssystem ausgeführt wird, wobei die Benutzeroberfläche in einer Cross-OS-Sprache geschrieben wird.

Tests unterscheiden sich. Die UI-Testwelt ist eine der komplexesten, die ich in der Softwareentwicklung kenne. Die meisten Startups vernachlässigen dies und bereuen diese Entscheidung später. Sie können BE und FE beim Testen nicht trennen. Es muss eine Einheit sein, die damit umgeht.

Open Source-Benutzeroberfläche - einer der größten Vorteile der Trennung der beiden ist, dass Sie Ihre Benutzeroberfläche als Open Source-Benutzeroberfläche öffnen können. UI-Projekte benötigen Open Source-Unterstützung.

Ich kann mir keinen Benutzeroberflächenentwickler vorstellen, der die gesamte session Funktion nicht verstehen kann . Sie wissen, wo Sie sich einloggen und zwischen verschiedenen Anfragen eingeloggt bleiben. Zwar kennen sie PHP und nicht Java. Das BE-Konzept sollte jedoch klar sein (z. B. ein verschlüsseltes Cookie verwenden). Die spezifische Sprachbarriere ist falsch - jeder Entwickler sollte bereit sein, in jeder Sprache zu arbeiten. Wer hätte gedacht, dass sie vor ein paar Jahren BE in JavaScript schreiben würden?

Wenn Sie weiterhin drei Teams haben: Core, BE und FE, ist dies imho eine Verschwendung von Ressourcen. Was ist mit DB? sollten Sie DBAs haben? Warum sollte ein BE-Entwickler DB und ein FE-Entwickler BE und DB nicht kennen? Es gibt keine Grenzen.

Wenn Sie Experten benötigen, funktioniert das Outsourcing ziemlich gut. Sie liefern normalerweise Qualitätscode und das ziemlich schnell. Sie möchten sie nicht unbedingt im Haus haben, weil Sie verloren gehen, wenn sie gehen. Außerdem können Sie sich heute online beraten lassen. Neueste Produkte erfordern möglicherweise einen anderen Ansatz.

Das Ergebnis ist also im Grunde ein sehr dünnes BE in der Benutzeroberfläche, das jeder FE-Entwickler entwickeln kann. Wenn Sie eine starke BE in der Benutzeroberfläche haben, verfügen Sie höchstwahrscheinlich über einige API-Funktionen, die im Core erforderlich sind.

Es gibt immer mindestens einen Entwickler, der sich vom Rest abhebt. Angesichts einer derart dünnen FE kann er / sie es schaffen, andere Entwickler im BE-Code zu unterstützen (nicht zu entwickeln). Meiner Meinung nach ist dieser Entwickler in einer sehr guten Position und sollte angemessen ausgezeichnet werden (allerdings nicht im Gehalt, etwas anderes). Ich vertraue auch darauf, dass sie in der Lage sind, den Erstellungsprozess zu handhaben und ordnungsgemäß zu erstellen.

Dieses Modell bietet Ihnen eine große Flexibilität bei der Entwicklung von BE. Die Welt von BE hat in den letzten Jahren einige Umkehrungen erlebt, daher empfehle ich, sich sowieso nicht zu sehr auf die Stabilität von BE zu verlassen. Kern ist eine andere Geschichte.

Es bleibt die Frage - sollten FE und BE dasselbe Projekt sein ? Sie sollten Folgendes beachten

  • Statische Ressourcen werden am besten vom Front-Server aus bedient. Da Front-End-Server (z. B. nginx) sehr leistungsfähig sind und Sie Cache für statische Ressourcen verwenden können, können Sie Ihre statischen Ressourcen mit einer einzigen Bereitstellung verwalten (dies sollten alle HTML-Inhalte, JS, CSS und Images sein).
  • Der Back-End-Code hat nicht den gleichen Luxus, daher müssen Sie über ein verteiltes System verfügen, das auch von einem Front-Server verwaltet wird.
  • FE-Code sollte unbedingt mit allen neuen Technologien, die JavaScript unterstützen, wiederverwendet werden. Sie können jetzt Desktop- und Mobilanwendungen mit JavaScript schreiben.
  • Der Erstellungsprozess ist völlig anders - und das kann sogar die Bereitstellung von Patches, das Upgrade, die Installation usw. umfassen.

Ich kann weitermachen, aber ich hoffe, es ist klar, dass BE und FE dasselbe Team sein sollten, aber vielleicht unterschiedliche Projekte.

Guy Mograbi
quelle
0

Ich denke, die erfolgreiche Implementierung könnte ein paar Dinge sein. Wenn es einen einzigen Entwickler gibt, der ein starkes Backend hat, aber auch ein gutes Gespür für die Benutzeroberfläche und alle "Frontend" -Stücke hat, könnte dies wahrscheinlich erfolgreich sein. Dies ist jedoch in der Regel nicht der Fall (nach meiner persönlichen Erfahrung). Zum Beispiel betrachte ich mich als Back-End-Entwickler. Aber ich arbeite selbst an vielen Projekten. Arbeite ich an der Präsentation und den Client-Side-Pieces? Sicher. Sehen sie so gut aus, wie es ein talentierter Designer und clientseitiger Entwickler machen würde? Absolut nicht.

Es ist alles Geben und Nehmen. Aber lassen Sie sich durch die Zusammenarbeit zweier Entwickler nicht zögern. Es gibt bewährte Methoden, um die Produktion zwischen einem Entwickler und einem Designer zu maximieren.

Mit anderen Worten ... es kommt darauf an


quelle