L'architetto del software è un ruolo specialistico dello sviluppatore di software che passa la maggior parte del suo tempo a trovare soluzioni per affrontare requisiti "non funzionali". Esempi di requisiti non funzionali sono la scalabilità (sia verticale che orizzontale), la riusabilità, la disponibilità, ecc.
In una società startup, un architetto software spesso emerge dallo sviluppatore software principale che ha sviluppato un prodotto software di successo per il suo datore di lavoro, e viene utilizzato in un altro progetto con qualche modifica/estensione. Quindi, come sviluppatore principale, definisce regole o linee guida su come estendere o modificare il suo software. Così crea una sorta di strato, che rende lo sviluppo del prodotto software successivo più veloce, più economico.
In un'azienda consolidata, un Architetto Software definirà requisiti non funzionali come scalabilità, disponibilità, partizionamento del software con le sue API o un modo standardizzato per sviluppare applicazioni che includa linguaggio di programmazione, framework software, librerie di terze parti. Spesso sviluppa un prototipo come prova di concetto del suo progetto. Quindi la vita degli altri sviluppatori di software che devono implementare i requisiti funzionali è più facile perché qualcuno ha fornito linee guida ed esempi.
Il risultato più tangibile sarebbe complessivamente meno tempo di sviluppo, qualità costante (cattiva/buona), membri del team più felici. 🙂
L'architetto software incompetente fornisce un diagramma dei componenti di alto livello, di solito senza specifiche su come questi componenti interagiscono e lascia che gli sviluppatori capiscano come implementare i requisiti non funzionali. Questo architetto si giustifica dicendo che l'architettura deve essere di alto livello, e non regola e tocca il lavoro sporco di codifica.
In sintesi, lo sviluppatore di software è la persona che sviluppa l'implementazione dei requisiti.
L'architetto del software è uno specialista che sviluppa e definisce il sistema e lo strato sottostante che rende il lavoro degli altri sviluppatori di software più facile.