Cómo lograr que los compañeros de trabajo apliquen soluciones comunes

Trabajamos en equipos pequeños en algunas aplicaciones que dependen de una API central, que también se desarrolla internamente. El equipo que trabaja en esta API está compuesto en su totalidad por desarrolladores senior.

Con cada lanzamiento de cambios sustanciales, se pide a todos los equipos de aplicaciones que realicen una prueba de regresión completa e informen los problemas (si los hay).

El conocimiento común dicta que esta es la situación final para usar el control de versiones de API; la aplicación especifica en qué versión se basa, y luego se puede actualizar cuando sea necesario. Las actualizaciones de la API no deberían interrumpir las aplicaciones existentes. Esto también haría que los lanzamientos fueran más fáciles y rápidos.

Sin embargo, la idea de la versión de la API se planteó antes con dicho equipo, solo para ser descartada porque 'la versión se convertirá en un desastre'. Y estoy de acuerdo en que el control de versiones de la API no es la solución a todos los problemas, pero creo que podría mejorar sustancialmente nuestro proceso de lanzamiento.

Para mí, esto suena principalmente como una decisión de arquitecto; sin embargo, no tenemos a nadie en el rol de arquitecto. La mayoría de las partes involucradas (PU, QA) tampoco parecen ver realmente los beneficios del control de versiones de la API. Esto es ridículo para mí, ya que es una forma de trabajo estándar de la industria. Me recuerda a las personas que usan Dropbox como VCS.

¿Cuál es la mejor manera de empujar, dentro de mis posibilidades y sin que parezca que estoy tratando de hacer el trabajo del otro equipo?

Aparte de su propia falta de voluntad para adaptar su código para usar la API más actualizada, ¿qué razones genuinas se han dado para que el control de versiones se convierta en "un desastre"? ¿Qué cargo ocupa dentro de los equipos mencionados?
all app teams are asked to do a full regression test¿Tiene evidencia de que la falta de versiones le causa un dolor indebido?
Common knowledge dictates that this is the ultimate situation to use API versioningNo quiero discutir si esto se puede llamar conocimiento común (tengo mis opiniones, pero no es importante). De cualquier manera, usted no persuade a las personas con it's an industry standard way of working, persuade a las personas con lo que su práctica sugerida puede beneficiar en detalle.
Bueno, podría complicarse si tiene varias aplicaciones que están en diferentes versiones y se niegan a actualizar su código para usar la última. Especialmente si el motivo de la nueva versión de la API es una falla de seguridad o un error importante. No tener control de versiones los obliga a usar la API más actualizada y les permite a los desarrolladores concentrarse en un conjunto de código y no preocuparse por las personas que usan versiones anteriores.
Es difícil ver cómo esto puede convertirse en algo más que una discusión sobre los méritos técnicos que dependen de los detalles del contexto que solo conocen el autor de la pregunta y sus compañeros de trabajo.
Cuando escribe sobre "Actualizaciones de la API", se refiere al cambio de una interfaz (Interfaz Java, clase abstracta, firma de método ac o una API REST) ​​o a un cambio de implementación de la misma (como una o varias clases concretas de Java , biblioteca o módulo ac, un servicio) sin cambiar la interfaz?

Respuestas (4)

No es obvio a partir de su descripción que el control de versiones de la API sea necesario o prudente en este escenario en particular. Supongo que la necesidad tampoco está clara para los otros ingenieros de los que está hablando. Y frases como "conocimiento común" y "estándar de la industria" son una especie de código para "otras personas lo hacen, así que nosotros también deberíamos", que es un argumento de autoridad que rara vez es persuasivo por sí mismo cuando necesita convencer a otras personas para que hagan algo. quieres que hagan.

Lo que debe hacer si realmente quiere hacer esto es comenzar por identificar un problema específico que tenga en este momento y luego construir el caso para la versión de la API sobre eso. Un ejemplo:

Pasamos ## horas el mes pasado reescribiendo la aplicación A porque los cambios en la API estropearon todo. Debido a que gastamos ## en eso, no pudimos agregar la función Z para el cliente Y y perdimos $X en ingresos. En lugar de romper nuestra API, si tuviéramos el control de versiones, habríamos dedicado 5 minutos al cambio de API, completado Z y ganado $X + W porque pudimos comenzar con la función V.

Tenga en cuenta que esta justificación no es abstracta en absoluto; depende enteramente de las cosas que son medibles. Todas las cosas medibles son cosas que un gerente no técnico puede entender: dinero, tiempo (que es dinero), características facturables (que podrían convertirse en dinero dependiendo de cuál sea su modelo de negocio).

Como "ingeniero sénior", no quiero mantener varias versiones de API nunca, porque es mucho trabajo con el que no quiero lidiar. Como "el tipo que hace lo que me dice mi jefe", me esforzaré al máximo si mi jefe me dice que necesitamos mantener varias versiones para ahorrar una cantidad de dinero no trivial.

Por los detalles que me diste, es difícil para mí saber si tienes razón o no. Pero intentaré responder a tu pregunta:

¿Cuál es la mejor manera de empujar, dentro de mis posibilidades y sin que parezca que estoy tratando de hacer el trabajo del otro equipo?

