¿Cómo trabajan los arquitectos de software con el personal de programación?

Trabajo para una startup como oficial de tecnología. Sin un arquitecto oficial en el equipo, desempeño el papel de arquitecto. Entonces, supongo que puedo arrojar algunos centavos aquí.

Hay dos tipos de arquitecto: arquitecto orientado al uso y arquitecto orientado a la implementación. El primer tipo es garantizar que el producto sea intuitivo para el usuario y fácil de usar. El segundo tipo es garantizar que el producto se implemente de manera adecuada para que sea mantenible, escalable y eficiente.

Dado que la pregunta es sobre el arquitecto que trata con el personal de programación. Solo hablemos del arquitecto de implementación.

La ingeniería tiene que ver con el compromiso. ¿Tecnología de punta o tecnología estable? MySQL o NoSQL? OOD o POD? Todas estas decisiones deben tomarse de acuerdo con los requisitos y los recursos disponibles. Los arquitectos deben tener una profunda comprensión de ambos lados y equilibrarlo.

Tomando OOD mencionado en la pregunta, un arquitecto maduro aclararía una lista de preguntas:

  1. ¿Cuáles son los beneficios de OOD para este producto?
  2. ¿El equipo está familiarizado con OOD? Si no, ¿cuál es el costo de la capacitación?
  3. ¿Algún enfoque alternativo de OOD?
  4. ¿Cuáles son los pros y los contras de la base de código actual?
  5. etc.

Un gran error del arquitecto es creer que la tecnología popular o avanzada es la mejor. En cambio, debe elegir la tecnología más adecuada que no sea necesariamente la mejor o la más sexy.

Y, los arquitectos deberían hacer que la vida del personal de programación sea más fácil y no más difícil. Siempre tenga simpatía por los programadores. Un error de arquitectura puede conducir a horas de trabajo adicionales de los programadores y efectos desastrosos.

Sigue caminando y ajustándote. ¡Buena suerte!

Estoy en la posición arquitectónica actualmente. Para ser precisos, el trabajo de mi equipo es reunir problemas técnicos que rodean a nuestros servidores y encontrar o desarrollar e implementar soluciones a estos problemas. En el equipo, estoy reuniendo requisitos, proporciono pautas arquitectónicas y proporciono orientación y apoyo en cuestiones de desarrollo.

Para mí, hago dos cosas y parecen funcionar muy bien.

Por un lado, enfatizo ciertos objetivos de diseño importantes y me aseguro de que cada desarrollador en el proyecto comprenda el propósito de esta decisión. También proporciono una guía sobre quién implementaría esta propiedad, pero aceptaré con gusto cualquier aporte que me den mis desarrolladores. Incluso estoy bien con una arquitectura completamente diferente siempre que pueda ver que es buena y que tiene los objetivos de diseño que necesito.

Por ejemplo, en uno de nuestros proyectos actuales, dos objetivos de diseño muy importantes:

  • Debe proporcionar un mecanismo de complemento para que nuestros otros proyectos puedan personalizar este software a sus necesidades específicas.
  • Tiene que soportar la distribución a través de múltiples servidores, actualmente con un enfoque simple de servidor maestro / servidor esclavo

En el primer caso, verifico continuamente que ningún código específico del proyecto ingrese al núcleo de la aplicación y la próxima semana, separaremos la aplicación principal del código específico del proyecto prototipo. En el segundo caso, ofrecí la arquitectura y simplemente la usamos, ya que nadie tenía grandes objeciones o una arquitectura mucho mejor.

Por otro lado, actualmente estoy estableciendo una cultura de calidad en mi equipo. Requiere algo de trabajo, porque tengo algunos desarrolladores junior que simplemente no tienen la suficiente experiencia, otros desarrolladores que no están acostumbrados a ser tan exigentes con la calidad, pero están mejorando rápidamente. Cada vez que alguien implementa una nueva característica, hacemos una revisión de código bastante rigurosa, creamos tickets estimados y planificados para implementar las cosas de la revisión, etc.

