Jak powinienem zarządzać zespołem o różnych poziomach umiejętności?

16

Będę pracował nad projektem oprogramowania z kilkoma moimi przyjaciółmi i zostałem mianowany kierownikiem technicznym. Żaden z tych facetów wcale nie jest złym programistą, ale mam znacznie większe doświadczenie niż oni. Muszę być w stanie rozdzielić pracę między wszystkich członków zespołu, jednocześnie upewniając się, że nie nadepniemy sobie nawzajem; że spełniają one stosunkowo wysokie standardy jakości i skalowalności, których potrzebujemy, aby ten projekt odniósł sukces, bez konieczności sprawdzania wszystkiego, co popełnili.

Jak powinienem utrzymywać standardy, unikając mikrozarządzania? Czy wystarczy zrobić jakieś diagramy, zaplanować przegląd kodu i mieć zaufanie, że będę w stanie naprawić wszystko, co mogą zepsuć, czy też powinienem pójść drogą TDD i napisać wyraźne testy, które zespół powinien spełnić?

Jon Purdy
źródło
11
Czy istnieje zespół o takich samych poziomach umiejętności?
P.Brian.Mackey
@ P.Brian.Mackey: Mam na myśli coś zupełnie innego.
Jon Purdy
@Jon: Mam nadzieję, że wiesz, w co się pakujesz. Upewnij się, że mają w ofercie trochę „wieprzowiny” od samego początku (!). Mam niejasne wrażenie, że potrzebujesz kogoś z dużym doświadczeniem, jeśli, jak się wydaje, nie umie nawet pisać testów jednostkowych i (!) Nie odkrył, jak to zrobić na własną rękę: prowadzi to myślę, że może przeceniasz ich umiejętności. Nie trzeba dodawać, że przyjęcie większych kompetencji niż to nie jest dobrą techniką zarządzania projektami.
Henrik
@Henrik: Wiem, w co się pakuję, po prostu nie mam dużego doświadczenia w zarządzaniu innymi programistami i chcę uzyskać porady, jak zapewnić sprawne działanie. Mam pełne zaufanie do ich umiejętności i myślę, że ludzie czytają w moim pytaniu o wiele więcej negatywności, niż w rzeczywistości stawiam. Po prostu zajmuję się programowaniem przez ponad pół życia, więc popełniłem już wiele błędów, na które ci faceci z 2-3 letnim doświadczeniem jeszcze się nie spotkali.
Jon Purdy
Czy to dla firmy czy projektu pobocznego?
Marcie

Odpowiedzi:

10

Powinieneś przejrzeć niektóre z ich kodów i pozwolić im się przejrzeć. Nie chodzi o to, że chcesz być policją odpraw, ale chcesz przekazywać informacje zwrotne tak często, jak to możliwe. Bycie recenzentem może wzmocnić ich zrozumienie. Pozwól im również przejrzeć Twój kod. Bądź modelką.

Uwaga dodatkowa: podczas rocznego przeglądu nie powinno być niespodzianek.

JeffO
źródło
2
+1 za „Bądź modelem”. To była największa korzyść, jaką widziałem w recenzjach kodu: uczenie się na zręczności innych ludzi. To i łapanie okazjonalnych wad.
Peter K.
1
Narzędziem do sprawdzania kodu będąc „czyśćcem” jest [ code.google.com/p/gerrit/]
Henrik
9

Przede wszystkim : komunikuj swoje oczekiwania i projekt na tak wiele różnych sposobów, jak to możliwe. Diagramy są dobre dla niektórych; zdefiniowane interfejsy działają dla innych; działa również programowanie w parach; formalne recenzje kodu mogą również pomóc niektórym osobom.

Polecam również korzystanie z automatyzacji w jak największym stopniu:

  • Dostać się z zespołem, aby użyć narzędzia takie jak NDepend lub Resharper jeśli jesteś w świecie .NET. Ulepsz standardowe zasady, jeśli ich nie lubisz.
  • Zautomatyzuj swoje testy tak praktyczne, jak to możliwe.

