Lavorare su grandi team è sicuramente una nuova esperienza. Non sarai più in grado di capire o probabilmente avere accesso all'intera base di codice che costituisce il tuo prodotto. Dovrai probabilmente eseguire controlli di processo particolari che non riguardano in realtà ciò che sta facendo la tua squadra o il modo in cui lo fanno, ecc.
Sto ancora imparando da solo su questo argomento, ma penso che la mia chiave di lettura sia ancora lontana:
- Specializzato nella tua zona
Non hai bisogno di capire l'intero ecosistema, e il tentativo di farlo può effettivamente ostacolarti, specialmente quando inizi a salire. Quando partirò, consiglierei di concentrarti sulla comprensione del tuo codice e dei limiti logici su come il tuo codice interagisce con il codice di altri team (database condivisi, cache, servizi SOAP / REST, file system, ecc.) E quali dipendono da up e downstream e i dipendenti sono.
- Diventa un esperto nel trovare l'esperto.
Nelle grandi organizzazioni ci sono semplicemente troppi ingranaggi mobili per ogni persona per avere una conoscenza intima del funzionamento interno di ciascun sistema discreto. Diventare davvero bravo a capire come trovare la singola persona o la pagina wiki che ha le risposte necessarie per risolvere i propri problemi di prodotto o di processo è davvero un set di abilità che si desidera raccogliere.
Ciò significa conoscere un po 'la struttura della tua organizzazione e chi porre domande su come ottenere informazioni su un argomento specifico o su chi porre domande su chi porre domande su chi porre domande su un particolare argomento.
Conoscere ed essere in buoni rapporti con i tuoi architetti del software, i project manager, gli sviluppatori di lead, ecc. tutto diventa molto utile qui.
-
Rilassare. Organizzare progetti software di grandi dimensioni è difficile. È una cosa Le aspettative su come procedete nel fare le cose e ottenere risposte sono diverse. Gli skillset sono un po 'diversi da quelli che usi nei team più piccoli, ma sei un go-getter e, proprio come chiunque altro, quando hanno fatto il salto a grandi squadre, ne avrai l'abilità. ^ _ ^
Per quanto riguarda i design pattern e le cose tecniche.
Non penso che ci siano molti cambiamenti importanti sui modelli di progettazione usati sui piccoli progetti rispetto ai grandi progetti. Una fabbrica è una fabbrica è una fabbrica giusta?
Allo stesso tempo, per gestire il gran numero di persone coinvolte, tende ad essere spinto a compartimentare componenti specifici dell'applicazione in modo che siano indipendenti e disaccoppiati da altri componenti il più possibile. Nel mio ruolo attuale vedo molti diagrammi N-Tier con un sacco di piccole scatole che denotano funzionalità specifiche del prodotto. per la maggior parte ogni squadra è responsabile di una o più di quelle caselle specifiche. Quindi siamo molto precisi su ciò che i nostri componenti sono in / out e requisiti, poiché non possiamo semplicemente modificare quei dettagli volenti o nolenti a causa degli strati di persone coinvolte nell'apportare modifiche.
La mia divisione non porta questo all'estremo che fanno altre aziende, ma se stai lavorando su una grande soluzione distribuita piuttosto che su un unico grande programma come Ubuntu o Windows potresti scavare in un'architettura orientata ai servizi come il modello Amazon è in corso al fine di facilitare questa separazione delle preoccupazioni.
Proprio come i diagrammi dell'architettura n-tier con componenti logici specifici, SOA è molto utile in quanto se fai le cose nel modo corretto e implementa meccanismi di controllo della versione dell'interfaccia solida e comunichi le imminenti modifiche dell'interfaccia in anticipo puoi abilitare più team a lavorare sulle soluzioni VNext in parallelo, lavorando contro endpoint stentati e interfacce predeterminate fino a quando alcuni flussi verso il basso quando i vari servizi sono abbastanza funzionali da iniziare a connettersi direttamente l'uno all'altro per iniziare a servire le risposte effettive piuttosto che le risposte di stub / mock in scatola.
Ci sono anche alcuni processi molto interessanti intorno all'impostazione dell'ambiente di sviluppo quando si lavora su servizi con interdipendenze tra servizi che sono stati tutti sviluppati in parallelo, e come si può assicurare che l'ambiente di sviluppo di ogni team o delle società condivise abbia gli ultimi bit possibili distribuito senza introdurre interruzioni funzionali importanti che bloccano le altre squadre.