Ci sono state molte domande con buone risposte sul ruolo di Software Architect (SA) su StackOverflow e Programmers SE . Sto cercando di porre una domanda leggermente più mirata di quelle. La definizione stessa di una SA è ampia, quindi per il bene di questa domanda definiamo una SA come segue:
Un architetto del software guida la progettazione generale di un progetto, viene coinvolto nelle attività di codifica, conduce revisioni del codice e seleziona le tecnologie da utilizzare.
In altre parole, non sto parlando di riposo manageriale e di vestire i tipi di SA cresta (ulteriori parole in rima). Se dovessi perseguire qualsiasi tipo di posizione SA, non vorrei essere lontano dalla programmazione. Potrei sacrificare un po 'di tempo per interfacciarmi con clienti, analisti aziendali, ecc., Ma sono ancora tecnicamente coinvolto e non sono solo consapevole di ciò che accade durante le riunioni.
Con questi punti in mente, cosa dovrebbe portare sul tavolo una SA? Dovrebbero entrare con la mentalità di "stabilire la legge" (per così dire) e imporre l'uso di determinati strumenti per adattarsi "a modo loro", cioè linee guida di codifica, controllo del codice sorgente, schemi, documentazione UML, ecc.? O dovrebbero specificare la direzione e la strategia iniziale, quindi essere rilassati e saltare come necessario per correggere la direzione della nave?
A seconda dell'organizzazione, potrebbe non funzionare. Una SA che si affida a TFS per far valere qualsiasi cosa può avere difficoltà ad attuare il proprio piano presso un datore di lavoro che utilizza solo StarTeam. Allo stesso modo, una SA deve essere flessibile a seconda della fase del progetto. Se si tratta di un nuovo progetto, hanno più scelte, mentre potrebbero avere meno per i progetti esistenti.
Ecco alcune storie di SA che ho sperimentato come un modo per condividere alcuni retroscena nella speranza che le risposte alle mie domande possano anche far luce su questi temi:
Ho lavorato con una SA che ha revisionato letteralmente ogni singola riga di codice del team. La SA farebbe questo non solo per il nostro progetto ma per altri progetti nell'organizzazione (immaginate il tempo speso per questo). Inizialmente era utile far rispettare determinati standard, ma in seguito divenne paralizzante. FxCop era come la SA avrebbe trovato problemi. Non fraintendetemi, è stato un buon modo per insegnare agli sviluppatori junior e costringerli a pensare alle conseguenze del loro approccio scelto, ma per gli sviluppatori senior è stato visto come un po 'draconiano.
Una SA in particolare era contraria all'uso di una determinata libreria, sostenendo che era lenta. Questo ci ha costretto a scrivere tonnellate di codice per ottenere risultati diversi mentre l'altra biblioteca ci avrebbe risparmiato un sacco di tempo. Avanzamento rapido verso l'ultimo mese del progetto e i clienti si sono lamentati delle prestazioni. L'unica soluzione era modificare alcune funzionalità per utilizzare l'approccio originariamente ignorato nonostante i primi avvisi degli sviluppatori. A quel punto un sacco di codice è stato espulso e non riutilizzabile, portando a straordinari e stress. Purtroppo le stime utilizzate per il progetto si basavano sul vecchio approccio che il mio progetto era proibito utilizzare, quindi non era un indicatore appropriato per la stima. Vorrei che il Primo Ministro dicesse "l'abbiamo già fatto prima"
La SA che impone l'uso di DTO, DO, BO, livelli di servizio e così via per tutti i progetti. I nuovi sviluppatori dovevano apprendere questa architettura e le linee guida di utilizzo rigorosamente SA. Sono state fatte eccezioni alle linee guida per l'uso quando era assolutamente difficile seguire le linee guida. La SA era fondata sul loro approccio. Le classi per DTO e tutte le operazioni CRUD sono state generate tramite CodeSmith e gli schemi di database erano un'altra sfera di cera simile. Tuttavia, dopo aver utilizzato questa configurazione ovunque, la SA non era aperta a nuove tecnologie come LINQ to SQL o Entity Framework.
Non sto usando questo post come piattaforma per lo sfogo. Ci sono stati aspetti positivi e negativi nelle mie esperienze con le storie di SA sopra menzionate. Le mie domande si riducono a:
- Cosa dovrebbe portare sul tavolo una SA?
- Come possono trovare un equilibrio nel loro processo decisionale?
- Si dovrebbe avvicinarsi a un lavoro di SA (come definito in precedenza) con la mentalità che devono applicare determinate regole di base?
- Qualcos'altro da considerare?
Grazie! Sono sicuro che queste attività lavorative possono essere facilmente estese a persone che sono sviluppatori senior o lead tecnici, quindi sentiti libero di rispondere anche a quella capacità.