Gdzie uczenie się nowych umiejętności pasuje do Agile?

32

Zaczynam od firmy zajmującej się oprogramowaniem finansowym i właśnie w tym czasie badam zasady i metody Agile, a jednym z aspektów rozwoju, o którym jeszcze nie wspomniałem, jest dopasowanie ciągłej potrzeby programistów do uczenia się nowych umiejętności i technologii. proces.

Przed pracą nad oprogramowaniem finansowym przez ostatnie kilka lat spędziłem większość swojej kariery jako programista grafiki 3D pracujący nad grami wideo oraz GIS i oprogramowaniem biometrycznym i zawsze po prostu musiałem zejść z urwiska do rzeczy i dowiedzieć się, jak to zrobić latać. Chociaż zawsze mi się to udawało, jestem pewien, że nie będę żył tak długo, jak bym to zrobił, gdybym nie zabił się, pracując tyle razy po 100 godzin tygodniowo.

Teraz, gdy zakładam firmę programistyczną, która nie ma tak bardzo innowacyjnych wymagań w zakresie grafiki 3D, chcę przyjąć bardziej holistyczne podejście do rozwoju.

Może zwinny po prostu tego nie rozwiązuje, ale jeśli tak, to nie znalazłem gdzie i doceniłbym wszelką wiedzę, doświadczenie lub doświadczenie, które ktoś ma z tym.

Anton Bursch
źródło
5
Zobacz norvig.com/21-days.html
Basile Starynkevitch
1
Nauka oraz badania i rozwój mogą być uwzględnione w planowaniu sprintu, pośrednio lub bezpośrednio. Dobrze jest również, aby proces uczenia się nie dawał łatwo mierzalnych rezultatów (np. Nie jest częścią celu sprintu). Zobacz Incrementalism: pchiusano.github.io/2017-05-17/incrementalism.html „Prawdziwy postęp na początku nie wygląda jak postęp”.
KolA
1
Z mojego doświadczenia wynika, że ​​najprostszym rozwiązaniem jest odpowiednie dostosowanie obciążenia w sprincie, jeśli masz 2 dni wolne na szkolenie, podobnie jak na wakacjach. Niektóre organizacje dodają do sprintu sztuczne historie użytkowników, ale osobiście nie widzę żadnych korzyści.
Simon

Odpowiedzi:

43

To naprawdę nie ma wiele wspólnego z Agile, ani nawet z inżynierią oprogramowania. Dotyczy to po prostu każdej firmy w dowolnym biznesie: musisz przeznaczyć czas na szkolenie. Kropka.

Agile ma ideę „trwałego tempa”, co oznacza, że ​​w żadnym momencie zespół nie powinien pracować ciężej niż mógł wytrzymać przez czas nieokreślony. Tj. Brak „czasu crunch”. Trzeba to również uszanować poprzez szkolenie. Tak więc, zrównoważone tempo dla twojego zespołu to „nie więcej niż 5 godzin bez przerwy, nie więcej niż 9 godzin dziennie, nie więcej niż 40 godzin tygodniowo”, a ty chcesz zapewnić 10% czasu na trening, wtedy musisz zaplanować swoje projekty na 36 godzin tygodni.

Ale znowu, to nie ma nic wspólnego z Agile, to tylko zdrowy rozsądek i matematyka w szkole podstawowej.

Osobiście uważam, że coś w rodzaju zwolnienia na pół godziny dziennie, pół dnia na tydzień i jeden pełny tydzień na kwartał pozwoliłoby zespołowi na zdobycie kawałków wiedzy różnej wielkości szybko i w stałym tempie.

Istnieją również pewne zwinne praktyki, które pomagają w transferze wiedzy, tj. Niwelują różnice w poziomie wiedzy między zespołami:

  • codzienne retrospektywy
  • retrospektywy na sprint
  • retrospektywy na projekt
  • programowanie par
  • parowanie ping-ponga (zamiana sterownika i nawigatora po każdym etapie cyklu refaktora czerwono-zielonego)
  • rozwiązane parowanie (brak ustalonych par, pary są przypisywane losowo i zmieniane każdego ranka i lunchu)
  • nieparzysta liczba członków zespołu (jeśli programujesz w parach, jeden członek zespołu może się uczyć)
  • programowanie mobów (wariant programowania parami, w którym cały zespół używa jednego komputera i ekranu, wyznaczony członek zespołu jest po prostu „maszynistą”, a inni mówią mu, co pisać)
  • rozwiązłe drużyny (programiści są losowo przydzielani do zespołów każdego dnia / każdego sprintu)

