¿Qué debe traer a la mesa como arquitecto de software? [cerrado]

20

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:

  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?
  4. ¿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.

Ahmad Mageed
fuente
Si la SA estaba usando FXCop, ¿por qué sería tan paralizante? No debería tomar más de unos minutos revisar incluso las aplicaciones más grandes con FXCop.
Robert Harvey
La segunda bala suena como si la SA cometió un error, aunque aparentemente es un error. Si hace suficientes de esos, la compañía encuentra una nueva SA.
Robert Harvey
La tercera bala suena como si la SA fuera un astronauta de arquitectura. O bien, es el demonio que él conoce. En cualquier caso, una arquitectura uniforme puede ser una buena cosa, si se usa adecuadamente.
Robert Harvey
@Robert lo siento si no estaba claro. Las constantes revisiones de código para satisfacer el estilo de la SA eran paralizantes, no FxCop per se. Algunas de sus pautas chocaron con las de Microsoft, por lo que tuvo que aprenderlo a su manera. Eran diferencias menores, pero muy quisquillosas y mataban la productividad. Estoy de acuerdo con usted en el segundo punto, fue una mala decisión y no somos perfectos. La tercera bala es buena y mala. Se siente cómodo con eso, pero también evita que los desarrolladores trabajen en nuevas tecnologías.
Ahmad Mageed
¿Qué debe aportar una SA a la mesa? Un vaso de whisky, una pistola y dos balas.
Adam Crossland

Respuestas:

23

Un arquitecto de sistemas debe:

  1. Especificar la arquitectura de alto nivel.
  2. Participa en revisiones de código
  3. Aprobar tecnologías utilizadas
  4. Ayudar a los desarrolladores en su esfuerzo de codificación.
  5. Mantener y monitorear el cronograma de desarrollo.
  6. Produzca artefactos SA, como diagramas UML, diagramas de Gantt y similares.

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.

Robert Harvey
fuente
5. debe ser para el gerente de proyecto, ¿no?
Bћовић
8

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:

  • adherencia ciega al proceso por el bien del proceso
  • sesgo ciego a la tecnología antes de conocer el problema
  • Creación y aplicación de normas sin una buena justificación.
  • rewrite from scratch mentalidad

Los mejores "Arquitectos" con los que he trabajado trajeron a la mesa:

  • Preguntas que condujeron a una mejor comprensión del problema y las posibles soluciones.
  • Opciones / tecnologías de diseño y sus compensaciones.
  • Explicaciones claras y racionales tanto para las condenas como para la aprobación de diseños y tecnologías.

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.

dietbuddha
fuente
-1 Obviamente nunca has trabajado con buenos arquitectos. Los arquitectos con los que trabajo no hacen ninguno de los primeros cuatro puntos.
Stephen
7

1 ¿Qué debe aportar una SA a la mesa?

  • Una piel gruesa
  • Buenas habilidades de negociación.
  • Una buena comprensión de los diversos niveles de software (desde la genialidad AJAX hasta la E / S de redes de bajo nivel). No necesariamente es un experto práctico, pero tendrá que tomar decisiones importantes sobre qué software debe ejecutarse en qué capa (s).
  • Disposición a ensuciarse las manos en el código, los diseños de papel blanco simplemente no son suficientes.
  • Fomento de la artesanía del software: sea el animador para hacer las cosas de la manera correcta siempre que sea posible y de la mejor manera, dadas las limitaciones en otros casos. Así que cosas como control de fuente, TDD, compilación y CI, codificación de DOJO, revisiones de código, un buen sistema de seguimiento de problemas, etc.

2 ¿Cómo pueden lograr un equilibrio en su toma de decisiones?

  • Gran parte depende de su (s) equipo (s) y de cuán capaces sean.
  • Su entorno (puede verse obligado a utilizar un producto de un proveedor en particular, por ejemplo)
  • En general, es mejor no ser un arquitecto de la torre de marfil, ser práctico, ser parte del equipo; la gente entenderá sus decisiones de esa manera.

3 ¿Se debe abordar un trabajo de SA (como se definió anteriormente) con la mentalidad de que deben aplicar ciertas reglas básicas?

  • Sí, cosas como el control de versiones y un sistema de compilación son bastante importantes y los desarrolladores deben usarlos. Sin embargo, siempre es mejor hacerlos parte de la solución.

Hay muchas más, creo que habrá algunas respuestas realmente buenas para esta.

Martijn Verburg
fuente
+1 por tus puntos. Ilustran más o menos lo que se necesita y continúa en equipos buenos, pequeños y bien integrados.
talonx
3

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?

  • En referencia a su segundo ejemplo: Parece que el equipo del proyecto formó una dependencia estrechamente vinculada a un subsistema interno. Las fachadas sueltas no son solo para código de terceros. La creación de una abstracción para ese subsistema podría haber permitido una transición más fácil para usar esa biblioteca si la solución interna fallara. Esta es una solución lógica para un arquitecto de software solo, pero también es una forma de Project Manager con las preocupaciones de expresión del equipo, debería haber sido doblemente una solución obvia.
  • En referencia a su tercer ejemplo: no es una mala idea tener una arquitectura o proceso conocido para producir software (aunque, ciertamente, usted dijo 'todos los proyectos'). Esto se apega a lo que funciona. Dicho esto, debe haber oportunidades en las que se puedan intentar nuevas técnicas para ver si aportan un valor adicional. El software exclusivo interno o los proyectos de menor alcance en los que se pueden intentar estas tecnologías son lugares ideales. Sin embargo, tenga en cuenta que la responsabilidad también recae en los desarrolladores para proporcionar demostraciones / argumentos investigados y convincentes para adoptar tecnologías. Y no se puede esperar que SA conozca todos los ORM competidores y sus fortalezas y debilidades en comparación con los demás.
Steven Evers
fuente