Tenemos un nuevo proyecto en marcha, y en este momento los desarrolladores se han dividido en dos equipos, el equipo A y el equipo B. Este proyecto tiene 2 partes que requieren desarrollo en toda la pila de desarrollo. Muestra muy simplificada de nuestra pila que se muestra a continuación:
Cada parte del proyecto requiere desarrollo en toda la pila, por lo que normalmente esperaría un enfoque de desarrollador de pila completa, que es cómo hemos estado desglosando nuestro trabajo dentro del equipo B, diseñando y resolviendo las interacciones entre las diferentes partes.
Sin embargo, recientemente he aprendido que el equipo A quiere estar a cargo de ciertas partes de la pila, y están proponiendo una división entre los dos equipos, donde la capa de abstracción de datos (y poner contenido en la capa de datos) es manejada por sin desarrollo del equipo B. La división se vería similar a esto:
Para mí esto se siente muy poco natural. Cada equipo tiene diferentes objetivos y escalas temporales para lograr estos objetivos, pero el Equipo B tendrá una dependencia del Equipo A para implementar las funciones. La solución propuesta es que las interfaces comunes se definen por adelantado (probablemente haya una escala de tiempo de 2 años en el proyecto, por lo que podrían ser numerosas). El Equipo A luego desarrollará los bits necesarios para estas interfaces desde el principio a pesar de tener su propio conjunto de objetivos, mientras que el Equipo B rechaza todas las llamadas a corto plazo para que puedan progresar.
Me preocupa este enfoque con respecto a:
- Las interfaces pueden cambiar y el Equipo A puede no tener el ancho de banda o el tiempo para acomodar los requisitos cambiantes.
- Los errores en el código del Equipo A podrían evitar que el Equipo B progrese, y de nuevo pueden no ser la prioridad para solucionarlos debido a que el Equipo A tiene una cola de priorización diferente.
- Falta de conocimiento difundido entre los equipos: el equipo B puede no comprender completamente lo que sucede debajo del capó y puede tomar malas decisiones de diseño debido a esto.
Se ha sugerido que muchas compañías en la industria tienen sub-equipos y deben ser capaces de manejar esto. Según tengo entendido, generalmente los equipos se dividen como esperaba inicialmente (Full Stack) o dividiendo la pila de tecnología como se muestra a continuación:
Así que estoy interesado en saber qué está haciendo el resto de la industria. ¿La mayoría de las divisiones son verticales / horizontales? ¿Tiene sentido una división diagonal? Si se produjera una división diagonal, ¿me parecen válidas mis preocupaciones y hay algo más por lo que el Equipo B deba preocuparse? Para tener en cuenta, probablemente seré responsable del éxito o el fracaso del equipo B.