Sono uno sviluppatore junior (~ 3 anni di esperienza) e al mio posto di lavoro stiamo architettando un nuovo sistema. Il mio principale sviluppatore 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 proponendo ciò che ho visto come suggerimenti di architettura, la mia guida mi ha dato la risposta che la maggior parte di ciò che ho fatto è stato "progettare" e non "architettare".
Ha descritto la differenza come architettura essendo implementazione-agnostica mentre un design è la descrizione di un'implementazione. Ha detto che ho bisogno di togliermi il cappello da designer e indossare il mio cappello da architetto. Mi ha dato un po 'di consigli su come farlo, ma vorrei chiederti pure:
Come faccio a uscire dalla modalità di progettazione software e iniziare a pensare più come un architetto?
Ecco alcuni esempi di "design" che ho trovato e che non sono stati considerati rilevanti per l'architettura dal mio esempio:
- Mi è venuto in mente un algoritmo per caricare e scaricare risorse dal nostro sistema e il mio lead ha affermato che gli algoritmi non sono categoricamente architettura.
- Mi è venuta in mente una serie di eventi che il sistema avrebbe dovuto sollevare e in quale ordine avrebbe dovuto aumentarli, ma anche questo non sembrava tagliare l'architettura.
Mi sembra di essere intrappolato nei dettagli e di non fare un passo indietro abbastanza lontano. Trovo che anche quando trovo qualcosa che è a livello di architettura, spesso ci sono arrivato provando varie implementazioni e aggirando i dettagli, generalizzando e astrattamente. Quando ho descritto questo alla mia guida, ha detto che stavo prendendo l'approccio sbagliato: avevo bisogno di pensare "dall'alto in basso" e non "dal basso verso l'alto".
Ecco altri dettagli specifici sul progetto :
- Il progetto che stiamo architettando è un'applicazione web.
- Sto stimando circa 10-100 mila righe di codice.
- Siamo uno start up. Il nostro team di ingegneri ha circa 3-5 persone.
- La cosa più vicina a cui posso confrontare la nostra applicazione è un CMS leggero. Ha una complessità simile e si occupa principalmente di caricamento e scaricamento dei componenti, gestione dei layout e moduli stile plug-in.
- L'applicazione è ajax-y. L'utente scarica il client una volta quindi richiede i dati in quanto ne ha bisogno dal server.
- Useremo il pattern 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 più grande che è là fuori e uscirà fuori. (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 dell'ordine di centinaia di migliaia, ma stiamo pianificando da decine di migliaia a milioni e oltre.
- Speriamo che l'applicazione sarà disponibile per sempre. Questa non è una soluzione temporanea. (In realtà abbiamo già una soluzione temporanea e ciò che stiamo architettando è la sostituzione a lungo termine di ciò che abbiamo).
- L'applicazione deve essere protetta in quanto potrebbe avere contatti con dati personali sensibili.
- L'applicazione deve essere stabile. (Idealmente, sarebbe stabile attorno al livello di gmail ma non è necessario trovarsi all'estremo di un rover Mars.)