Programowanie parami i programowanie mobów zapewnia nie tylko ciągły przegląd kodu, ale także ciągłe dzielenie się wiedzą. Parowanie ping-ponga zapobiega „zaczepianiu się” klawiatury przez jedną osobę. Rozwiązane parowanie rozpowszechnia wiedzę w całym zespole, rozwiązłe zespoły rozpowszechniają wiedzę w całej firmie i zapewniają, że każdy programista zna każdy projekt i każdą bazę kodów; doprowadzi to również do wysokiego stopnia standaryzacji w bazie danych. Podczas gdy retrospektywy koncentrują się przede wszystkim na przekazywaniu informacji zwrotnych na temat procesu opracowywania i odpowiedniego dostosowywania, można je również wykorzystać do przekazania rzadkiego problemu i sposobu jego rozwiązania.

Nie trzeba dodawać, że pracodawca powinien zapewnić obszerną bibliotekę, płatne subskrypcje ACM, Springer, IEEE itp., A także ciche pokoje do nauki w i większe pokoje do nauki. Wiele tablic i tablic flipboard, a także projektory na całym świecie są oczywiście sensowne, nie tylko do szkolenia.

Jörg W Mittag
źródło
5
Wierzę, że to wszystko prawda. Podobnie uczynił nasz mistrz scrum, który dał nam 5 godzin dni. Jira nie rozumiała, co to był 5-godzinny dzień i dlatego nasze planowanie stało się koszmarem. Dowiedz się, co potrafią Twoje zwinne narzędzia, zanim spróbujesz ich użyć do egzekwowania tych całkowicie zdrowych rozsądków.
candied_orange
6
„programowanie mobów” brzmi naprawdę męcząco.
user2818782
4
@ user2818782: To trochę zabawne, podobnie jak prowadzenie trzynożnego wyścigu może być zabawne, jeśli nie traktujesz go zbyt poważnie i nie próbujesz robić tego zbyt długo. Po prostu traktuj to jako głupie ćwiczenie budowania zespołu / dzielenia się wiedzą i nie oczekuj, że wytworzy dużo (lub jakikolwiek) faktyczny działający kod.
Ilmari Karonen
1
@IlmariKaronen: AFAIK, Seattle Ruby Brigade ćwiczy programowanie mobów od ponad dziesięciu lat i konsekwentnie produkuje najbardziej użyteczny, najbardziej zaawansowany, najczystszy, najpiękniejszy i najszybszy kod Ruby tam w zadziwiającym tempie. To oczywiście tylko anegdotyczne dowody, aw rzeczywistości nawet w najlepszym razie anegdoty z drugiej ręki. Ale to co najmniej jeden przypadek udanego wdrożenia. Jest jeszcze kilka referencji na stronie Mob Programming osób, które wypróbowały go i przekonały się, że działa dla nich dobrze.
Jörg W Mittag
@candied_orange naprawdę - w Jira jest dosłownie ustawienie, które mówi, jak długi jest dzień?
jk.
8

Zgadzam się z większością tego, co powiedział Jörg W Mittag , ale nie ze stwierdzeniem, że „to naprawdę nie ma wiele wspólnego z Agile”. Szereg technik zwinnych wspiera uczenie się i rozwój osób i zespołów.

Metody zwinne zwykle oparte są na przyrostach lub ciągłym przepływie. W obu przypadkach praca jest uporządkowana na podstawie takich czynników, jak priorytet, wartość i zależności. Ponieważ nacisk kładziony jest na pracę krótkoterminową, zespół może zidentyfikować wiedzę potrzebną do jej dostarczenia, a jeśli brak wiedzy stanowi problem, zaplanować jej zdobycie na czas. Widoczność i przejrzystość są również kluczowymi aspektami różnych metod zwinnych, dzięki czemu interesariusze mogą zobaczyć, nad czym pracuje zespół i jak pracują, aby poprawić swoje możliwości dostarczania wartości. Gdy konieczne jest intensywne uczenie się, można je zaplanować w najbliższej przyszłości lub w bieżącej iteracji.

