¿Cuál es la diferencia entre arquitecto de software y desarrollador de software?

El arquitecto de software es una función especializada del desarrollador de software que dedica la mayor parte de su tiempo a encontrar soluciones para abordar los requisitos "no funcionales". Ejemplo de requisitos no funcionales son la escalabilidad (tanto vertical como horizontal), la reutilización, la disponibilidad, etc.

En una empresa de nueva creación, un arquitecto de software a menudo surge del desarrollador de software principal que ha desarrollado un producto de software exitoso para su empleador, y se está utilizando en otro proyecto con alguna modificación/extensión. Entonces, como desarrollador principal, define reglas o directrices sobre cómo ampliar o modificar su software. En una empresa establecida, un arquitecto de software definirá los requisitos no funcionales, como la escalabilidad, la disponibilidad, la partición del software con su API o una forma estandarizada de desarrollar la aplicación, incluyendo el lenguaje de programación, el marco de software, la biblioteca de terceros. A menudo desarrolla un prototipo como prueba de concepto de su diseño. Por lo tanto, la vida de otros desarrolladores de software que tienen que implementar los requisitos funcionales, es más fácil porque alguien ha proporcionado directrices y ejemplos.

El resultado más tangible sería en general menos tiempo de desarrollo, calidad consistente (mala/buena), miembros del equipo más felices 🙂

Un arquitecto de software incompetente entrega un diagrama de componentes de muy alto nivel, generalmente sin especificar cómo interactúan esos componentes y deja que los desarrolladores descubran cómo entregar la implementación de los requisitos no funcionales. Este arquitecto pone la excusa de que la arquitectura debe ser de alto nivel, y no gobierna y toca el trabajo de codificación sucia.

En resumen, el desarrollador de software es la persona que desarrolla la implementación de los requisitos.
El arquitecto de software es un especialista que desarrolla y define el sistema y la capa subyacente que facilita el trabajo de otros desarrolladores de software.