Penso che la domanda sia sbagliata.
Tutte le startup a cui ho preso parte non avevano solo un'architettura FE-BE.
La maggior parte delle startup che conosco hanno:
- Core: il prodotto reale che espone un'interfaccia
- UI - BE e FE. BE utilizza l'API del Core.
Le API sono apolidi e facilmente derise, anche senza la necessità di uno sviluppatore principale. Inferno, se dovessi iniziare un progetto da zero, potrei iniziare con un'intera interfaccia utente che funziona esclusivamente su simulazioni - che sarà eccezionale per le presentazioni. Gran parte del feedback è dovuto all'interfaccia utente. I clienti notano che altro - (dipende dal tuo pubblico di destinazione.)
Ad esempio: Ricerca Google ha il componente Core che esegue la scansione del Web, lo indicizza ecc. E l'interfaccia utente di Google è un mondo completamente diverso. Questo core può facilmente supportare ricerche non sul WWW, mentre l'interfaccia utente no.
In questo modo la tua interfaccia utente è "innestabile" e hai la separazione delle preoccupazioni.
Hai fatto riferimento alla conoscenza dello sviluppo, ma stai trascurando gli aspetti della gestione del progetto. Mentre il core team potrebbe aver bisogno di una durata dello sprint di 2 settimane, il team dell'interfaccia utente utilizzerà CI: tutto viene caricato continuamente. Il team principale avrà bisogno di compatibilità con le versioni precedenti, mentre l'interfaccia utente no.
La lingua è diversa. Probabilmente avrai bisogno di sviluppatori C per il componente Core e andrai bene se viene eseguito su un singolo sistema operativo, dove l'interfaccia utente verrà scritta in un linguaggio Cross OS.
I test differiscono. Il mondo dei test dell'interfaccia utente è uno dei più complessi che conosco nello sviluppo di software. La maggior parte delle startup lo trascura e rimpiange questa decisione in seguito. Non è possibile separare BE e FE durante il test. Deve essere una singola unità che la gestisce.
Interfaccia utente open source: uno dei maggiori vantaggi della separazione dei due è la possibilità di open source l'interfaccia utente. Il progetto UI necessita di supporto open source.
Non riesco a immaginare uno sviluppatore dell'interfaccia utente in grado di comprendere l' intera session
funzionalità. Sai - dove accedi e rimani connesso tra diverse richieste. È vero che potrebbero conoscere PHP e non Java .. ma il concetto di BE dovrebbe essere chiaro (ad es. Utilizzare un cookie crittografato). La barriera linguistica specifica è errata: ogni sviluppatore dovrebbe essere disposto a lavorare in qualsiasi lingua. Chi avrebbe mai pensato che avrebbero scritto BE in JavaScript un paio di anni fa?
Se continui ad avere 3 squadre: Core, BE e FE, è uno spreco di risorse imho. Che mi dici di DB? dovresti avere DBA? Perché uno sviluppatore BE dovrebbe conoscere DB e uno sviluppatore FE non conoscere BE e DB? Non c'è limite.
Se hai bisogno di esperti e lo farai, l'outsourcing di questi funziona abbastanza bene. Generalmente forniscono un codice di qualità e lo fanno abbastanza velocemente. Non li vuoi necessariamente internamente perché ti perderai se se ne vanno. Inoltre puoi ricevere ottimi consigli online oggi. Roba all'avanguardia potrebbe richiedere un approccio diverso.
Quindi il risultato è sostanzialmente un BE molto sottile nell'interfaccia utente che ogni sviluppatore FE può sviluppare. Se hai un grosso BE nell'interfaccia utente, molto probabilmente hai alcune funzionalità API richieste nel Core.
C'è sempre almeno uno sviluppatore che si distingue dal resto. Dato un FE così sottile, può gestire fornendo (non sviluppando) altri sviluppatori nel codice BE. La mia opinione è che questo sviluppatore è in una posizione molto buona e dovrebbe essere assegnato in modo appropriato (non in stipendio però, qualcos'altro). Confido inoltre che saranno in grado di gestire il processo di compilazione e la compilazione in modo corretto.
Questo modello offre una grande flessibilità per quanto riguarda lo sviluppo di BE. Il mondo BE ha conosciuto diversi cambiamenti negli ultimi due anni, quindi non raccomando di fare troppo affidamento sulla stabilità BE. Core è una storia diversa.
Rimane ancora la domanda: FE e BE dovrebbero essere lo stesso progetto ? Si dovrebbe notare quanto segue
- Le risorse statiche vengono gestite al meglio dal front-server. Poiché i server front-end (ad esempio nginx) sono molto potenti e poiché è possibile utilizzare la cache per risorse statiche, è possibile gestire con una singola distribuzione delle risorse statiche (che dovrebbe essere tutto il contenuto HTML, JS, CSS, Immagini).
- Il codice back-end non ha gli stessi lussi, quindi è necessario disporre di un sistema distribuito, che è anche gestito da un front-server.
- Il codice FE deve essere riutilizzato con tutte le nuove tecnologie che supportano JavaScript. Ora puoi scrivere applicazioni desktop e mobili con JavaScript.
- Il processo di compilazione è completamente diverso e può includere anche la consegna, l'aggiornamento, l'installazione delle patch, ecc.
Posso continuare, ma spero sia chiaro che penso che BE e FE debbano essere la stessa squadra, ma forse progetti diversi.
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.