Creo que la pregunta está mal.
Todas las startups en las que participé no tenían una arquitectura única FE-BE.
La mayoría de las startups que conozco tienen:
- Core: el producto real que expone una interfaz
- UI - BE y FE. El BE utiliza la API del núcleo.
Las API no tienen estado y se burlan fácilmente, incluso sin la necesidad de un desarrollador principal. Demonios, si tuviera que comenzar un proyecto desde cero, podría comenzar con una interfaz de usuario completa que funcione exclusivamente en simulacros, lo que será ideal para presentaciones. La mayoría de los comentarios se deben a la interfaz de usuario. Los clientes notan que más: (depende de su público objetivo).
Por ejemplo, Google Search tiene el componente Core que rastrea la web, lo indexa, etc. y la interfaz de usuario de Google es un mundo totalmente diferente. Este núcleo puede admitir fácilmente búsquedas no WWW, mientras que la interfaz de usuario no puede.
De esta manera, su interfaz de usuario es "conectable" y tiene una separación de preocupaciones.
Se refirió al conocimiento del desarrollo, sin embargo, pasa por alto los aspectos de gestión de proyectos. Si bien el equipo central puede necesitar 2 semanas de duración del sprint, el equipo de la IU usará CI: todo se carga todo el tiempo. El equipo Core necesitará compatibilidad con versiones anteriores, mientras que la IU no.
El idioma es diferente. Probablemente querrá desarrolladores de C para el componente Core, y estará bien si se ejecuta en un solo sistema operativo, ya que la IU se escribirá en un lenguaje de sistema operativo cruzado.
Las pruebas difieren. El mundo de prueba de IU es uno de los más complejos que conozco en el desarrollo de software. La mayoría de las startups lo descuidan y lamentan esta decisión más adelante. No puede separar BE y FE al realizar la prueba. Tiene que ser una sola unidad que lo maneje.
Interfaz de usuario de código abierto: uno de los mayores beneficios de separar los dos es que puede abrir el código de su interfaz de usuario. El proyecto de interfaz de usuario necesita soporte de código abierto.
No puedo imaginar un desarrollador de UI que no pueda entender toda la session
función. Ya sabes: dónde inicias sesión y quédate conectado entre diferentes solicitudes. Es cierto que pueden conocer PHP y no Java ... pero el concepto BE debe ser claro (por ejemplo, usar una cookie encriptada). La barrera específica del idioma está mal: cada desarrollador debe estar dispuesto a trabajar en cualquier idioma. ¿Quién hubiera pensado que escribirían BE en JavaScript hace un par de años?
Si sigues teniendo 3 equipos: Core, BE y FE, es un desperdicio de recursos en mi humilde opinión. ¿Qué hay de DB? deberías tener DBA? ¿Por qué un desarrollador BE debería conocer DB y un desarrollador FE no conocer BE y DB? No hay limite.
Si necesita expertos, y lo hará, externalizarlos funciona bastante bien. Generalmente entregan código de calidad y lo hacen bastante rápido. No necesariamente los quieres en casa porque te perderás si se van. Además, puede obtener excelentes consejos en línea hoy. Cosas de vanguardia pueden requerir un enfoque diferente.
Entonces, el resultado es básicamente un BE muy delgado en la interfaz de usuario que cada desarrollador de FE puede desarrollar. Si tiene un BE grueso en la interfaz de usuario, probablemente tenga alguna funcionalidad de API requerida en el Core.
Siempre hay al menos un desarrollador que se destaca del resto. Dada una FE tan delgada, él / ella puede administrar dar soporte (no desarrollar) a otros desarrolladores en código BE. Mi opinión es que este desarrollador está en una muy buena posición y debe ser otorgado de manera apropiada (sin embargo, no en salario, otra cosa). También confío en que podrán manejar el proceso de compilación y compilar adecuadamente.
Este modelo le brinda una gran flexibilidad con respecto al desarrollo de BE. El mundo BE ha experimentado varios cambios en los últimos años, por lo que no recomiendo confiar demasiado en la estabilidad BE de todos modos. Core es una historia diferente.
Todavía queda la pregunta: ¿deberían FE y BE ser el mismo proyecto ? Debe tener en cuenta lo siguiente
- Los recursos estáticos se sirven mejor desde el servidor frontal. Dado que los servidores front-end (p. Ej., Nginx) son muy potentes y puede usar Cache para recursos estáticos, puede administrarlos con una sola implementación de sus recursos estáticos (que deben ser todo el contenido HTML, JS, CSS, imágenes).
- El código de back-end no tiene los mismos lujos, por lo que debe tener un sistema distribuido, que también es administrado por un servidor frontal.
- El código FE se debe reutilizar con todas las nuevas tecnologías que admiten JavaScript. Ahora puede escribir aplicaciones de escritorio y móviles con JavaScript.
- El proceso de compilación es completamente diferente, e incluso puede incluir entrega de parches, actualización, instalación, etc.
Puedo continuar, pero espero que quede claro que creo que BE y FE deberían ser el mismo equipo, pero quizás proyectos diferentes.
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.