Trudno jest kłócić się z nieudanym przypadkiem testowym lub narzędziem do automatycznej kontroli, pod warunkiem, że są dobrze skonfigurowane.

Peter K.
źródło
3
Źli programiści prawdopodobnie konfigurują złe przypadki testowe?
JeffO
1
Narzędzia takie jak Resharper są def. schludne, ale na pewno nie są darmowe. Zautomatyzowane testowanie wymaga napisania kodu, który można przetestować, co może stanowić niepraktyczne wymaganie, jeśli poziom umiejętności jest daleki od normy.
P.Brian.Mackey
@Jeff: Nie są złymi programistami, po prostu mamy różne pochodzenie i mam na nich lata. Prawdopodobnie ja i najbardziej doświadczony koleś pisalibyśmy testy, jeśli w ogóle.
Jon Purdy
@Jeff O: Więc zdejmij ich z zespołu.
Peter K.
@ P.Brian.Mackey: W pytaniu nie było specyfikacji bezpłatnych narzędzi. Jeśli kodu nie można przetestować, zdejmij go z zespołu. Spróbuj pokazać im, jak napisać testowalny kod, a jeśli nie wprowadzą żadnych ulepszeń, zdejmij je z zespołu.
Peter K.,
5

Jeśli naprawdę pracujesz z różnymi poziomami umiejętności w tym samym projekcie, będą pewne problemy. Pytanie brzmi, kiedy sobie z nimi poradzisz? Czy zamierzają napisać tak zły kod, że lepiej nie mieć ich pomocy? Czy to spowoduje osobiste napięcie? Czy zamierzasz zakończyć przyjaźnie? Na te pytania nikt nie może odpowiedzieć oprócz ciebie.

Zakładając, że wszyscy pozostaną w zespole, zalecam dzielenie zadań na małe części (większe przechodzą do bardziej wykwalifikowanych kolesi) i niech najbardziej wykwalifikowani programiści dokonają refaktoryzacji, gdy skończysz. Pamiętaj, aby przeprowadzać kontrolę jakości w ciasnych, regularnych odstępach czasu. W każdym razie jest to bardzo zbliżone do tego, co dzieje się w rzeczywistości.

P.Brian.Mackey
źródło
3

W miarę możliwości trzymaj się z dala od chwastów. W każdym zespole, jeśli jesteś liderem, musisz zaoszczędzić pewną część przepustowości na kryzysy i duży obraz. Diagramy są dobre, a standardy kodowania są zawsze rozsądne, ale konfiguracja procesów, w których ludzie sprawdzają się nawzajem, jest jeszcze lepsza (testy krzyżowe, wzajemne oceny, programowanie par). Nie wszyscy w zespole muszą być gwiazdami - zespół razem może zwykle przezwyciężyć wszelkie słabości jednostek.

Zalecam, abyś w jak największym stopniu opierał się pragnieniu, aby powiedzieć ludziom, jakie błędy widzisz w ich kodowaniu - zamiast tego poprowadź ich do zobaczenia go sami. Pozostań częścią wspólnego przeglądu prac programistycznych, ale upewnij się, że nie wnosisz więcej niż inni członkowie. Zamiast tego włóż dodatkowy wysiłek, aby zachęcić ludzi do zobaczenia tego, co widzisz, i podaj wiele wyjaśnień, dlaczego rzeczy, które widzisz, mają znaczenie.

Nie przejmuj się zbytnio nakładaniem się - poza sensownym przerwaniem pracy możesz poprosić członków zespołu, aby zameldowali się między sobą, a następnie po prostu sprawdź, czy nastąpiła komunikacja. Zespół szybko zacznie patrzeć na siebie jako sposób na osiągnięcie konsensusu, a to sprawi, że Twoja praca będzie około 20 razy łatwiejsza - wtedy jedyne, co musisz zrobić, to przełamać remis, gdy główne obszary się nie zgadzają.

