Combatir (percibir) la sobreingeniería frente a seguir la corriente [cerrado]

8

Me uní a un equipo que tiene un enfoque de diseño diferente al mío. Creo en el enfoque de diseño de YAGNI. Por ejemplo, si un método (interfaz, clase) no se utiliza, debe eliminarse. Eso es.

La gente de mi equipo está creando una aplicación modular, y uno de los módulos se percibe como "marco". La aplicación es el único usuario de este marco, y en este momento no hay planes para que tenga más clientes. Sin embargo, algunas partes del código en este marco se escriben y se mantienen como si pudieran usarse más tarde , y la coherencia y la integridad prevalecen sobre YAGNI. Hay abstracciones en lugares que tal vez nunca necesiten abstracciones, etc.

Traté de discutir algunas cosas, pero cada punto lleva mucho tiempo persuadir, si es que lo hace, y me temo que demasiado "empuje" resultará en que el equipo se separe en lados opuestos.

Puedo "seguir la corriente" y escribir código extra sin ningún problema personal. Ahora me llevará más tiempo codificar y, lo más probable, más tiempo para mantener, sin embargo , cada discusión para no hacer algo extra también lleva tiempo y agrega presión.

La pregunta es, en el caso de diferentes opiniones, ¿qué hará un mal servicio más grande, un código innecesario pero "adecuado", o argumentos constantes y dinámicas de equipo rotas?

encubrimiento
fuente
1
Siento tu dolor. ¿Has considerado incluir en tu equipo los pros y los contras de cada decisión? ¿Qué sucede si traduce el esfuerzo (horas-hombre) en cifras monetarias y pregunta a los gerentes si están felices de pagarlo o cómo se justifica ese dinero? ¿Es este un entorno ágil en el que estás trabajando? ¡Todo lo mejor!
Lucas T
@LucasT Trabajo en ambiente de vaquero. Las horas de trabajo son un tema difícil, porque, por la misma lógica, uno puede preguntarle a la gerencia si debemos omitir las pruebas, escribir un código que no se pueda mantener y renunciar a todas las buenas prácticas, ya que será el mismo momento en este mismo momento. Depende de nosotros como desarrolladores establecer las compensaciones (y defenderlas).
coverback
2
'framework' me hizo estremecer, solo asegúrate de que no estás construyendo algo que sufrirá el efecto de plataforma interna. Además, crear abstracciones antes de que tenga casos de uso genuinos corre el riesgo de perder mucho tiempo en preconcepciones erróneas y refactorización de códigos. Para responder a su pregunta: es difícil / imposible saber el saldo correcto antes de tiempo, solo asegúrese de poder expresar sus inquietudes, de que tiene una forma de medir si el saldo funciona y de que las personas están abiertas a cambiar si el saldo no es no es cierto
GoatInTheMachine
Suena como algo que Martin Fowler discutió en 2003: FoundationFramework vs HarvestFramework . La lucha eterna entre los enfoques iniciales versus los ad-hoc.
rwong

Respuestas:

4

Mantener un marco imaginario es una decisión arquitectónicamente significativa, por lo que la pregunta se reduce a "cómo surgimos y evolucionamos la arquitectura" en el equipo. Debe comenzar con reglas bien definidas para la toma de decisiones que sean claras y aceptadas por todos en el equipo porque no hay juego sin las reglas .

Al unirse a la empresa, una de las preguntas más importantes que puede hacer es:

¿Cómo funciona el proceso de toma de decisiones en el equipo y cómo evoluciona con el tiempo?

Ningún proceso de toma de decisiones es peor que un mal proceso de toma de decisiones. Si no hay un proceso, alguien necesita definir uno. De lo contrario, la cantidad de tonterías crece junto con la cantidad de desacuerdos dentro del equipo.

Creo que con esto estamos cerrando el ciclo: o tiene la autoridad y el poder para definir el proceso de toma de decisiones cuando falta o está de acuerdo con el proceso actual y cómo evoluciona. Elige uno.

Eduards Sizovs
fuente
1

Los argumentos constantes y la dinámica de equipo rota nunca te llevarán muy lejos.

Intentaría comprender por qué hay un marco en primer lugar.

Lo más probable es que se deba usar en otros sistemas más adelante. Si ese es el caso, entonces tiene sentido hacer más de lo necesario en este momento.

La razón de esto es que si una aplicación está en producción, una nueva aplicación está en marcha y requiere actualizaciones del marco, cada vez que se cambia algo en el marco, tal vez se agreguen abstracciones que no se necesitaban antes, entonces la aplicación original debe actualizarse y probado también.

Esa es una gran cantidad de refactorización y reevaluación de algo en producción.

Si elige no incluir el marco actualizado en la aplicación anterior, entonces tiene 2 marcos para mantener uno de los cuales ya está obsoleto.

Mantener código obsoleto tampoco es muy bueno para la moral.

Doblado
fuente
"Si ese es el caso, entonces tiene sentido hacer más de lo necesario en este momento". Solo si el código está mal escrito, carece de pruebas unitarias y es difícil de refactorizar más tarde.
David Arno
1

Si eres nuevo en un equipo, tratar de no ser un disturbio en la fuerza debería ser tu primera preocupación.

Supongo que no está en una posición de líder / arquitecto, y las decisiones no dependen de usted.

La segunda preocupación es aprender . Aprender mucho. Aprenda por qué tomaron las decisiones que tomaron, por qué se creó el marco, cuál es la razón detrás de eso. Cuando tenga toda la información, puede tomar una decisión informada sobre cómo abordar los posibles problemas, como la ingeniería excesiva y la mala comunicación.

