Ho lavorato allo sviluppo di software embedded per questa piccola startup e il nostro team è piuttosto piccolo: circa 3-4 persone. Siamo responsabili di tutta l'ingegneria che coinvolge un dispositivo RF controllato da un microcontroller integrato che si connette a un host PC che esegue una sorta di software di raccolta e analisi dei dati.
Sono venuto a sviluppare queste due linee guida quando lavoro con i miei colleghi:
- Definisci una chiara separazione delle responsabilità e assicurati che il contributo di ciascuna persona al prodotto finale non si sovrapponga.
- Non dare per scontato che i tuoi colleghi sappiano tutto sulle loro responsabilità. Presumo che ci sia un qualche tipo di tecnologia di cui dovrò essere competente per interfacciarsi correttamente con il lavoro dei miei colleghi.
Il primo punto è abbastanza facile per noi. Faccio firmware, un ragazzo fa la RF, un altro fa il software per PC e l'ultimo funziona con il DSP. Nulla si sovrappone in termini di lavoro misto di due persone nel prodotto finale. Perché ciò accada, un ragazzo deve consegnare il lavoro a un altro ragazzo che lo controllerà e lo integrerà da solo.
Il secondo punto è il cuore della mia domanda. Ho imparato nel modo più duro di non fidarmi assolutamente delle conoscenze dei miei colleghi, indipendentemente da quanti anni di esperienza dichiarino di avere. Almeno fino a quando non me lo hanno dimostrato un paio di volte. Quindi, dato che ogni volta che sviluppo un pezzo di firmware, se si interfaccia con una tecnologia che non conosco, cercherò di impararlo e sviluppare un pezzo di codice di test che mi aiuti a capire cosa stanno facendo. In questo modo se il mio pezzo del prodotto entra in conflitto con un altro pezzo, allora ho una certa conoscenza delle possibili cause.
Ad esempio, il ragazzo PC ha iniziato a implementare la sua GUI in .NET WPF (C #) e l'uso di LibUSBdotNET per l'accesso USB. Quindi ho imparato C # e la libreria USB .NET che usa e ho creato una piccola console per aiutarmi a capire come funziona quella libreria USB.
Ora tutto ciò richiede più tempo ed energia, ma ritengo che sia giustificato in quanto mi dà un punto d'appoggio per affrontare i problemi di integrazione. Inoltre mi piace imparare questa nuova roba quindi non mi dispiace. D'altra parte, posso vedere come questo può trasformarsi in una sincronizzazione temporale per un lavoro che non può trasformarsi nel prodotto finale e potrebbe non trasformarsi mai in un problema.
Quindi quanta esperienza / abilità si sovrappongono ti aspetti nei tuoi compagni di squadra rispetto alle tue abilità? Questo problema scompare quando i team diventano più grandi e diversificati?