Muy poco por lo que parece, ya que decidir sobre las versiones (o la falta de ellas) me parece parte del trabajo del equipo. Pero si todavía quieres intentar persuadirlos, aquí hay algunas sugerencias:

  • No se refiera a "conocimiento común", si fuera conocimiento común, todos ya estarían de acuerdo con usted

  • Prepárate para equivocarte. Hay un equipo de personas mayores que trabajan en el tema a tiempo completo y todos tienen una opinión diferente a la tuya, en realidad es muy probable que estés equivocado.

  • Trate de entender por qué se hizo la elección y qué problemas anticipan las personas mayores.

  • Describa su caso de problema (la razón por la que necesita el control de versiones) lo mejor posible y su tarea para averiguar si hay otras soluciones para su problema.

  • Averiguar que otros equipos se beneficiarían al implementar el control de versiones

Luego reúne toda su investigación en un caso sobre cómo el control de versiones podría beneficiar a la empresa (prepárese para presentar números), cómo se pueden abordar las mayores preocupaciones contra el control de versiones y con qué esfuerzo se puede implementar y mantener.

Si no solo está abierto a que otra persona cambie de opinión, sino que está trabajando activamente para lograrlo y nadie ha cambiado de opinión mientras recopilaba toda la investigación, es muy probable que tenga razón y los demás no podrán estar en desacuerdo :)

Este es uno de esos escenarios de pasar tiempo ahora para ahorrar tiempo más adelante. Las personas que calculan los costos rara vez consideran los ahorros futuros porque esperan que no se materialicen. Por lo general, solo quieren ahorros a corto plazo. Como resultado, se ve obligado a escribir un código incorrecto rápido y corregirlo en cada versión posterior.

Esto conducirá a escenarios bastante divertidos pero frustrantes en los que verá un código como este

var oldDate = api.convertDateTime(input);
//.....some code
var newDate = api.convertDateTime1(input, format);
//.....some code
var finalDate = api.convertDateTime2([oldDate, newDate], format);

Y la razón es simple, nadie quiere mirar hacia atrás y ver dónde se usó api.convertDateTime y corregir cualquier uso, por lo que crean una nueva versión. Pero no hay diferencia en lo que hace, así que obtienes un número. Luego, vuelve a suceder, alguien quiere agregar un formato y es obligatorio, pero no quieren volver atrás y corregir todos los usos anteriores, por lo que crean otra versión nueva. Y finalmente, alguien quiere convertir varias fechas en 1 línea, por lo que crea otra versión nueva y nuevamente no quiere hacer una prueba de regresión de cada uso anterior, así que nuevamente, otra versión nueva.

Y así, nace una mala versión del control de versiones de API.

Entonces, ¿cómo evitar esto? Tienes que convencer a la gente de que dedicar tiempo ahora evitará el lío que acabo de describir. Esto no es algo fácil de hacer y juega mucho en la cultura de la empresa. También es muy importante si su departamento es un centro de costos o un centro de ganancias. A un centro de ganancias a menudo se le permite planificar con anticipación. Suele ser necesario un centro de costos para mantener los costos lo más bajos posible cada año, sin importar cuánta deuda técnica acumule.

Así que tu argumento es simple:

Debe mostrar algunos ejemplos de versiones que salieron mal.

Muestre algunos ejemplos de mejores versiones.

Y, lo que es más importante, grafique el costo de tiempo entre los métodos para que el suyo parezca más económico a largo plazo. Si vienes armado con números, no serás ignorado.

En mi experiencia, generalmente se hace un compromiso, donde se crea una primera versión de la API, y luego se construye un sistema de versiones bajo la idea de que inicialmente habrá demasiadas versiones para realizar un seguimiento, así que espere la API. estabilizarse y madurar antes de preocuparse por las versiones. Luego se dedica tiempo a actualizar todos los usos antiguos de la API para proporcionar una versión una vez que existe, o cualquier uso sin una versión especificada se supone que es la versión 1.

¿Nunca se materializa o es difícil de cuantificar? Tenía uno el otro día, hacer 30 modelos de base de datos. Primero tomó 10 horas. 29 tomó segundos, ¿por qué? Porque pude hacer un proceso futuro para ello. Más de 1000 modelos ahora existen en 2 semanas. Los modelos suelen tardar media hora cada uno manualmente. Entonces, ¿cuál es el ahorro? Y una ventaja es que ahora todos los modelos son consistentes sin importar qué desarrollador los construya. Por lo tanto, los ahorros futuros a menudo se materializan, pero de formas inesperadas o difíciles de calcular. Por eso mi respuesta se centra en calcularlos.
@JoeStrazzere Gotcha, edité mi respuesta para incluir eso

En lugar de preocuparse por una solución particular a su problema (es decir, el control de versiones), concéntrese en los principios de gestión de cambios/tiempo de actividad que necesita que cumpla la API. Es justo decir que los cambios en la API nunca deberían romper ninguna aplicación cliente por sorpresa, que la API debería tener muy poco tiempo de inactividad y que cualquier cambio importante en la API se anuncia con la mayor anticipación posible.

Si puede ponerse de acuerdo sobre estos principios, deje que los desarrolladores de API (o el grupo) decidan cómo alcanzar estos objetivos.