Jaki jest najlepszy sposób na skalowanie i dzielenie sprawnego zespołu tworzącego aplikację internetową?

14

Niedawno dołączyłem do firmy, w której pracuję jako mistrz scrum w zwinnym projekcie deweloperskim budującym aplikację internetową.

Zespół ma być wkrótce maksymalnym rozmiarem dla zwinnego zespołu (oczekuje 9 w przyszłym tygodniu). Mówiliśmy o potencjalnym podzieleniu zespołu na dwa zespoły, nie tyle, aby skrócić awanse (które nie są w tej chwili nadmierne), ale by powstrzymać ludzi przed całkowitym znudzeniem się podczas sesji planowania sprintu (które znowu nie są zbyt długie).

Projekt składa się z dwóch bardzo wyraźnych warstw - zaawansowanego technicznego zaplecza programistycznego (na przykład bardzo skomplikowanego) oraz projektowania / kompilacji / integracji interfejsu użytkownika. Wygląda na to, że gdy faceci z zaplecza mówią o kwestiach technicznych, faceci z interfejsu użytkownika dzielą się i na odwrót. Wydaje się, że to logiczny sposób na podzielenie zespołu, choćby po to, aby zaoszczędzić czas, ale mam jedno poważne zastrzeżenie, że wszystko, co naprawdę mogę zrobić, to ograniczenie współpracy i dzielenia się wiedzą. Dwie drużyny po prostu nie będą miały dobrego pojęcia o tym, co buduje reszta zespołu.

Czy ktoś ma jakieś doświadczenie w radzeniu sobie z czymś takim?

Ani Møller
źródło
Czy zespoły mają liderów?
superM
Posiadanie wielu zespołów to kompromis. Duży zespół (nawet większy niż 9) może być w porządku, w porównaniu do narzutu z miażdżącymi młynami itp. To wymaga tylko nieco więcej dyscypliny w stójkach
Dave Hillier
Tak, oboje musieliby mieć liderów. Obecnie jednak jedna z drużyn by tego nie zrobiła.
Ani Møller,

Odpowiedzi:

8

To niefortunne, że użytkownicy interfejsu nie dbają o szczegóły skomplikowanej pracy backendu. To brzmi bardziej jak temat dyskusji retrospektywnej. Podział drużyny według dyscypliny stanowiłby niebezpieczny precedens, jak szybko minie, zanim ludzie wymagań zaczną wyznaczać strefę i nie przejmować się tym, co robią faceci UI i prosić o własny zespół.

Zawsze opowiadałem się za pionowymi wycinkami dla moich zespołów. Interfejs użytkownika powinien słuchać tego, co mają do powiedzenia ludzie techniczni, ponieważ są to ludzie, którzy mogą pomóc w ułatwieniu im pracy (Och, ten widget sprawi, że zrobisz to, co jeśli zamiast tego użyjemy tego widgetu).

Osobiście skupiłbym się na kwestii podziału strefy przez facetów z interfejsu użytkownika, a następnie, gdy ta dysfunkcja zostanie rozwiązana, przedyskutuj, jak najlepiej podzielić zespoły. Nie próbuję oczerniać facetów z interfejsu, być może technicy mogliby zrobić więcej, aby ich dyskusje były bardziej odpowiednie dla facetów z interfejsu.

Jak powiedzieli inni, zespół powinien mieć możliwość samoorganizacji w celu ustalenia nowej struktury. Wcześniejsze doświadczenia nauczyły mnie, że samoorganizacja może naprawdę działać tylko wtedy, gdy wszyscy troszczą się o zespół, a nie o własną dyscyplinę lub zainteresowania.

Twoje zdrowie!

Klasa abstrakcyjna
źródło
„Zawsze opowiadałem się za pionowymi wycinkami dla moich zespołów” +1, ja też! Zawsze możesz mieć ekspertów UI lub DB do dopracowania tych sekcji do perfekcji, ale ogólnie rzecz biorąc, pionowy rozwój wycinków jest zawsze moim preferowanym sposobem.
ozz
7

