Myślę, że pytanie jest złe.
Wszystkie startupy, w których brałem udział, nie miały architektury FE-BE.
Większość startupów, które znam, ma:
- Rdzeń - rzeczywisty produkt, który udostępnia interfejs
- UI - BE i FE. BE używa interfejsu API rdzenia.
Interfejsy API są bezpaństwowe i łatwo się z nich kpić - nawet bez potrzeby głównego programisty. Do diabła, gdybym musiał rozpocząć projekt od zera, mógłbym zacząć od pełnego interfejsu użytkownika, który działa wyłącznie na próbach - co będzie świetne do prezentacji. Większość opinii pochodzi z interfejsu użytkownika. Klienci zauważają, że więcej - (zależy od grupy docelowej).
Na przykład - wyszukiwarka Google ma podstawowy komponent, który indeksuje sieć, indeksuje ją itp., A interfejs użytkownika Google to zupełnie inny świat. Ten rdzeń może z łatwością obsługiwać wyszukiwania inne niż WWW, podczas gdy interfejs użytkownika nie.
W ten sposób twój interfejs użytkownika jest „wtykany” i masz oddzielne obawy.
Odwołałeś się do wiedzy programistycznej, ale przeoczysz aspekty zarządzania projektami. Podczas gdy zespół podstawowy może potrzebować 2 tygodniowego sprintu, zespół interfejsu użytkownika użyje CI - wszystko jest przesyłane przez cały czas. Zespół podstawowy będzie potrzebował kompatybilności wstecznej, podczas gdy interfejs użytkownika nie.
Język się różni. Prawdopodobnie będziesz chciał deweloperów C dla komponentu Core - i wszystko będzie dobrze, jeśli działa na jednym systemie operacyjnym, gdzie interfejs użytkownika będzie napisany w języku wielu systemów operacyjnych.
Testy się różnią. Świat testowy interfejsu użytkownika jest jednym z najbardziej złożonych, jakie znam w tworzeniu oprogramowania. Większość startupów lekceważy to i później żałuje tej decyzji. Podczas testowania nie można oddzielić BE i FE. Musi to być pojedyncza jednostka, która sobie z tym poradzi.
Interfejs użytkownika typu open source - jedną z największych korzyści z rozdzielenia tych dwóch elementów jest to, że można otworzyć interfejs użytkownika typu open source. Projekt interfejsu użytkownika wymaga wsparcia typu open source.
Nie wyobrażam sobie programisty interfejsu użytkownika, który nie rozumie całej session
funkcji. Wiesz - gdzie się logujesz i pozostajesz zalogowany między różnymi żądaniami. To prawda, że mogą znać PHP, a nie Javę, ale koncepcja BE powinna być jasna (np. Użyć zaszyfrowanego pliku cookie). Określona bariera językowa jest błędna - każdy programista powinien być gotowy do pracy w dowolnym języku. Kto by pomyślał, że kilka lat temu napisze BE w JavaScript?
Jeśli nadal będziesz mieć 3 zespoły: Core, BE i FE, to marnowanie zasobów, imho. Co z DB? powinieneś mieć DBA? Dlaczego programista BE powinien znać DB, a deweloper FE nie znać BE i DB? Nie ma limitu.
Jeśli potrzebujesz ekspertów, a będzie to konieczne, outsourcing ich działa całkiem dobrze. Zazwyczaj dostarczają kod jakości i robią to dość szybko. Niekoniecznie chcesz ich w domu, ponieważ zgubisz się, jeśli odejdą. Poza tym dzisiaj możesz uzyskać świetne porady online. Najnowocześniejsze rzeczy mogą wymagać innego podejścia.
Rezultatem jest więc bardzo cienki BE w interfejsie użytkownika, który każdy programista FE może opracować. Jeśli masz gruby BE w interfejsie użytkownika, najprawdopodobniej masz pewne funkcje API wymagane w Core.
Zawsze jest co najmniej jeden programista, który wyróżnia się spośród pozostałych. Biorąc pod uwagę tak cienki FE, może on / ona udzielać wsparcia (nie rozwijać) innym programistom w kodzie BE. Moim zdaniem ten programista jest na bardzo dobrej pozycji i powinien być odpowiednio nagradzany (choć nie w wynagrodzeniu, coś innego). Ufam również, że będą w stanie obsłużyć proces kompilacji i poprawnie budować.
Ten model zapewnia dużą elastyczność w zakresie rozwoju BE. Świat BE doświadczył kilku zmian w ciągu ostatnich kilku lat, więc i tak nie zalecam zbytniego polegania na stabilności BE. Rdzeń to inna historia.
Pozostaje pytanie - czy FE i BE powinny być tym samym projektem ? Należy zwrócić uwagę na następujące kwestie
- Zasoby statyczne najlepiej podawać z serwera frontowego. Ponieważ serwery Front-End (np. Nginx) są bardzo wydajne i ponieważ można używać pamięci podręcznej dla zasobów statycznych, można zarządzać za pomocą pojedynczego wdrożenia zasobów statycznych (powinna to być cała zawartość HTML, JS, CSS, obrazy).
- Kod zaplecza nie ma takich samych luksusów, więc musisz mieć system rozproszony - który jest również zarządzany przez serwer frontowy.
- Kod FE powinien zostać ponownie wykorzystany we wszystkich nowych technologiach obsługujących JavaScript. Możesz teraz pisać aplikacje komputerowe i mobilne z JavaScript.
- Proces kompilacji jest zupełnie inny - i może obejmować nawet dostarczanie łat, aktualizację, instalację itp.
Mogę kontynuować, ale mam nadzieję, że jest jasne, że uważam, że BE i FE powinny być tym samym zespołem, ale może różnymi projektami.
if 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.