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?
fuente
Respuestas:
"Controlar la complejidad" es el trabajo de:
El arquitecto, cuyo trabajo es garantizar que el sistema y la arquitectura empresarial sean adecuados para los proyectos / productos actuales ;
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
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 .
fuente
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.
fuente