¿Debería haber un rol formal (interno o externo) asignado a los entornos de desarrollo para controlar la complejidad derrochadora?

8

Hace unos años, trabajé para una pequeña empresa que llegó tan lejos al desarrollo de marcos internos que dedicaron a su desarrollador más experimentado y a su arquitecto a desarrollar un marco MVC personalizado y ORM desde cero. Estas dos cosas eran ortogonales a su producto principal. Desafortunadamente, el soporte para este enfoque basado en el marco provino de la parte superior y retrasó la entrega del software generador de ingresos, y los marcos producidos fueron notablemente inferiores a las alternativas estándar, lo que agravó los retrasos. La compañía se quemó rápidamente en efectivo y, finalmente, todos fueron despedidos.

Un empleador posterior cometió un error similar: obtuvieron un desarrollador altamente calificado técnicamente, un perfeccionista, con una sólida base en los patrones de diseño de la empresa para diseñar excesivamente una solución de consultoría para uno de sus clientes, a sabiendas tomando una pérdida, con la esperanza de que La solución podría adaptarse y extenderse a otros clientes. El proyecto se excedió significativamente. Pero ningún otro cliente potencial mordió. Un error estratégico chapado en oro que cuesta una pequeña fortuna.

En ambos casos hubo un grado significativo de ingeniería excesiva. En ambos casos, la empresa y la dirección del proyecto eran personas con antecedentes de dominio o análisis, en lugar de tener experiencia en programación. En ambos casos, los arquitectos de software crearon soluciones demasiado complejas para rascarse la picazón y mejorar sus currículums, con cierta complicidad de la gestión no técnica. En ambos casos, los arquitectos no tenían interés en mantener bajos los costos (aparte del riesgo de perder sus trabajos si las empresas se declaraban en quiebra, lo cual no era un gran riesgo, considerando su alta empleabilidad).

Mi experiencia sugiere que no es una trampa poco común para que caigan las tiendas de desarrollo.

¿Hay lugar en los proyectos de software para un rol técnico interno o externo formal de confrontación (un "Surveyor de cantidad") para usar una analogía de construcción que puede llamar o evitar el exceso de ingeniería innecesaria? ¿Quién es el más adecuado para desempeñar este papel?

usuario104662
fuente
3
No estoy seguro de que pueda justificar un puesto para alguien que podría ser reemplazado por un trozo de papel con "YAGNI" impreso en él. ;)
vaughandroid
2
En un borrador, describí el papel como "ejecutor de YAGNI". Desafortunadamente, el conocimiento de YAGNI no significa que se observará, especialmente en entornos no ágiles.
user104662
3
"un perfeccionista, con una sólida base en los patrones de diseño empresarial para excesivamente ingeniero"! = "gran desarrollador"
Evicatos
1
Parece que un inversionista o accionista significativo con algunas células cerebrales sería un buen candidato para esto. alguien centrado en el dinero, gastando el dinero, qué tan pronto vamos a recuperar el dinero. No es que los inversores no sean inteligentes, creo que a veces tampoco les importa porque no suele ser su dinero.
Andyz Smith
2
Parece que los desarrolladores más importantes (y el arquitecto, si tiene uno) que supervisan los proyectos deberían ser los mismos que supervisan este tipo de cosas. También suena como la falta de un gerente de proyecto real en ambos casos para motivar (molestar) a los desarrolladores a cumplir.
Aparejo

Respuestas:

6

"Controlar la complejidad" es el trabajo de:

  1. El arquitecto, cuyo trabajo es garantizar que el sistema y la arquitectura empresarial sean adecuados para los proyectos / productos actuales ;

  2. El desarrollador, cuyo trabajo es crear diseños y códigos que no solo sean correctos sino también mantenibles , y también revisar el código de otros desarrolladores para asegurarse de que puedan entenderlo; y

  3. El analista de negocios / sistemas o el propietario del producto, cuyo trabajo es resolver lo que el negocio realmente necesita en este momento , lo que se puede terminar más tarde o lo que nunca podría materializarse.

"Complejidad" es un concepto abstracto de todos modos, y bien podría argumentarse que "reducir la complejidad" es el propósito mismo del software en primer lugar, por lo que no tiene sentido sugerir un rol dedicado a eso, eso es todo. equipo ya debería estar haciendo!