Następnie oszczędzaj wysiłek, aby wspólnie patrzeć na zespół. Każda osoba będzie miała niesamowite mocne strony i fascynujące słabości. Idealnie byłoby zacząć rzucać pracę na ludzi, którzy odpowiadają ich mocnym stronom, a jednocześnie dawać im szansę na przepracowanie swoich słabości w sposób, który nie wyłącza produktywności zespołu.

Ostateczna złota gwiazda kierownictwa zespołu uświadamia ludziom swoje słabości w taki sposób, że są zmotywowani i dobrze poinformowani, aby zacząć je naprawiać.

bethlakshmi
źródło
2

Usiądź i przedyskutuj technologie i zestawy narzędzi, na co zgodzą się wszyscy członkowie zespołu. Niektóre osoby mogą być bardziej doświadczone w zakresie uzgodnionych narzędzi niż inne w zespole, więc ci, którzy są bardziej doświadczeni, muszą chcieć i zgadzać się na dzielenie się doświadczeniem i wiedzą z resztą.

Dyskutuj, Zgadzaj się, Zapisz, Modeluj i komunikuj standardy (takie jak konwencja nazewnictwa, kodowanie najlepszych praktyk i struktury folderów).

Wykonuj ciągłe i regularne testy oraz kontrole jakości. Powiadom osobę JAK NAJSZYBCIEJ, gdy zobaczysz niespójności.

Mauris
źródło
2

Chciałem powiedzieć: „zorganizuj to najbardziej doświadczoną osobę w zespole”, ale brzmi to tak, jakbyś był tą osobą.

Jeśli możesz, podziel projekt na dwa poziomy. Warstwa aplikacji / warstwa sterowników jest dobrym podziałem. Utwórz dwie podgrupy w swoim zespole i uczyń jedną osobę w każdej odpowiedzialną za ten poziom. To może działać bardzo dobrze.

Poddaj się temu. Będziesz musiał przejrzeć wszystko, co popełnią, szczególnie wcześnie. Jeśli wszystko idzie płynnie, po prostu rzucasz okiem na kod. Recenzja wcale nie zajmie ci dużo czasu i da ci dużo pewności, że wszystko idzie dobrze. Bardziej prawdopodobne jest, że ktoś nieprawidłowo używa semaforów lub pisze własną wersję funkcji bibliotecznej lub coś w tym rodzaju szaleństwa. Z mojego doświadczenia wynika, że ​​musisz obserwować kod, który jest zapisywany w celu wyeliminowania problemów z kodem w zarodku.

James Crook
źródło
Zgadzam się w części dotyczącej przeglądu kodu. Musisz poprowadzić ich jak najwcześniej.
2

Czego zwykle oczekuje się od lidera technicznego w Twojej firmie? Jestem menedżerem i byłem w tym miejscu kilka razy i zamierzam to zrobić ponownie od tego tygodnia (zatrudnianie nowicjuszy i innych, aby dołączyć do zespołu 20-letnich i 4-letnich doświadczonych osób).

