¿Hay algún rol de arquitecto de software en Google / Facebook / Microsoft / Apple?

El título de Arquitecto desafortunadamente viene con un estigma porque muchos de ellos de alguna manera se metieron en el papel sin haber trabajado durante un número significativo de años como ingeniero. No saben cómo codificar y no saben cómo es construir software.

Sin embargo, el “papel” del arquitecto es importante. Aprecio mejor el papel ahora que no tenemos ese título en mi empresa actual. Existe una gran brecha en la responsabilidad de comprender el panorama general del producto que estamos construyendo y coordinar cómo deben interactuar los múltiples componentes y qué contratos deben cumplir para construir un sistema de trabajo.

Convertirse en un buen arquitecto lleva tiempo. No es algo que creo que pueda lograrse a través de la inteligencia pura. La mayoría de las veces, existe un desacuerdo entre ingenieros o equipos sobre cómo debería funcionar el sistema en general. Se necesita a alguien con fuertes habilidades interpersonales y técnicas para resolver estas disputas y, en última instancia, asumir la responsabilidad de tomar la decisión correcta y mantener a todas las partes involucradas comprometidas y respetadas.

Imagina construir una casa desde cero. Incluso si pudiera obtener los constructores, techadores, plomeros y electricistas más inteligentes, ¿desearía que construyeran su casa sin acordar una arquitectura posterior?

En mi empresa actual, he abogado por el * rol * de arquitecto. Es un sombrero otorgado a los ingenieros de software senior y son responsables de diseñar una arquitectura para una pieza específica de funcionalidad en todo el sistema. Luego, los líderes de ingeniería de los equipos revisan su arquitectura y deben construir componentes que son parte de la característica. Volvemos sobre cualquier problema y llegamos a una solución. Esto funciona bien la mayoría de las veces cuando hay acuerdo, se vuelve más difícil si hay puntos de vista fundamentalmente diferentes. Ahí es donde finalmente necesitamos a alguien con la autoridad para decir: vamos en esta dirección. En general, si los equipos no pueden persuadirse mutuamente del diseño de un sistema, entonces cualquiera de las soluciones es buena (o mala) como la otra y hace poca diferencia. Lo más importante en ese caso es elegir uno y seguir adelante.

Diré que dejar las decisiones arquitectónicas en manos de los gerentes es una mala idea porque a menudo pueden verse tentados a usar una decisión técnica para ganar una batalla política / territorial.

La otra desventaja de pedirle a los ingenieros que construyan es que he descubierto que muchos de ellos no quieren involucrarse a ese nivel. Es aburrido e incómodo tratar de explicar conceptos a la gente y ganárselos en comparación con la satisfacción instantánea de escribir código que hace exactamente lo que le pides.

Así que ahí lo tiene: puede pasar sin un arquitecto, pero si tiene uno bueno en el personal, resolverá muchos problemas y, lo que es más importante pero menos obvio, evitará que ocurran aún más problemas al principio sitio.

Casi cualquier ingeniero senior en estas empresas puede ser un arquitecto de software en una empresa promedio. Cuando las personas piensan en un arquitecto, piensan en una persona que puede diseñar, descomponer e implementar un sistema gigantesco. Todas estas compañías tendrán una entrevista que consiste en problemas y preguntas que solo esa persona podría resolver. Esa es una de las razones por las cuales las mejores compañías de software no necesitan arquitectos designados, simplemente hay una amplia oferta de genios de calibre arquitectónico entre las personas disfrazadas de ingenieros “regulares”.

Ser designado como arquitecto es una forma de impulso al ego poco saludable. Los desarrolladores junior pueden sentirse intimidados cuando trabajan con una persona designada como “arquitecto”. Pueden permanecer en silencio en lugar de hablar cuando el “arquitecto” comete un error. Podrían tratar de “absorber” al arquitecto, en lugar de hacer lo correcto. Y así.

El arquitecto de software como título es menos común de lo que solía ser. En su lugar, debe buscar un cierto nivel de desarrollador, por ejemplo, ingeniero principal en Microsoft, ingeniero sénior de personal en Google, etc.

El rol existe absolutamente: las personas cuyo trabajo principal es ayudar a visualizar piezas de software grandes, complejas y de varios equipos, y que aplican su experiencia técnica para ayudar a que esos sistemas se desarrollen y sean eficientes, escalables y correctos.