Kiedy osoby w zespole zdobędą wiedzę, istnieją techniki wokół parowania i mobbingu. Programowanie w parach jest kluczową praktyką w programowaniu ekstremalnym, która została zastosowana również do innych metod i ma na celu, między innymi, ułatwienie uczenia się. Mobbing stosuje to do więcej niż dwóch osób. Ścisła współpraca i wszechstronność zespołów oznacza, że ​​nie ma silosów, a informacje te są rozpowszechniane.

Nawet ze zdolnością planowania i wykonywania nauki tego, co jest niezbędne do natychmiastowej pracy, posiadanie kompetentnych członków zespołu jest bardzo ważne. Posiadanie ludzi z pewnym poziomem istniejącej wiedzy na temat narzędzi, technologii i dziedziny pozwoli im uzyskać więcej informacji podczas podejmowania zadań edukacyjnych i będzie bardziej skuteczny przy rozpowszechnianiu wiedzy wśród innych członków zespołu.

Thomas Owens
źródło
2
Pozytywne, dziękuję za wypełnienie pustych miejsc. Rzeczywiście, krótkie pętle informacji zwrotnych ułatwiają ukierunkowanie niezbędnych umiejętności, a przejrzystość pozwala łatwo wykazać interesariuszom zarówno potrzeby, jak i korzyści.
Jörg W Mittag
5

Zaplanuj zadanie koncepcyjne dla sprintu, w którym chcesz przeznaczyć czas na naukę umiejętności. Skoncentruj się na czymś bardzo konkretnym, np. Na uczeniu się, jak stworzyć dostępną tabelę HTML. Kontynuuj planowanie zadań koncepcyjnych, dopóki nie nauczysz się umiejętności potrzebnych do stworzenia opowieści. Daj każdemu zadaniu POC kilka punktów historii i termin, abyś mógł odpowiednio zakreślić czas i pokazać postęp na koniec sprintu.

Co jeśli historia powinna mieć tylko 5 punktów dla doświadczonego programisty? Może zajmuje 3-4 zadania po 8 punktów każdy. Po tych zadaniach POC historia może nadal wynosić tylko 5 punktów, ale przynajmniej poświęcisz czas na nauczenie się nowych umiejętności, aby opowieść o 5 punktach nie wynosiła 40 punktów - nawet jeśli historia i zadania POC sumują się do 40 punktów.

Greg Burghardt
źródło
4

Scrum ma pomysł na „skok”. Jeśli zespół korzysta z nowej technologii lub możliwości, skok jest historią, która zawiera tę pracę. Tak więc, podczas gdy historia zwinna jest częścią funkcjonalności skoncentrowaną na użytkowniku, efektem szczytowym jest dokumentacja tego, czego się nauczyłem, i podział pracy na wdrożenie w praktyce w prawdziwej aplikacji.

W praktyce przekonałem się, że jest to dobry sposób na zarządzanie szkoleniami na małą skalę - wystarczającą do przyspieszenia pracy programistów z nowym systemem lub strukturą, przy jednoczesnym zapewnieniu odpowiedzialności za harmonogram.

Dan Monego
źródło
3

Nie widziałem tego w innych odpowiedziach, więc chciałem dodać, że wiele organizacji zakłada gildie, rozdziały lub centra doskonałości wokół obszarów umiejętności. Mogą to być szerokie tematy, takie jak technologia lub konkretne, takie jak React Native Development. Wszystko zależy od tego, czy w Twojej firmie istnieje zainteresowanie udziałem.

Niezależnie od tego grupy te często mają za zadanie pomagać ludziom w rozwoju zawodowym. Stwarza to oddzielną przestrzeń poza pracą, aby wzmocnić i poszerzyć umiejętności zarówno dla osób, które wykorzystują te umiejętności na co dzień, jak i dla osób spoza tej dyscypliny, które są zainteresowane treningiem krzyżowym. Nie jest to jedyne rozwiązanie tego problemu, ale wydaje się, że staje się coraz bardziej powszechne.