Dobrym pomysłem jest podzielenie niezależnych części zespołu na nowe zespoły. W większym projekcie programiści nie mogą dokładnie zapoznać się z całym projektem, więc podział jest nadal formalny lub nieformalny.

Każdy z nowych zespołów powinien mieć lidera / kierownika technicznego, który ma solidną wiedzę na temat zakresu swojego zespołu i jest zaznajomiony z pracą innych zespołów.

Następnie każda drużyna może mieć osobne spotkania scrumowe, a liderzy innych zespołów mogą być obecni. W ten sposób zmniejszysz liczbę „znudzonych” ludzi, ale nadal zespoły będą wiedzieć, nad czym pracują inni i będą w stanie skutecznie współpracować.

Współpraca staje się ważniejsza, jeśli zakresy zespołów się przecinają lub jeden zespół zależy od drugiego. Ale znowu nie ma potrzeby obecności całego zespołu _ lider zespołu może koordynować współpracę.

superM
źródło
5

Kluczowym aspektem Scrum jest samoorganizacja .

Sugeruję, aby omówić to pytanie z zespołem i pozwolić im je rozwiązać.

Twoje obawy są uzasadnione, ale pamiętaj, że jako Scrum Master, Twoim zadaniem jest trenowanie i ułatwianie. Zapytaj ich, jak rozwiążą te problemy. Będą właścicielami rozwiązań i sprawią, że będzie działać.

Dodałbym: ogólnie, zespoły interdyscyplinarne są do zrobienia.

andy256
źródło
Tak sugerują niektórzy członkowie zespołu, ale nie jestem pewien, czy jest to najlepsza rzecz do zrobienia. Stąd pytanie! Myślę, że sprowadza się to do tego, że faceci z interfejsu nie dbają o szczegóły skomplikowanej pracy backendu.
Ani Møller,
4

Przy podziale zespołów zawsze staram się pamiętać o tym, że zespół musi być w stanie zapewnić wartość dla klienta. W twoim przypadku byłoby to posiadanie zarówno programistów backendu, jak i frontendów w zespole.

