Arquitectura - Habilidades
Para apoyar las actividades establecidas se requieren habilidades específicas. Desde mi experiencia, lecturas y debates técnicos, podemos resumir esto en estas diez habilidades que todo arquitecto de software debería tener:
- Diseño
- Toma de decisiones
- Simplificación
- Código
- Documentación
- Comunicación
- Estimación
- Balance
- Consultoría y Mentoría
- Mercado
Diseño y Arquitectura
Un buen diseño en la arquitectura de software combina el conocimiento teórico con la experiencia práctica. Teóricamente, los arquitectos deben dominar los patrones de diseño fundamentales, como los detallados en “Patrones de diseño: elementos de software orientado a objetos reutilizable”, que siguen siendo fundamentales para la arquitectura moderna. El conocimiento avanzado de patrones y antipatrones, como los de “Patrones de integración empresarial”, extiende esta comprensión. Los arquitectos también deben centrarse en medidas de calidad, asegurando que los diseños cumplan con los requisitos no funcionales como escalabilidad, seguridad y adaptabilidad.
En la práctica, los arquitectos mejoran experimentando con varias pilas de tecnología, obteniendo información sobre sus fortalezas y limitaciones. Explorar marcos como Angular revela aplicaciones de patrones del mundo real, como Observables, y fomenta una comprensión más profunda a través de la codificación práctica. Asistir a grupos de usuarios y participar en comunidades, como las de Meetup, amplía sus perspectivas y fomenta la curiosidad, permitiendo a los arquitectos mantenerse actualizados y refinar continuamente su oficio.
Recursos a leer:
Toma de decisiones
La toma de decisiones efectiva es crucial para que los arquitectos guíen proyectos y organizaciones en la dirección correcta. Enfócate en lo que es importante al enfatizar la integridad conceptual (mantener la consistencia en las decisiones en pro de la simplicidad y mantenibilidad) y la uniformidad (asegurando que los estándares como las convenciones de nombres se apliquen de manera consistente). Priorice las decisiones críticas tempranas para evitar costosas soluciones o retrasos en los proyectos, utilizando herramientas como el modelo Weighted Shortest Job First (WSJF) para la priorización. Manténgase dentro de su ámbito de competencia para mantener la credibilidad, colaborar con sus pares y aclarar las responsabilidades dentro de la jerarquía arquitectónica.
Al tomar decisiones, evalúe múltiples opciones para garantizar un análisis exhaustivo y fomente la confianza de las partes interesadas. La comparación de opciones basadas en criterios medibles, como el costo o la viabilidad, conduce a mejores decisiones basadas en hechos. Este proceso no solo apoya los resultados sostenibles, sino que también lo prepara con argumentos sólidos durante las discusiones, asegurando la alineación entre los equipos y las partes interesadas.
Otros recursos:
Simplificar las cosas
La simplificación de las soluciones es fundamental para la resolución efectiva de problemas, alineándose con la Navaja de Occam, que favorece la simplicidad al reducir las suposiciones innecesarias. Para lograr esto, desafíe o ponga a prueba su solución analizándola desde diferentes perspectivas y cuestionando sus suposiciones. Después de discusiones complejas, dé un paso atrás para revisar el panorama general y refactorizar si es necesario, dando a su cerebro tiempo para procesar ideas. Aplique el método de dividir y conquistar para dividir los problemas en partes más pequeñas y validar su integración después. Por último, recuerde que la refactorización es un proceso valioso para mejorar soluciones demasiado complejas, siempre que haya una cobertura de prueba adecuada y soporte a las partes interesadas.
Otros recursos:
Cómo codificar
Incluso como arquitecto empresarial, mantenerse conectado con las prácticas de codificación es esencial para comprender los desafíos de los desarrolladores y ganarse su confianza. Mantener un proyecto paralelo le permite explorar nuevas tecnologías, herramientas y metodologías prácticas, construyendo experiencia práctica más allá del conocimiento teórico. Esto ayuda a formar decisiones informadas y a mantener el ritmo de las tendencias en evolución en el desarrollo.
Para priorizar qué explorar, los recursos estructurados como el radar tecnológico de ThoughtWorks pueden guiarlo. Clasifica las tecnologías en Adoptar, probar, evaluar y mantener, ayudando a los arquitectos a centrarse en innovaciones impactantes y preparadas para la empresa. Mantenerse informado e involucrado garantiza una mejor colaboración y alineación con los desarrolladores.
Otros recursos:
Documentación
La documentación arquitectónica es a veces más y a veces menos importante. Los documentos importantes son, por ejemplo, decisiones arquitectónicas o pautas de código. La documentación inicial a menudo se requiere antes de que comience la codificación y debe refinarse continuamente. Otra documentación se puede generar automáticamente, ya que el código también puede ser documentación, p. ej. Diagramas de clase UML.
Otros recursos:
Comunicación
De mis observaciones esta es una de las habilidades más subestimadas. Si eres brillante en diseño pero no puedes comunicar tus ideas, es probable que tus pensamientos tengan menos impacto o incluso no tengan éxito.
La comunicación es una habilidad crítica pero a menudo subestimada, especialmente para los arquitectos. Implica transmitir claramente ideas, estructurar discusiones de manera efectiva y dirigir reuniones. Herramientas como “UZMO – Thinking With Your Pen” pueden mejorar las habilidades de comunicación visual. Hablar en público, ya sea a grupos pequeños o grandes, requiere práctica y salir de la zona de confort. Adaptar la comunicación a la audiencia es esencial: los desarrolladores se centran en los detalles, mientras que los gerentes priorizan los costos y los resultados. La comunicación regular y transparente garantiza la alineación en todos los niveles, aclarando la lógica detrás de las decisiones. Estar siempre preparado con diapositivas y respuestas clave puede aumentar la confianza y la eficiencia durante las interacciones.
Otros recursos:
Estimación y evaluación
La estimación y la evaluación son habilidades críticas para arquitectos y desarrolladores principales. Los arquitectos deben comprender los principios básicos de gestión de proyectos para proporcionar estimaciones de plazos, recursos y costos, teniendo en cuenta todas las fases del proyecto, como los requisitos, las pruebas y la depuración. El uso de datos pasados o modelos como COCOMO ayuda a refinar las estimaciones. Para proyectos ágiles, los recursos como “Estimación y planificación ágiles” de Mike Cohn pueden ofrecer una orientación valiosa.
La evaluación de arquitecturas “desconocidas” implica evaluar su idoneidad para contextos actuales y futuros a través de preguntas preparadas. Estos deben abarcar prácticas de diseño (por ejemplo, patrones y estructura), prácticas de desarrollo (por ejemplo, directrices de código e implementación), garantía de calidad (por ejemplo, automatización de pruebas y revisiones por pares) y medidas de seguridad (por ejemplo, pruebas de seguridad y penetración incorporadas). Este enfoque estructurado garantiza decisiones informadas y promueve soluciones robustas y mantenibles.
Otros recursos:
Balance
Lograr el equilibrio en la arquitectura requiere gestionar las compensaciones entre calidad, costo y velocidad de desarrollo, evitando la ingeniería excesiva al tiempo que se alinean los requisitos funcionales y no funcionales. Los arquitectos deben navegar por objetivos conflictivos, como equilibrar la simplicidad a corto plazo con la visión a largo plazo, garantizar que las soluciones se ajusten a las necesidades futuras al tiempo que involucra a los desarrolladores, empresas y gerentes en la comprensión del impacto financiero y estratégico. Además, los arquitectos a menudo median entre diversos grupos, resuelven conflictos y alinean estrategias a través de una comunicación efectiva, como el “Modelo de las Cuatro Orejas” de Schulze von Thun, que ayuda a fomentar la colaboración y lograr resultados equilibrados y estratégicos.
Consultoría y Coaching
La consultoría y el coaching proactivos son esenciales para evitar que los problemas arquitectónicos se intensifiquen. Los arquitectos deben anticipar las necesidades futures y preparar la organización estableciendo una visión clara de los objetivos a medio y largo plazo, a menudo utilizando modelos de madurez para proporcionar estructura y medir el progreso en comparación con los criterios SMART. La construcción de una comunidad de práctica (CoP) fomenta la colaboración, la estandarización y el intercambio de conocimientos entre los profesionales con intereses compartidos, como desarrolladores y arquitectos, mejorando el crecimiento individual y organizacional. Sesiones de consulta abierta (open hours), que se llevan a cabo regularmente sin una agenda estricta, fomentan la comunicación abierta, resuelven problemas menores con prontitud y abordan temas complejos a través de seguimientos, reduciendo los conceptos erróneos y la ambigüedad.
Otros recursos:
Habilidades de marketing
Las habilidades de marketing son esenciales para promover sus ideas de manera efectiva, especialmente cuando otros pueden no abrazarlas de inmediato. Para convencer a los demás, es crucial motivarlos demostrando el valor y los beneficios de sus ideas en un formato de fácil digestión, como a través de prototipos o videos. La persistencia es clave; si estás convencido de que tu idea vale la pena, necesitas luchar por ella, incluso si se encuentra con resistencia. Establecer aliados que apoyen sus ideas también puede hacer que sea más fácil ganar tracción, así que comience a construir una red. Repetir su mensaje regularmente puede ayudar, pero tenga cuidado de no exagerar, ya que la credibilidad es esencial para el éxito a largo plazo.
Otros recursos:
Habilidades técnicas
- Experiencia en el desarrollo de software
- Experiencia en la gestión de proyectos
- Conocimiento de uno o más lenguajes de programación, como Java, Python, JavaScript, Ruby, Rust y C
- Conocimiento de diferentes plataformas de desarrollo
- Comprensión de las aplicaciones web, la ciberseguridad y las tecnologías de código abierto
- Competencia en el análisis de código para problemas y errores
- Experiencia en plataformas de bases de datos
- Experiencia con operaciones y habilidades de DevOps