Jestem menedżerem i mogę być technicznym liderem (w ciągu ostatnich kilku lat pominąłem tę ostatnią rolę, aby zwiększyć przywództwo w zespole. W każdym razie kilka myśli:

  • Oceń umiejętności i słabości całego zespołu.
  • Stwórz plan rozwoju - Podczas gdy twoja uwaga skupia się na rozwijaniu najsłabszych członków, naprawdę powinieneś skupić się na rozwijaniu każdego z osobna i jako zespołu.
  • Przekaż ten plan i ustal oczekiwania wszystkich.
  • Rozpowszechnij naukę i walidację w zespole. Podczas gdy ty, jako przywódca, sam posiadam lionshare pracy, rozdzielenie pracy pomoże twoim starszym członkom zespołu stać się liderami.
  • Utwórz regularną pętlę sprzężenia zwrotnego. Spotkaj się z członkami zespołu, aby ocenić postępy i przekazać opinie.
  • W razie potrzeby dostosuj plan, aby zapewnić sukces.
  • Jeśli ktoś nie ćwiczy i nawet przy rozsądnej pomocy nie będzie gotowy go wypchnąć. Jest to skomplikowane, ale jeśli masz ustalony plan, oczekiwania i informacje zwrotne, będziesz w lepszej sytuacji.
  • Miej oko na morale zespołu. Tego rodzaju sytuacja może zrobić wspaniałe rzeczy, aby powiększyć zespół lub go rozerwać. Twoje umiejętności przywódcze i inwestycja w zespół będą miały długą drogę do ustalenia wyniku.
Jim Rush
źródło
1

Spróbuj przyjrzeć się definicji „architektury oprogramowania”. Tworzenie osobno rozwijalnych modułów jest jednym z głównych powodów przeprowadzania wstępnego projektowania i analiz. Wiem, że wykonywanie tego rodzaju pracy nie jest w porządku, ale działa we wszystkich przypadkach, w przeciwieństwie do niektórych przypadków, które zalecają nowsze metody programistyczne.

Maczać
źródło
1

Jako najbardziej doświadczony programista w zespole, oczekiwałbym od ciężkiego coachingu .

Pozwól zespołowi przypisać sobie pracę za pomocą kanban , a następnie poświęć cały dzień na programowanie w parach z każdym z nich.

Kiedy zobaczysz zły nawyk lub coś, czego powinni (wszyscy) być świadomi, zatrzymaj wszystko i narysuj na tablicy.

Po kilku tygodniach będziesz w stanie zwolnić intensywny trening, ponieważ ogólne umiejętności zespołu zbliżą się do twoich.


źródło
1

Jest kilka różnych list, które chciałbym przejrzeć z twojej pozycji:

  1. Jak dobrze znam ten zespół. Czy znasz mocne i słabe strony każdego w zespole? Czy wiesz, jak najlepiej wykorzystać każdą osobę? Czy wiesz, jak podzielić pracę w sposób względnie sprawiedliwy dla wszystkich? Tego rodzaju pytania są czymś, co należy zadać i zrozumieć, że z czasem na tych listach mogą wystąpić zmiany, ponieważ niektóre osoby mogą rozwinąć pewne umiejętności, które mogą zmienić sposób ich postrzegania. Kiedy zostałeś powołany, czy były jakieś oczekiwania, które niektórzy członkowie zespołu mieli względem ciebie? To ostatnie pytanie może być trudne do nakłonienia do uczciwej odpowiedzi, ale może bardzo pomóc, jeśli można je ujawnić i omówić w znaczący sposób bez wywoływania urazy lub urazy, co może być dość łatwe, jeśli omawiane tematy są dla niektórych bardzo osobiste ludzie. Nie próbuj uzyskać osobistych opinii na spotkaniu grupowym,

  2. Jak dobrze się znam. Z jakich elementów swojego pochodzenia korzystasz tutaj w celu uzyskania uprawnień technicznych? Jakie mocne i słabe strony wnosisz do zespołu? Czy spodziewasz się regularnie wchodzić do okopów? Czy znasz praktyki, które chciałbyś wprowadzić w tym zespole, aby pomóc im kierować? Czy są jakieś znaki ostrzegawcze, które pamiętasz z przeszłych doświadczeń, które mogą być przydatne, aby sprawdzić, czy którekolwiek z nich zaczynają pojawiać się w pracy, którą wykonuje zespół.

W pewnym sensie wszystko sprowadza się do komunikacji. Powodzenia!

JB King
źródło
0

mieć regularną (cotygodniową) prezentację jakiegoś tematu technicznego i obracać go wokół grupy. W ten sposób wszyscy się czegoś nauczą. I niech obecni są również młodsi członkowie, nie ma lepszego sposobu, aby naprawdę coś zrozumieć, niż przez nauczanie tego. Być może będziesz musiał pomóc im wybrać tematy.

Niektóre instruktaże dotyczące sposobu prowadzenia rozmowy mogą być przydatne dla wszystkich. Miałem profesora na studiach, który zrobił to dla mnie i było to bardzo pomocne.

Zachary K.
źródło