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.
fuente
Respuestas:
Un arquitecto de sistemas debe:
Las SA deben saber cómo codificar y deben participar en algunos de los trabajos de codificación, mojarse las manos, por así decirlo. Esto los mantiene en contacto con la gestalt del esfuerzo de desarrollo. Como dijo una vez el tío Bob Martin , el arquitecto debe hacer parte de la codificación él mismo, para que pueda ver el dolor que está infligiendo a otros con sus diseños.
La SA debe tener la última palabra en todas las decisiones de diseño, tecnología y estilo de codificación. Pero, como todos los gerentes, el trabajo de las SA es despejar el camino para su gente para que puedan ser productivos. Eso significa, en su mayor parte, que los desarrolladores pueden decidir, a su nivel, cómo se resolverán los problemas. Significa que la SA mantiene a los jefes de pelo puntiagudo fuera de los cubículos de los desarrolladores. Y significa que la SA colabora, según sea necesario.
Como todos los seres humanos, los SA pueden cometer errores y cometen errores. Los buenos aprenden de esos errores y se convierten en mejores SA.
fuente
Nunca me he encontrado con un arquitecto que fuera útil, principalmente porque no eran prácticos.
Para mí, los problemas más importantes que he visto son:
rewrite from scratch
mentalidadLos mejores "Arquitectos" con los que he trabajado trajeron a la mesa:
El problema para mí es que los mejores "Arquitectos" con los que he trabajado no tenían "Arquitecto en su título. Con frecuencia eran ingenieros de software que se basaban en el problema y los proyectos específicos. Entendieron que en la mayoría de las empresas no es así". Es práctico reescribir una base de código funcional desde cero. Toman una decisión de diseño o brindan opciones y sus razones o justificaciones. Trazan cómo iterar la base de código a una nueva arquitectura a lo largo del tiempo y aún mantienen todo funcional. Dan recomendaciones conservadoras en lugar de recomendar lo que sea de viaje o familiar. Comunicarían una visión coherente de cómo deberían funcionar las cosas y por qué, PERO lo más importante es que trazarían cómo llegar allí y el costo.
fuente
1 ¿Qué debe aportar una SA a la mesa?
2 ¿Cómo pueden lograr un equilibrio en su toma de decisiones?
3 ¿Se debe abordar un trabajo de SA (como se definió anteriormente) con la mentalidad de que deben aplicar ciertas reglas básicas?
Hay muchas más, creo que habrá algunas respuestas realmente buenas para esta.
fuente
1. ¿Qué debe traer una SA a la mesa?
"¿Deberían entrar con la mentalidad de 'establecer la ley' ... O deberían especificar la dirección inicial y la estrategia y luego recostarse y saltar según sea necesario para corregir la dirección de la nave?"
Una combinación de ambos, diría. Al decidir sobre tecnologías y procesos, estar abierto a opiniones y sugerencias puede brindar valiosos comentarios / aportaciones sobre las decisiones y hacer que aprenda de los demás. Su equipo es (con suerte) inteligente; aprovecha eso. Pero una vez que se toma una decisión (su decisión), se establece la ley. Identifique a aquellos que se quejarán de lo que no fue su elección, y aquellos que simplemente elegirán cualquier cosa y no les importará, y luego ignórenlos.
En cuanto a las tecnologías: trabaje con lo que tiene, si la compañía usa StarTeam, entonces eso es lo que usted usa. Casarse con un producto / tecnología / proceso en particular no va a hacer nada por usted.
2. ¿Cómo pueden lograr un equilibrio en su toma de decisiones?
Es importante escuchar al equipo y saber cuándo están en lo correcto y lo incorrecto, y tener los cojones para decirles que están equivocados y cumplir con su decisión. No escuchar traerá una falta de respeto, así como fracasar en sus decisiones.
3. ¿Se debe abordar un trabajo de SA (como se definió anteriormente) con la mentalidad de que deben aplicar ciertas reglas básicas?
Siempre. Si no, los presos terminarán dirigiendo el asilo, abierta o encubiertamente. Sin embargo, decidir sobre esas reglas básicas puede ser a través de una conversación con el equipo. Recuerde que cualquier equipo no siempre tiene los mismos miembros que tiene ahora, por lo que hacer concesiones para un pequeño grupo de ellos puede obstaculizar el equipo en el futuro una vez que se hayan ido. Eso incluye a las SA.
4. ¿Hay algo más que considerar?
fuente