Daniel
źródło
1

Niektóre inne już wspomniały o aspektach, ale chciałem tylko podzielić się tym, jak pasuję do rozwoju osobistego w zwinnym środowisku.

1. Ciągły rozwój

Jest to najłatwiejszy sposób, zmniejszaj swoją zdolność podczas każdego sprintu, aż będziesz mieć wystarczająco dużo czasu na ciągły rozwój. Trudność polega zazwyczaj na trzymaniu się twojego planu, a także robieniu prac rozwojowych, jeśli jest jeszcze kilka innych zadań do wykonania. Jeśli masz nagłe wypadki, możesz od czasu do czasu poświęcić, ale inaczej nie.

Ponieważ zmniejszyłeś swoją wydajność, wszystko, co robisz w tej kategorii, jest nieco poza bezpośrednią troską innych członków zespołu i prawdopodobnie nie mają oni zbyt wiele powodów, aby się tym martwić lub zaktualizować planowanie konkretnie w każdym sprincie.

2. Większe wysiłki podczas sprintu

Odkryłem, że jeśli zaplanowałeś coś o większym wpływie (np. 2-dniowy trening podczas sprintu), powinieneś zaktualizować sprint, aby to odzwierciedlić. Nie jestem pewien, jakie jest teoretyczne rozwiązanie tego problemu, ale często widziałem, że ludzie po prostu umieszczają zadanie szkoleniowe na tablicy, aby mieć pewność, że ktoś jest zajęty tym.

Alternatywnie możesz skorygować wydajność sprintu dla konkretnego sprintu, ale jeśli ludzie nie przyjrzą się bardzo dokładnie twojej mierzonej wydajności / wydajności, trzymałbym się z dala od tego. Szczególnie w świeżym zespole stabilność jest prawdopodobnie cenniejsza niż dokładność.

Dennis Jaheruddin
źródło
1

Agile to zbiór filozofii, spójrz na manifest, to jest WSZYSTKO Agile, więc kiedy powiesz, w jaki sposób Agile może rozwiązać moje problemy, polecam dowiedzieć się (dużo) więcej o Agile. Weźmy konkretną implementację Agile: SCRUM. W SCRUM mamy koncepcje sprintu i skoków. Dzięki tym dwóm artefaktom możliwe jest stworzenie budżetu na naukę.

Jeśli spojrzysz na sprint jako wykres kołowy, możesz podzielić priorytety na podstawie tematu, jednym z takich tematów może być ... nauka nowych umiejętności!

Kolec to zadanie badawcze na sprincie, które polega na ocenie wykonalności czegoś zwykle poprzez naukę.

Wreszcie, wciąż zajmujesz się tym, co robisz, i możesz nauczyć się, GDY robiąc cokolwiek, nad czym pracujesz, w którym momencie możesz spróbować zwiększyć liczbę punktów / zdolności, aby poradzić sobie z wyzwaniem technicznym.

RandomUs1r
źródło
1

Cytując poza samym Manifestem Zwinnym :

Osoby i interakcje między procesami i narzędziami
Oprogramowanie robocze nad obszerną dokumentacją
Współpraca z klientami nad negocjacjami umowy
Reagowanie na zmianę w związku z planem

Nacisk należy do mnie, podkreślając części, które prawdopodobnie najbardziej dotyczą ciebie.

Zasadniczo dobrze wyszkoleni zwinni programiści potrafią znacznie lepiej reagować na zmieniające się środowiska niż ci, którzy pozwolą na skamienianie ich umiejętności.

Jeśli mogę dodać własną definicję zwinności, możemy również włączyć do oferty „współpracę z klientem”. Uważam, że najlepszą definicją zwinności jest ta oparta na idei zwinności - jeśli klient (lub środowisko) zmieni się radykalnie, jak dobrze sobie radzisz? Jeśli wspierasz środowisko współpracy z klientami, będą oni zainteresowani Twoim zespołem, wiedząc, co robią.

Cort Ammon - Przywróć Monikę
źródło