El resultado de estas dos cosas es que obtengo una base de código de alta calidad sin la necesidad de planificar la arquitectura en cada pequeño detalle y sin la necesidad de administrar a cada desarrollador de manera íntima.

Además, observando su comentario sobre la alta carga de trabajo, este tiene un resultado de seguimiento muy interesante: mis desarrolladores están muy, muy motivados y realizan una cantidad tonta de trabajo, porque se sienten confiables y capacitados sobre su trabajo. Es su trabajo, es su propio producto y, cuando el resultado es asombroso, hicieron un trabajo increíble. Estoy ahí para ayudarlos con decisiones difíciles y reconocer los errores o problemas temprano para que vuelvan a la pista más rápido.

Desafortunadamente, los beneficios de una buena arquitectura no son obvios al comienzo del proyecto. Las personas se darán cuenta de los beneficios de una buena arquitectura con el tiempo. En mi experiencia, la clave del éxito del arquitecto es

  • Ser parte del equipo. Participe en el desarrollo del día a día donde sea posible.
  • Ganar la confianza del equipo. El arquitecto necesita construir una buena relación / confianza con el equipo de desarrollo. En nuestra organización, los arquitectos no tienen autoridad como los gerentes de línea / gerentes de proyecto, pero al mismo tiempo necesitan hacer las cosas.
  • Comunique los fundamentos / beneficios de las decisiones arquitectónicas lo suficientemente detalladas como para hacer que los beneficios sean obvios.

En algunas situaciones, los beneficios no son obvios y ahí es donde ayuda la confianza de los miembros del equipo en el arquitecto.

Como ejemplo práctico al comienzo de nuestro proyecto actual, hablamos sobre la inyección de dependencia (DI) y AOP. Inicialmente hubo escepticismo por parte del equipo, pero comenzó a usarlo de cualquier manera a menor escala. Una vez que comenzamos a usarlo, ahora el equipo se siente cómodo, lo estamos extendiendo a otras áreas.

La revisión del código ayudaría mucho en su situación, pero se deben establecer algunas pautas de programación para que puedan usarse en las revisiones por pares. Si encuentra que alguien está produciendo constantemente un código de línea de 10k, es posible que desee ayudarlo a refactorizar uno de estos en un código más manejable / legible (programación de pares).

More Interesting

¿Cuál es la mejor opción para una aplicación concurrente: Scala + Akka o Erlang?

¿Cómo se implementa la operación de deshacer en general en la mayoría de las aplicaciones?

¿Cuál es la mejor manera para que un profesional de TI migre a los Estados Unidos?

¿Cuáles son algunos buenos tutoriales en video sobre patrones de diseño en C ++, Java y Python?

¿Cuál es la mejor manera de aprender a pasar una entrevista técnica en Facebook, Palantir, Google, etc. después de haber estado codificando solo durante unos meses?

¿Cuántos desarrolladores de software hay en el mundo?

¿Cuáles son las mejores maneras para que un estudiante de cuarto semestre aprenda programación del mundo real en Java?

¿Se revocarán las leyes de trabajo infantil de EE. UU. Para que los niños menores de 16 años que saben codificar puedan trabajar en Silicon Valley?

¿Cuál es la forma recomendada de mantenerse actualizado con las últimas tecnologías, técnicas y herramientas en el desarrollo de software y aplicaciones?

¿Qué debo hacer para conseguir un trabajo en Silicon Valley como ingeniero de software? ¿Qué tipo de antecedentes o experiencia / educación se requiere?

¿Por qué a la gente le gusta la arquitectura?

Cómo usar AngularJS con Ruby on Rails

¿Qué podría haber sido una alternativa a los "archivos" tal como los conocemos hoy?

¿Cuáles son los beneficios de las pruebas unitarias de software altamente crítico?

¿Alguien puede dar un ejemplo simple en tiempo real de análisis de valor límite y partición de equivalencia?