Suponiendo que una mirada superficial al ROI y al TCO demuestre que la (s) solución (es) está (s) realmente (s) y / o (s) realmente ingenierizadas, lamento decir que los arquitectos, desarrolladores y analistas que estaban trabajando en ello simplemente no estaban Muy buenos en sus trabajos. Y las personas a cargo de ese aspecto son los gerentes o ejecutivos que los contrataron; posiblemente han cultivado una cultura de sobre ingeniería y están parcialmente en falta, o posiblemente solo han recibido malos consejos del equipo de implementación.

No me aventuraré a adivinar cuál ya que (probablemente) no he trabajado para su empresa, pero estoy seguro de que puede resolverlo usted mismo con bastante facilidad simplemente teniendo una conversación individual con uno o algunos de dichos gerentes.


Por cierto, el desarrollo de marcos internos no siempre es algo malo. Es solo que esos marcos generalmente deberían basarse en la observación y el refinamiento del proceso actual. Los marcos o bibliotecas que surgen al refactorizar el código existente tienden a durar mucho tiempo. Por otro lado, si las personas simplemente se sumergen y comienzan a desarrollar un marco sin contexto, entonces generalmente se convierte en una responsabilidad y rápidamente.

Las personas deben ser capaces de reconocer la diferencia entre las convenciones (la mayoría de los proyectos en una organización usarán la misma pila de tecnología, con una cierta cantidad de código repetitivo, pero eso no significa que juntar todo en un "marco" es una buena opción). idea) frente a la duplicación (las personas están literalmente resolviendo los mismos problemas comerciales o técnicos una y otra vez y las inconsistencias conducen a diseños intrincados y defectos graves). Las empresas de software pueden y deben reconocer este último escenario y activamente tomar medidas para, bueno, reducir la complejidad. Marcos no reducen la complejidad, siempre y cuando no están sucumbiendo al efecto del centro de la plataforma .

Aaronaught
fuente
Buena respuesta. Me gustaría agregar el punto 4: necesitará una administración que permita a los otros roles (1-3) pagar la deuda técnica. Esto acelerará el desarrollo en las versiones actuales porque 1-3 saben que pueden refactorizar más tarde según sea necesario. Si la administración siempre utiliza todos los recursos disponibles para nuevas características, los arquitectos y desarrolladores se ven obligados a inventar marcos flexibles que intenten resolver todos los posibles problemas futuros. Eso es casi imposible y crea los problemas descritos por el autor original.
Andreas Huppert el
1
@AndreasHuppert: Ciertamente estoy de acuerdo en que la gerencia necesita comprender la idea de refactorizar y que los equipos no pueden tener el 100% de su tiempo comprometido con nuevas características; para equipos bien administrados, esa cifra debería ser más del 20% o incluso menor, el resto lo ocupa la planificación, las pruebas, las revisiones de código, la automatización, la refactorización, la depuración, etc., y, por supuesto, los gastos generales e interrupciones habituales. Pero no estoy seguro si estoy de acuerdo en que la falta de tiempo es lo que conduce a estas horribles plataformas internas. Si un equipo ni siquiera tiene tiempo para refactorizar, ¿dónde podría encontrar el tiempo para esos ?
Aaronaught
1
Porque es posible vender la inversión en una plataforma / marco como inversión con un buen ROI para la administración. La refactorización tiene mucho menos glamour y es difícil de vender.
Andreas Huppert el
5

¿Hay lugar en los proyectos de software para un rol técnico interno o externo formal de confrontación (un "Surveyor de cantidad") para usar una analogía de construcción que puede llamar o evitar el exceso de ingeniería innecesaria? ¿Quién es el más adecuado para desempeñar este papel?

No, generalmente no existe tal posición.

El truco es contratar a las personas adecuadas para el trabajo. Las personas que no van a realizar un exceso de ingeniería y hacen exactamente lo que se necesita.

Esto puede hacerse mediante el uso de enfoques ágiles (como la implementación de requisitos en iteraciones, o usando TDD o BDD). Pero de nuevo, si la arquitectura está sobre diseñada, no va a ayudar.

BЈовић
fuente