Qual è la differenza tra un architetto del software e un ingegnere del software?

Penso che il titolo di architetto del software sia un po' abusato e spesso confuso con quello di designer del software (che è ancora un altro termine che confonde, perché non ha niente a che fare con il design come sforzo artistico)

Le mie definizioni sarebbero:

Architetto del software - questa persona si occupa dei blocchi di alto livello. La connettività tra i sistemi, la scelta delle migliori tecnologie per i sistemi stessi, e la mappatura dei requisiti di business in requisiti ingegneristici. Ha abbastanza esperienza per capire quando push/pull dovrebbe essere usato contro pub/sub, per esempio, o quando un db NoSQL è accettabile al posto di un database SQL. Capisce anche i costi della tecnologia risultante (in termini di prestazioni e spese operative effettive). Infine, un architetto deve capire il business, non solo la tecnologia.

Progettista software - una volta che l'architettura è stabilita, un progettista è responsabile della creazione dell'attuale design del software. Egli può creare un design per ogni blocco architettonico modellando le classi appropriate o le relazioni del database. Può anche definire protocolli di cablaggio, formati di file, ecc.

Programmatore software - una volta stabilito il design, lo sviluppatore software implementa il design.

In ordine di importanza, le decisioni prese a livello di architettura sono critiche e sono spesso molto difficili e costose da cambiare se viene fatto un errore. Un errore di architettura può costare anni in sistemi complessi. Un errore di progettazione può costare qualche sprint. Un errore di programmazione può essere corretto non appena identificato.

Inoltre, tenete a mente che non c'è nessun requisito che una persona non possa adempiere a più di un ruolo. Nelle organizzazioni formali, si può avere l'architetto del software come una persona senior (o anche un dirigente), con il progettista che è una specie di capo squadra, e il programmatore un collaboratore individuale in quella squadra. Tuttavia, in pratica, l'architetto del software di solito non lascia un progetto una volta che il lavoro di architettura è completato, e una volta che il lavoro di architettura rallenta, di solito viene coinvolto nel design e nella programmazione.

L'avvertenza è comunque che l'architetto ha la responsabilità di scegliere i blocchi tecnologici in base ai loro meriti, e non in base alla sua familiarità, nel qual caso potrebbe ritrovarsi con scelte in cui può contribuire poco a livello di codice. In questi casi, dovrebbe conoscere meglio e lasciare l'implementazione agli esperti del dominio.

Questa è solo la mia opinione comunque, sono sicuro che ci sono molte altre interpretazioni. Inoltre, più l'applicazione è semplice, più alcuni ruoli diventano superflui. Per un'applicazione semplice, non c'è bisogno di un architetto. Se l'applicazione è abbastanza semplice, si può anche non avere un designer. Ma c'è sempre bisogno di qualcuno che la implementi.