Sono uno sviluppatore junior (circa 3 anni) e nel mio lavoro stiamo progettando un nuovo sistema. Il mio sviluppatore principale sarà l'architetto principale, tuttavia mi ha sfidato a provare a progettare il sistema da solo (in parallelo).
Nel corso di alcune iterazioni di idee di brainstorming e di proposta di ciò che ho visto come suggerimenti di architettura, il mio esempio mi ha dato il feedback che la maggior parte di quello che ho fatto è stato "progettare" e non "architettare".
Ha descritto la differenza come architettura indipendente dall'implementazione, mentre un design è la descrizione di un'implementazione. Ha detto che devo togliermi il cappello da designer e indossare il cappello da architetto. Mi ha dato un piccolo consiglio su come farlo, ma vorrei chiedere anche a te:
Come uscire dalla modalità di progettazione software e iniziare a pensare più come un architetto?
Ecco alcuni esempi di "disegni" che mi sono venuti in mente che non sono stati considerati rilevanti per l'architettura dal mio esempio:
- Ho escogitato un algoritmo per caricare e scaricare risorse dal nostro sistema e il mio capo ha detto che gli algoritmi non sono categoricamente architettura.
- Ho inventato una serie di eventi che il sistema dovrebbe raccogliere e in quale ordine dovrebbe generarli, ma anche questo non sembra tagliarlo come architettura.
Mi sembra di essere coinvolto nei dettagli e di non fare abbastanza passi indietro. Trovo che anche quando trovo qualcosa che sia a livello di architettura, spesso ci sono arrivato provando varie implementazioni e rimuginando nei dettagli, quindi generalizzando e astrattizzando. Quando ho descritto questo al mio esempio, ha detto che stavo prendendo un approccio sbagliato: avevo bisogno di pensare "dall'alto in basso" e non "dal basso".
Ecco alcuni dettagli più specifici sul progetto :
- Il progetto che stiamo progettando è un'applicazione web.
- Sto stimando circa 10-100 mila righe di codice.
- Siamo una start up. Il nostro team di ingegneri è di circa 3-5 persone.
- La cosa più vicina a cui potrei confrontare la nostra applicazione è un CMS leggero. Ha una complessità simile e si occupa in gran parte di carico e scarico dei componenti, gestione del layout e moduli in stile plug-in.
- L'applicazione è ajax-y. L'utente scarica il client una volta, quindi richiede i dati di cui ha bisogno dal server.
- Useremo il modello MVC.
- L'applicazione avrà l'autenticazione.
- Non siamo molto preoccupati per il vecchio supporto del browser (wow!), Quindi stiamo cercando di sfruttare l'ultimo e il più grande che è là fuori e uscirà. (HTML5, CSS3, WebGL ?, Estensioni di sorgenti multimediali e altro!)
Ecco alcuni obiettivi del progetto :
- L'applicazione deve essere ridimensionata. Nel breve termine i nostri utenti saranno nell'ordine da centinaia a migliaia, ma stiamo pianificando da decine di migliaia a milioni e oltre.
- Speriamo che l'applicazione sia presente per sempre. Questa non è una soluzione temporanea. (In realtà abbiamo già una soluzione temporanea e quello che stiamo progettando è la sostituzione a lungo termine di ciò che abbiamo).
- L'applicazione deve essere sicura in quanto potrebbe avere contatti con informazioni personali sensibili.
- L'applicazione deve essere stabile. (Idealmente, sarebbe stabile attorno al livello di Gmail ma non deve essere all'estremo di un rover su Marte.)