użytkownik99561
źródło
1
W dużych projektach trudno jest jednemu zespołowi pracować nad wszystkimi aspektami produktu i zwykle nie jest to konieczne. Nie zgodziłbym się więc, że każdy zespół powinien być w stanie wnieść natychmiastową wartość dla klienta - klienci nie są zainteresowani interfejsem użytkownika ani zapleczem, potrzebują całego projektu. Z drugiej strony interfejs użytkownika i backend są częściami produktu, a zespoły pracujące nad nimi wnoszą wartość do produktu.
superM
2
Zdecydowanie się nie zgadzamy. Pytanie dotyczyło zwinnego zespołu. Dla mnie wartość biznesowa dla użytkownika działającego backendu bez frontendu wynosi 0,0 To samo dotyczy działającego frontendu bez backendu. A co zaprezentują poszczególne zespoły w przeglądzie sprintu? Ponadto trudno będzie wyrównać pracę obu zespołów.
user99561,
3
  1. Jak daleko znajduje się frontend od backendu? Jak można się spodziewać, podział jest dobrą radą tylko wtedy, gdy odległość jest zbyt duża.

    • Jeśli backend mówi o schemacie bazy danych, nie jest to zbyt daleko . Zarówno front-end, jak i backend muszą wysłuchać dyskusji na temat schematu bazy danych.

    • Jeśli backend mówi o shardingu, pamięciach podręcznych, opóźnieniu dysku itp., To jest to trochę za daleko (gdzie backend koncentruje się na mechanicznej sympatii i optymalizacji, podczas gdy front-end skupia się na ludzkiej estetyce).

  2. Czy istnieje stabilny i jednoznaczny interfejs programowania między front-endem a backendem?

    • Przez stabilny i jednoznaczny oznacza to, że użytkownicy tego interfejsu programistycznego (programiści front-end) nie będą ulegać zmianom i nie będą musieli czytać ścian tekstu, aby nauczyć się go poprawnie używać.

    • Zespół zaplecza musi zapewnić dobry interfejs API i próbną implementację wcześnie, a dopiero potem rozpocząć prawdziwy rozwój.

    • Nie oznacza to, że interfejs API powinien być ustawiony na kamieniu. To tylko złagodzenie konsekwencji podziału zespołu na dwie części.

  3. Dlaczego tak wiele zwinnych artykułów zaleca pionowe plastry? Oto kilka podstawowych informacji:

    • Większość zwinnych artykułów faktycznie zaleca unikanie pracy zaplecza z perspektywy kosztów.

    • Nie zapominaj również, że ułamek artykułów zwinnych miało ukryte uprzedzenie do firm rozpoczynających działalność.

    • I nie zapominaj o trudnej rzeczywistości marketingu - większość klientów płaci tylko za interfejsy.

    • Praca zaplecza bywa kosztowna i ma powolną wypłatę. O ile firma nie została już założona na dłuższą metę i generuje przyzwoity zysk, lepiej „outsourcować” backend, pozostając przy gotowej technologii i bibliotekach open source.

    • Większość zwinnych artykułów zaleca również implementację interfejsu, aby mógł przetrwać przełącznik zaplecza. Ta rada idzie w parze z poprzednią: jeśli gotowa technologia nie spełnia wszystkich wymagań, wypróbuj inną.

  4. Praktyki, które mogą złagodzić złe konsekwencje podziału zespołu

    • Stabilne zaplecze
    • Stabilny interfejs API
    • Back-end niskiej częstotliwości defektów
      • Powód: aby uniknąć frustracji
      • Jak: testy jednostkowe
      • Nie oznacza: wydajności ani optymalizacji; po prostu musi być funkcjonalnie poprawny.
    • Ciągła integracja
    • Przejrzystość w komunikacji, postępach i podejmowaniu decyzji
    • Zachęcaj do nieformalnych dyskusji między dwoma zespołami
    • Zachęć członków zespołu (tych, którzy nie dzielą strefy) na udział w spotkaniach drugiego zespołu.
    • Organizuj okazjonalne wspólne spotkania i wspólne retrospekcje
    • Inne działania budujące zespół
rwong
źródło
0

Podobnie jak inne, zdecydowanie sugerowałbym wybór pionowych przekrojów. Są one czasami określane jako „Zespoły funkcji”. Poleciłbym przeczytać o zaletach / wadach na stronie Scaled Agile Framework: http://scaledagileframework.com/scaled-agile-framework/team/features-components/

Na początku, gdy dokonujesz podziału, właściciel produktu i SDF Master mogą być w stanie obsłużyć zaległości wydania dla obu zespołów, a także indywidualne zaległości dla każdego zespołu funkcji. Jednak w miarę rozwoju prawdopodobnie będziesz musiał wdrożyć zaległości funkcji produktu, które następnie będą przekazywane do wielu zwinnych wydań zespołów. Po przejściu na ten poziom prawdopodobnie będziesz potrzebować oddzielnego zespołu zarządzającego zaległością funkcji, a następnie sprowadzającego te funkcje do poszczególnych zespołów w celu ich wdrożenia. W tej strukturze możesz mieć coś takiego:

  1. Zwinny zespół 1: SM, PO, zespół wielofunkcyjny. Ma własne zaległości zespołu dla swoich historii.
  2. Agile Team 2: SM, PO, zespół wielofunkcyjny. Ma własne zaległości zespołu dla swoich historii.
  3. Zespół Zarządzania Programem: Product Manager, Release Managers, Enterprise Architects. Ma własne zaległości programowe związane z eposami wyższego poziomu oraz funkcje, które zostaną zorganizowane, przeanalizowane, a następnie przekazane zespołom.

Witryna SAFe zawiera wiele ciekawych rzeczy do organizowania większych zespołów, a niektóre mogą być dla Ciebie pomocne, gdy przejdziesz do większej liczby zespołów.

Jay S.
źródło