Haga preguntas de manera educada . Ponte en la posición de estudiante y no de maestro. A la gente le resultará más fácil "enseñarle" por qué hicieron las cosas de esa manera.

Ahora eres el paria. Te unes a un equipo extranjero y debes aprender sus costumbres y adaptarte.

Si haces tu trabajo de la manera correcta, con un enfoque cortés hacia las personas, las personas naturalmente te escucharán con el tiempo. Y luego, si tiene toda la razón de que su enfoque es el mejor en su conjunto, puede influir en las personas para que cambien.

Casi no conozco a nadie a quien le guste trabajar con una persona que a menudo critica, pero que no genera valor. Sea una referencia para su equipo, alguien con quien estén orgullosos de trabajar.

Además, lectura recomendada: https://www.amazon.com/How-Win-Friends-Influence-People/dp/0671027034

Machado
fuente
0

Hay 2 cosas fundamentales que creo que está sucediendo. El primero es cultural. Eres nuevo en el equipo y aún no has descubierto cómo trabajar con este equipo. Probablemente tienen diferentes políticas y prácticas que realmente pueden funcionar para ellos. Además, uno o más de ellos pueden haber solicitado su puesto, por lo que pueden estar saboteando activamente sus esfuerzos o simplemente no decirle lo que necesita saber.

La segunda es que posiblemente hayas leído mal el diseño. La parte que cree que es un código muerto en realidad puede ser una generalización de otras partes del diseño o puede estar trabajando para respaldar algo que la empresa finalmente quiere respaldar. En realidad, puede ser un código muerto. Deja de obsesionarte y comprende por qué está ahí. En realidad, puede llevar meses descubrirlo.

En las industrias adversas al riesgo (es decir, bancario, medial ...) donde existe la ligera posibilidad de que se pueda utilizar un fragmento de código, ese fragmento de código permanecerá durante décadas.

Para resaltar esto, una de las estructuras de bases de datos más extrañas que he visto se centraba en 6 tablas. 3 de ellas eran tablas de mapeo que conectaban las otras tres. No tenía ningún sentido ya que el código indicaba que solo uno de ellos se estaba utilizando como una relación de muchos a muchos y los otros 2 estaban implementando uno a muchos. Los diseñadores originales de esto se habían ido y nadie podía explicar exactamente cómo o por qué funcionaba. Finalmente, me encontré con un documento comercial que explicaba el diseño, así que supongo que la empresa lo había pedido y algunos DBA simplemente lo implementaron de una manera que la empresa podía entender, a pesar de sus limitaciones obvias. 30 años después todavía está allí, ganando dinero para la compañía, pero desde un punto de vista de desarrollo difícil de entender, mantener y desarrollar.

Robert Baron
fuente
1
No, sin usar no se usa y no hay planes de negocios para nada en el futuro aparte de lo que hay allí. Entiendo que podría haber necesidades especiales, pero no en este caso, 100%. Pero entiendo tu punto de "aprender más primero".
coverback
-1

Veo algunos puntos buenos acerca de tener una parte de la aplicación, incluso si nadie más la usa.

Esto puede forzar el desarrollo de funcionalidades técnicas en el marco con sus pruebas adecuadas fuera del contexto funcional de la aplicación (y en su propia hoja de ruta).

Además, es posible que no desee que todos los desarrolladores toquen ese marco, sino solo los más avanzados, por lo que volver a colocarlo fuera de la aplicación es una ventaja.

Para las capas de abstracción no necesarias, bueno, si ya están allí, no cambie algo que ya está funcionando.

Sin embargo, quizás recuerde a su equipo en el futuro que el objetivo del marco es aligerar su trabajo, no acentuarlo.

Walfrat
fuente
Me gusta el punto de "el objetivo del marco es aligerar su trabajo, no aligerarlo". ¡mucho! Muchos lo tienen como "el mal necesario de la (posible) reutilización".
coverback
-3

Leyendo entre líneas, me inclino hacia los miembros de su co-equipo. Hacer algo "más complicado de lo necesario" no solo allana el camino para una posible funcionalidad futura que tal vez nunca sea necesaria, sino que también sirve para que el desarrollador comprenda la aplicación, incorpora un modelo en el software, documenta una idea.

Y al hacerlo, restringe la forma en que pueden desarrollarse los desarrollos futuros. Mantiene a los desarrolladores que no comprenden completamente el diseño / intención de desviarse.

Al principio, un nuevo desarrollador puede estar molesto por el diseño "innecesariamente complicado", pero también lo guía en la dirección correcta, lo hace caer en el pozo del éxito y le dificulta "hacer las cosas a su manera". sería otra forma que realmente complicaría las cosas porque conduciría a diferentes enfoques en la misma aplicación, lo que hace que sea aún más difícil para el próximo tipo entenderlo.

YAGNI no significa (o no debería) "puede omitir el diseño" o "hacerlo rápido y sucio". Si su equipo tiene el lujo de pensar las cosas, diría que es algo para apreciar en lugar de luchar.

Martin Maat
fuente
1
Exactamente. Restringe el desarrollo futuro, sin saber cuáles son los desarrollos futuros. Sin planes de negocios conocidos, nunca sabrá qué abstracción será útil y cuáles perjudicial. Y desafortunadamente, el equipo está bajo el estrés de un desarrollo lento y entregas perdidas.
coverback
@coverback: todas las opciones de diseño limitan el desarrollo futuro. Si se eliminara todo el código muerto, ¿este equipo haría sus objetivos de entrega? ¿O hay algo más mal en su proceso, o los objetivos en sí mismos son demasiado agresivos?
Robert Baron