Estoy en un equipo con un desarrollador senior que ha estado en la empresa durante mucho tiempo (quizás 15 años) y trabaja exclusivamente en la arquitectura de back-end de nuestro producto de 25 años. Recientemente, como parte de un esfuerzo de modernización, nuestro equipo se encargó de actualizar el producto para que las aplicaciones web puedan comunicarse con el producto mediante JSON. Para resolver este problema, este desarrollador creó una capa de traducción personalizada que transformó los mensajes de los clientes web a través de HTTP (JSON) en mensajes que el producto puede hablar y viceversa.
Al principio, esta capa era bastante simple: simplemente traducía los mensajes entre los clientes web y el producto. Sin embargo, con el tiempo, esta capa se ha vuelto cada vez más compleja; esta capa ahora puede transformar mensajes, ejecutar validación de mensajes, realizar consultas de bases de datos, realizar solicitudes de red a sistemas de terceros, recorrer datos, ejecutar condicionales complejos y más. Ha crecido hasta el punto de que creo que es correcto llamarlo un lenguaje de programación completo.
Somos el punto donde toda la nueva lógica empresarial se escribe en esta capa de traducción. Siento que esta es una Mala Idea™ por varias razones:
Quizás la parte más irritante es que también tenemos un servidor Node frente a esta capa de traducción. Sin embargo, este desarrollador (y nuestro arquitecto, que está un poco desconectado de nuestro equipo) desaconseja escribir lógica empresarial en esta capa principalmente por coherencia: no le gusta la idea de tener lógica empresarial en dos lugares.
¿Cómo puedo convencer a este desarrollador (y al resto de mi equipo, que son bastante pasivos con este tipo de problemas) de que es una mala idea? ¿Cómo combato el argumento inevitable de que escribir la lógica de negocios en Node sería inconsistente con los patrones que ya hemos establecido?
¿O es posible que esté siendo arrogante al suponer que el enfoque de este desarrollador es incorrecto? Tiene más años de experiencia en desarrollo en su haber y mucho conocimiento institucional.
Algunos antecedentes: tengo alrededor de 5 años de experiencia, 2 de los cuales han sido en esta empresa. Me inclino más hacia el desarrollo front-end si tengo la opción. La capa de traducción mencionada anteriormente se ha desarrollado durante aproximadamente 2 años, pero aún no se ha implementado en producción. Consulte los comentarios para conocer algunos detalles técnicos adicionales sobre esta capa de traducción.
Vamos a darle a su pregunta un poco de contexto.
Su empresa tiene:
Lista no exhaustiva de requisitos de la capa de traducción:
Por lo tanto, esta capa de traducción se puede llamar en su lugar middleware de integración . Maneja la lógica comercial no relacionada con el producto subyacente de 25 años, con (espero) diferentes flujos y paradigmas.
Hay varios aspectos que yo llamaría Bad Ideas™, pero la existencia de un middleware de integración no es uno de ellos. Lo peor, en mi humilde opinión, es la falta de documentación : puede originarse en el hecho de que solo tiene un desarrollador con suficiente experiencia para visualizar todo el proceso. Debe documentar el proceso para que, si lo atropella un autobús, el desarrollo no se detenga en seco. También disminuirá la necesidad del equipo de desarrollo de tareas de soporte de API.
Acerca del servidor Node: me veo obligado a estar de acuerdo, al menos inicialmente, con su arquitecto. Dividir la lógica de negocios en diferentes plataformas/lenguajes sin una fuerte razón arquitectónica puede llamarse Bad Idea™. Dos bases de código para mantener, dos conjuntos de requisitos para nuevos puestos de trabajo. Es posible que se hayan aplicado aquí los principios de KISS para reducir costos.
No digo que no se deba tomar esta decisión, pero se deben tener en cuenta todos los costos (reentrenamiento, mapeo de procesos, validación de flujo, etc.), y su arquitecto probablemente los conozca. El lenguaje utilizado para codificar el producto heredado puede suspenderse, por ejemplo, forzando una migración completa a una plataforma diferente, y se podría elegir una implementación completa de NodeJS como Plan A.
Aún así, creo que el deseo de mejorar la situación actual es admirable y valioso, y en lugar de pelear una batalla cuesta arriba, sugeriría un plan diferente.
El hecho de que el desarrollador senior esté liderando el esfuerzo de middleware sugiere que no es adverso al cambio y que es un profesional capaz. Comparta su punto de vista con él y escuche sus comentarios. Él puede apreciar el hecho, ofrecer su propio punto de vista (lo que le ayudará a comprender la lógica del estado actual) y considerar su deseo de modernizar la solución teniendo en cuenta todo el conocimiento institucional, y llegar a la conclusión de que la idea no es sin mérito. La empresa confía en sus capacidades, y una sugerencia de modernización de su parte puede tener un peso considerable.
Divulgación completa: he sido el tipo senior del que te quejas, en el pasado. He sido, no por elección sino por necesidad, el principal arquitecto y desarrollador de un marco sorprendentemente similar al que estás describiendo.
Déjame decirte que estuve al tanto de todos los problemas técnicos y organizativos durante todo el tiempo . Fue un proceso incremental; nunca hubo ese único punto en el tiempo en el que uno podría haber tomado una sola decisión para detener esto. Casi todos los pasos parecían ser una buena idea en ese momento.
Hay un modo de pensar y algunos otros aspectos (p. ej., la presión del tiempo, la presión percibida , la cultura del equipo, etc.) que llevan a soluciones como esta. No te dice nada sobre la inteligencia, el carácter o cualquier agenda oculta de tu desarrollador.
Acabé con el lío con estas medidas, que literalmente tomaron años:
Fue un viaje divertido y, en retrospectiva, muy exitoso. El equipo ahora está en camino de dejar atrás esa era. Pero el enfoque tampoco era trivial. Tal vez te dé algunas ideas, y me atrevo a decir que necesitarás el apoyo incondicional de tu desarrollador sénior o lo quitarás de esa posición (de cualquier manera que esté disponible para ti). Siéntese y tenga una larga conversación con él, si está en posición de hacerlo, el tipo de conversación "dónde queremos estar en 5 años"...
Una nota, que no se puede enfatizar lo suficiente: el sistema existente puede ser excelente (en realidad, probablemente lo fue, para poder sobrevivir tanto tiempo), pero habrá problemas organizativos en torno al enfoque. Hay un gran problema con la documentación, la distribución general de conocimientos, el factor camión y tener una fase de aprendizaje muy larga para los nuevos colegas. Además, muchos, especialmente los desarrolladores más jóvenes, no tienen mucho interés en invertir mucho aprendizaje en un contexto de aplicación muy específico que no les ayudará en absoluto con proyectos futuros. Razones como esta fueron (en mi caso) las que llevaron al cambio descrito, y hablar abiertamente sobre ellas quita el aguijón personal del problema.
Lectura adicional: según los comentarios, parece que no soy yo quien inventó este proceso. :-) Consulte el patrón StranglerApplication para obtener más información sobre el tema.
An alternative route is to gradually create a new system around the edges of the old, letting it grow slowly over several years until the old system is strangled. Doing this sounds hard, but increasingly I think it's one of those things that isn't tried enough.
=> perfecto.Parece que ese desarrollador acaparó un mercado. Buena herramienta de negociación para las negociaciones salariales de revisión de fin de año.
En mi humilde opinión, la lógica comercial no pertenece al traductor. Puede sugerir una división de ese traductor en capas, separando una lógica comercial de los métodos de traducción simples.
Prepárate para que ese desarrollador esté en contra;)
Además, la gerencia puede ponerse del lado de él, indicando el esfuerzo/costo adicional que supondría.
Puede ser una batalla larga, y al final podrías ser tú quien haga la separación ;)
¿Cómo puedo convencer a este desarrollador (y al resto de mi equipo, que son bastante pasivos con este tipo de problemas) de que es una mala idea?
No es su tarea "convencer" al desarrollador.
Básicamente, la pregunta principal aquí es sobre su posición:
Cuando se trabaja para una empresa, es importante desarrollar también la capacidad de despegarse y no preocuparse. ¡En un sentido positivo! Si está tratando de cambiar algo que nadie más quiere cambiar, terminará odiado por los colegas y la gerencia.
Así que concéntrate en cuál es tu tarea. Señale e informe, pero deje que las tomen las personas que de hecho son responsables de tomar decisiones. No importa si tienes razón, conozco a muchas personas, incluido yo mismo, que terminaron despedidas a pesar de tener razón, o por tener razón.
Wow, al leer originalmente la publicación, la solución técnica sonaba como una capa de traducción que realizaba tareas no relacionadas innecesariamente. Sonaba muy contrario al "principio de responsabilidad única" / filosofía UNIX, no muy cohesivo o bien estructurado.
Creo que el detalle clave que me perdí fue que se trata de un sistema back-end arcaico que ejecuta la lógica comercial central, y creo que está implícito que el negocio está atascado por alguna razón comprensible. Gracias a los comentarios y votos negativos por empujarme a reconocer eso.
Dado que es antiguo, la empresa probablemente no quiera tocarlo. O bien, es posible que la lógica comercial implementada en la capa de traducción no tenga ninguna relación con el propósito de este back-end central.
La decisión de escribir una capa de traducción suena razonable ahora que siento que tengo una imagen más precisa de la realidad en mi cabeza.
Lo que está describiendo no suena tanto como un nuevo lenguaje de programación como quizás un nuevo marco, escrito específicamente para este caso de uso. Suena como ingeniería bastante estándar en lo que ahora entiendo que es el escenario.
Debe familiarizarse con el código, y usted y sus compañeros necesitan capacitación y documentación para comprender el sistema. Sería eficiente escribir documentación sobre las cosas a medida que las aprende.
Robar
glen pierce
erik
wesley largo
Walfrat
joe stevens
paparazzi
autofago
usuario34687
chrylis -cautelosamente optimista-
Rooby
Nadie
Tirar a la basura
Tirar a la basura