Ha habido muchas preguntas con buenas respuestas sobre el papel de un Arquitecto de software (SA) en StackOverflow y Programmers SE . Estoy tratando de hacer una pregunta un poco más centrada que esas. La definición misma de una SA es amplia, por lo que, en aras de esta pregunta, definamos una SA de la siguiente manera:
Un arquitecto de software guía el diseño general de un proyecto, se involucra en los esfuerzos de codificación, realiza revisiones de código y selecciona las tecnologías que se utilizarán.
En otras palabras, no estoy hablando del descanso gerencial y del chaleco en la cresta (se eludieron otras palabras que riman) tipos de SA. Si tuviera que buscar cualquier tipo de posición SA, no quiero estar lejos de la codificación. Podría sacrificar algo de tiempo para interactuar con clientes y analistas de negocios, etc., pero todavía estoy técnicamente involucrado y no solo soy consciente de lo que sucede a través de las reuniones.
Con estos puntos en mente, ¿qué debe aportar una SA a la mesa? ¿Deben entrar con la mentalidad de "establecer la ley" (por así decirlo) y hacer cumplir el uso de ciertas herramientas para "adaptarse a su manera", es decir, pautas de codificación, control de fuente, patrones, documentación UML, etc. ¿O deberían especificar la dirección inicial y la estrategia para luego relajarse y saltar según sea necesario para corregir la dirección de la nave?
Dependiendo de la organización, esto podría no funcionar. Una SA que confía en TFS para hacer cumplir todo puede tener dificultades para implementar su plan en un empleador que solo usa StarTeam. Del mismo modo, una SA debe ser flexible según la etapa del proyecto. Si es un proyecto nuevo, tienen más opciones, mientras que podrían tener menos para los proyectos existentes.
Aquí hay algunas historias de SA que he experimentado como una forma de compartir algunos antecedentes con la esperanza de que las respuestas a mis preguntas también puedan arrojar algo de luz sobre estos temas:
He trabajado con una SA que revisó el código literalmente de cada línea de código del equipo. La SA haría esto no solo para nuestro proyecto, sino también para otros proyectos de la organización (imagine el tiempo dedicado a esto). Al principio fue útil hacer cumplir ciertos estándares, pero luego se volvió paralizante. FxCop fue cómo la SA encontraría problemas. No me malinterpreten, fue una buena manera de enseñar a los desarrolladores junior y obligarlos a pensar en las consecuencias de su enfoque elegido, pero para los desarrolladores senior se consideró algo draconiano.
Una SA en particular estaba en contra del uso de cierta biblioteca, alegando que era lenta. Esto nos obligó a escribir toneladas de código para lograr cosas diferentes, mientras que la otra biblioteca nos habría ahorrado mucho tiempo. Avancemos rápidamente al último mes del proyecto y los clientes se quejaban del rendimiento. La única solución era cambiar cierta funcionalidad para usar el enfoque originalmente ignorado a pesar de las advertencias tempranas de los desarrolladores. En ese momento, se arrojó una gran cantidad de código que no era reutilizable, lo que generaba horas extra y estrés. Lamentablemente, las estimaciones utilizadas para el proyecto se basaron en el antiguo enfoque que mi proyecto tenía prohibido usar, por lo que no era un indicador apropiado para la estimación. Oiría al primer ministro decir "ya hemos hecho esto antes"
La SA que aplicaría el uso de DTO, DO, BO, capas de servicio, etc. para todos los proyectos. Los nuevos desarrolladores tuvieron que aprender esta arquitectura y las directrices de uso impuestas firmemente por la SA. Se hicieron excepciones a las pautas de uso cuando era absolutamente difícil seguir las pautas. La SA se basó en su enfoque. Las clases para DTO y todas las operaciones CRUD se generaron a través de CodeSmith y los esquemas de bases de datos fueron otra bola de cera similar. Sin embargo, después de haber utilizado esta configuración en todas partes, la SA no estaba abierta a nuevas tecnologías como LINQ to SQL o Entity Framework.
No estoy usando esta publicación como plataforma para ventilar. Hubo aspectos positivos y negativos en mis experiencias con las historias de SA mencionadas anteriormente. Mis preguntas se reducen a:
- ¿Qué debe aportar una SA a la mesa?
- ¿Cómo pueden lograr un equilibrio en su toma de decisiones?
- ¿Se debe abordar un trabajo de SA (como se definió anteriormente) con la mentalidad de que deben aplicar ciertas reglas básicas?
- ¿Algo más a tener en cuenta?
¡Gracias! Estoy seguro de que estas tareas de trabajo se extienden fácilmente a personas que son desarrolladores senior o líderes técnicos, así que siéntase libre de responder a esa capacidad también.