Showing posts with label agile. Show all posts
Showing posts with label agile. Show all posts

Wednesday, January 30, 2019

Programiści NIE mają problemu z komunikacją

Taka rozkminka.

Jakieś 17 lat temu dałem sobie wmówić, że programiści mają problem z komunikacją i powinni się szczególnie reformować w tym zakresie. Ostatnimi czasy pewne wydarzenie rzuciło mi nieco inne światło na tę kwestię, a było to tak...

Prowadziłem rozmowę z jednym programistą, który jak tylko mógł bronił się przed zesłaniem na szkolenie z komunikacji. Uparcie twierdził, że on nie potrafi się komunikować, nigdy nie potrafił, nie chce i nie będzie.

No, nie zmuszam - pomyślałem i już miałem zakończyć grilowanie biedaka, gdy moją uwagę przykuła pewna rzecz - obrączka na palcu.
- Masz żonę? - zapytałem
- Mam.
- Hmmm, ale to siłą ją zaciągnąłeś przed ołtarz? Porwałeś z domu?

Okazało się, że luba mojego rozmówcy dobrowolnie i bez żadnego przymusu dała się namówić na zamążpójście. Zdziwiło mnie to, po tym jak odmalował swoje kompetencje komunikacyjne.

- A macie dzieci, jeśli wolno spytać...?
- Mamy. Dwie córki.


I znów zdziwienie. Wyobraź sobie, że ten programista nie tylko rozmawia ze swoimi córkami, ale i bierze czynny i aktywny udział w ich wychowaniu.

Nie wiem jak Tobie, ale mnie po tym dialogu wszystko się przestało kleić. No, do cholery jeśli ktoś potrafi przekonać drugą osobę do zawarcia formalnego związku, to chyba potrafi się komunikować, nie?

Poza skończoną liczbą przypadków szczególnych, jeśli inżynier żyje w związku albo utrzymuje kontakty z rodziną, znajomymi, czy chociażby wspólnotą mieszkaniową, to spokojnie można założyć, że posiada podstawowy set kompetencji społecznych, które zapewniają mu przetrwanie.

Tak więc, ten cudowny kontrprzykład na zawsze pogrzebał tezę, że programiści nie potrafią się komunikować. O co więc chodzi z tą łatką, którą się nam przykleja? Otóż przyczyny leżą zupełnie gdzie indziej.

Uporządkowanie i praca głęboka

Programiści preferują pracę według określonego porządku. Wszystko to, co zaburza ten porządek jest postrzegane negatywnie.

Praca wykonywana przez inżynierów ma najczęściej charakter głęboki (chodzi o naturę rzeczy, nie o ocenę tej pracy). Oznacza to, że wymaga ona operowania dużą ilością szczegółów, dużego skupienia oraz skrupulatności.

Można zaryzykować stwierdzenie, że programowanie to nadawanie pewnego porządku danym, które są nieuporządkowane.

Odcięcie się od bodźców zewnętrznych sprzyja takiej pracy. Rozpraszacze i wrzutki z boku ją zaburzają. Łamanie porządku pracy jest odbierane jako bałagan. Powoduje też nieprzyjemne doznania w ciele. Serio!

Lejek sprzedażowy

Programiści są umiejscowieni niemal na samym końcu lejka sprzedażowego. Natomiast biznes jest niemal na samym początku tego lejka.

Aby do programistów trafił jeden temat do realizacji, po stronie biznesowej należy "obrobić" tych tematów z pięćset. Z tego powodu w biznesie czas upływa subiektywnie szybciej niż w IT - więcej się dzieje. W IT rozdłubujemy jedną rzecz do ziarnistości atomu, bo tak trzeba, aby ją porządnie zrobić.

Coś niespodziewanego

- O w mordeeeee! Nie przeczytaliśmy zapytania do końca! Zaoferowaliśmy coś, czego nie mamy!

Nie ma co się czarować, gdy się dużo dzieje, takie błędy się zdarzają. Będąc na górze lejka, biznes ma dużą ekspozycję na tego typu błędy. Niestety będąc na dole lejka, IT ma z takich błędów za***te koszty.

Bounded Context

Gdy pierwszy raz wybrałem się do mechanika z moim Suzuki Maruti '92, usłyszałem "bla, bla, blaa, osiemset trzydzieści", gdzie Maruti kosztował 1,3k.

Gdy grupa ludzi pracuje razem, zaczyna wykształcać się lokalna gwara branżowa. Upraszcza ona komunikację w grupie, utrudnia poza grupą.

Wnioski praktyczne

No, dzięks, że wytrwałeś aż do tego momentu, bo wnioski ww. refleksji są dość ciekawe:

  1. Trudności komunikacyjne na lini BIZ-IT nie wynikają z tego, że ktoś (IT) jest mniej usklilowany miękko. Wynikają przede wszystkim z "architektury organizacyjnej", w której ludzie zostali umieszczeni
  2. Analizowaną w poście "architekturę organizacyjną" można nazwać "klient-usługodawca". Jak długo będziemy ustawiać ludzi w relacji klient-usługodawca tak długo będą występować problemy komunikacyjne. I choćbyśmy ludzi przetrenowali miękko na wszystkie strony - nic to nie da. Problemy komunikacyjne są wpisane w relację klient-usługodawca, a nie w naturę poszczególnych ludzi
  3. Z programistami jest wszystko w porządku - ich umiejętności miękkie są w normie. Zapewniam, że gdy programista idzie do mechanika samochodowego doświadcza tych samych trudności komunikacyjnych co osoba z biznesu odwiedzająca programistę
  4. Należy zmienić priorytety. Zamiast wałkować 101 technikę udzielania feedbacku, należy reorganizować struktury współpracy tak, aby pozbyć się relacji klient-usługodawca
  5. work in progress

Friday, December 28, 2018

Dwie zasady skutecznego rozwiązywania problemów w prezencie noworocznym

Bez zbędnych wstępów.

Zasada 1.

Niemal każdy dylemat ma co najmniej dwa rozwiązania: dobre i praktyczne. Najczęściej są one od siebie różne.

Przykład: Znajdujesz się na skrzyżowaniu równorzędnym, który samochód ma pierwszeństwo? Jeśli odpowiedziałeś, że ten z prawiej, to masz rację. To dobra odpowiedź. Odpowiedź praktyczna jest taka, że pierwszeństwo ma ten większy...Samo życie.

Jeśli zatem przychodzą do Ciebie manager i Scrum Master z dylematem typu "czy dorzucanie zadań do sprintu jest adżajlowe, czy nieadżajlowe", to nie bierz udział w tej dyskusji. Zamiast tego pomóż im rozwiązać najbardziej palący aktualnie problem. Dobrze słyszałeś - zadanie kilku efemerycznych pytań o wartości Scruma nie wystarczy. Trzeba będzie doradzić, pokazać, albo część zrobić samemu.

Żeby przeanalizować czy coś jest dobre czy niedobre, potrzeba spokojnej głowy i refleksyjnego nastroju. Gwarantuję, że gdy zejdzie ciśnienie, związane z bieżączką, kwestię adżajlowości swojej pracy rzeczeni manager i SM rozwiążą sobie sami.

Zasada 2.

Albo inaczej nieskromnie - Wielkie Twierdzenie Bartyzela: "Każdy problem da się tak steoretyzować, że nie będzie istniało jego rozwiązanie, możliwe do znalezienia za pomocą aktualnie znanych metod badawczych".

Nie daj się wciągnąć w dywagacje "a jeśli mamy dużą liczbę transakcji na sekundę, która będzie przyrastać dość szybko, to XYZ, będzie lepsze niż ŃŚĄ". Niemal zawsze polegniesz.

Zamiast tego proś o konkretne kejsy i rozwalaj przypadek po przypadku. Pamiętaj, że hipotetyczne problemy mają hipotetyczne rozwiązania. Konkretne problemy mają rozwiązania konkretne.

Managerowie zagadują mnie często: "Czy manager może być Scrum Masterem?". Kilka razy zdarzyło mi się odpowiedzieć: "Nie, ale ty możesz". Case-by-case.

Friday, October 12, 2018

Zwinność kulturowo rozmiękczona

Tu, nad Wisłą, ze zwinnością (agility) wydarzyło się coś niedobrego. Zapraszam to krótkiej rozkminki.

Weźmy taki cytat ze Scrum Guide (dotyczy on roli Product Ownera): "The Product Owner may do the above work, or have the Development Team do it. However, the Product Owner remains accountable."

I z polskiego tłumaczenia: "Właściciel Produktu może wykonywać powyższe zadania samodzielnie lub zlecać je Zespołowi Deweloperskiemu, jednak to Właściciel Produktu pozostaje za nie odpowiedzialny"

Dostrzegasz coś intrygującego?

responsible vs. accountable

Responsible oznacza odpowiedzialność w takim sensie, że ktoś ma coś w swoich obowiązkach, bo na przykład zostały mu te obowiązki przydzielone.

Accountable oznacza mocniejszy rodzaj odpowiedzialności np. prawnej, czyli odpowiedzialności za konsekwencje.

Zatem tłumaczenie oddające sens angielskiego zdania powinno brzmieć: "Właściciel Produktu może wykonywać powyższe zadania samodzielnie lub zlecać je Zespołowi Deweloperskiemu, jednak to Właściciel Produktu zostanie z nich rozliczony". Jedno słowo wiele zmienia, co?

Podobnie rzecz się ma Zespołem Deweloperskim: „Individual Development Team members may have specialized skills and areas of focus, but accountability belongs to the Development Team as a whole.”

Zatem Zespół Deweloperski zostanie rozliczony za brak przyrostu (increment) produktu na koniec sprintu.

Niuans kulturowy

Moim zdaniem mamy tu do czynienia z różnicą kulturową. Anglosaska - jak mniemam - prosta i konkretna zasada rozliczenia została w polskim tłumaczeniu rozmyta i rozmiękczona w ogólną odpowiedzialność.

Zgaduję powód. Sęk w tym, że rozliczyć ma w języku polskim mocno pejoratywne konotacje. "Rozliczę cię" oznacza mniej więcej tyle: "Słuchaj gościu, jak coś pójdzie nie tak, to ty za to bekniesz. Poniał?"

Głębiej o accountability

Powiem więcej. "accountability" oznacza taki rodzaj (silnej) odpowiedzialności (za konsekwencje), który został przyjęty dobrowolnie. Na przykład CEO jest accountable za organizację i zostanie rozliczony za ew. sukcesy i nieprawidłowości. Ważne jest to, że on o tym wiedział od samego początku i zgodził się na to "rozliczanie" w momencie przyjęcia nominacji.

W tak rozumianym rozliczaniu nie ma nic negatywnego. Ktoś otrzymuje pełnię władzy: przywileje oraz konsekwencje. Prosty deal.

Czego chce Scrum?

Posługując się już przedefiniowanymi wyżej pojęciami, można powiedzieć, że Scrum chce od swojego praktyka pewnej dojrzałości.

Chce, aby PO, DevTeam czy SM, zanim podejmą decyzję, że używają Scruma, zatrzymali się na moment. Niech się zatrzymają, popatrzą na możliwe przywileje, na potencjalne konsekwencje i świadomie powiedziedzą: "Tak, chcę być rozliczony za swoją pracę."...albo nie.

Rzecz jasna możliwość rozliczania implikuje ze strony organizacji konieczność przydzielenia autonomii, decyzyjności i tak ogólnie nie wpieprzania się w paradę.

Kolorowy coach

Tu kudos dla Bartka za insight.

Weźmy jeszcze jeden cytat na temat tego, co tam Scrum Master powinien: "Coaching the Development Team in self-organization and cross-functionality"

I po polskiemu: "Coachując Zespół Deweloperski w zakresie wykorzystania zasad samoorganizacji i międzyfunkcyjności".

No więc rzucili się ludzie na kursy kołczigu i adżajkołczują. No, ale looknijmy sobie na OxfordDict czymże jest ten coaching?

O, żesz w mordę, madafaka! Co ja paczę???

  • "Train or instruct (a team or player)"
  • "Teach (a subject or sport) as a coach"
  • "Give (someone) instructions as to what to do or say in a particular situation"
  • "Give (someone) professional advice on how to attain their goals"

Zatem jeśli Scrum Master coach Zespół Deweloperski, to oznacza, że ten Scrum Master jest naumiany Scruma i generalnie ogarnia temat. Następnie jego zadanie polega na tym, aby nauczyć Scruma zespół. No i może ludzi poza zespołem, przynajmniej na takim poziomie, żeby kumali o co chodzi.

Nie oznacza to, że statutową metodą pracy Scrum Mastera jest "metoda coachingowa", czyli zadawanie pytań tak, aby delikwentom samo wyjajiło się, co im dolega. Może to robić, jak będzie ku temu powód. Moje doświadczenie podpowiada mi jednak, że takich chwil jest naprawdę niewiele.

Nawiasem mówiąc "metoda coachingowa" zakłada, że klient ma pełnię kompetencji do rozwiązania swoich problemów. No więc życzę powodzenia w pracy tą metodą, gdy zespół nie zna i nie umie Scruma.

Ej, a wiecie jak deweloperzy mówią na takich adżajlkołczów, co to w każdym próbują znaleźć wewnętrzne dziecko i proszeni czy nie proszeni serwują sesje coachingowe tuzinami? "Kolorowe pisaki"...sam słyszałem.

Także, ten...wyluzuj. Po prostu wyluzuj.

Continuous attention to technical excellence...

No więc jak taki #kolorowyCoach w pośpiechu przygotowuje się do certyfikatu, to czytając po łebkach adżajlmanifesto, skupia się tylko na wartościach, zapominając, że jest tam też parę bardziej szczegółowych wytycznych.

Między innymi taka: "Continuous attention to technical excellence and good design enhances agility". O co chodzi?

Coraz częściej dochodzę do wniosku, że pierwszym blokerem do uzwinnienia się jest architektura. Co z tego, że nasz supersystem powstał w sprintach i nawet miał wizję i rołdmapę, skoro to monolit liczący 2MLOC?

Gdzieś popełniliśmy błąd. W którymś momencie zwinność odkleiła się od technologii i stała się wyłącznie: kulturą, mindsetem i procesem.
Tak się nie da.

Biznes dzieje się szybko. Żeby szybko produkować dla tego biznesu potrzeba metod, architektur, technologii i skilla, które umożliwią osiągnięcie tej szybkości. Bez tego zostają tylko kolorowe pisaki...

A na deser międzyfunkcjonalność

W oryginale: "Development Teams are cross-functional, with all the skills as a team necessary to create a product Increment"

I w rodzimym dialekcie: "Zespoły Deweloperskie są międzyfunkcjonalne, w swoim składzie posiadają wszystkie umiejętności niezbędne do wytworzenia Przyrostu produktu."

Nie wiem czy tylko ja wymiękam z tą "międzyfunkcjonalnością"?

Neologizm - jak przypuszczam - "międzyfunkcjonalność" należałoby rozumieć przez analogię do np. "międzywydziałowości", czyli jako coś co się dzieje "pomiędzy granicami wyznaczonymi przez funkcjonalności". Czy ja wiem?

Jeśli już kuć nowe słowa, to ideę oddawałoby "pełnokompetentny": "Zespoły Deweloperskie są pełnokompetentne, w swoim składzie posiadają wszystkie umiejętności niezbędne do wytworzenia Przyrostu produktu." Ewentualnie "pełnoumne" :)

Thursday, September 6, 2018

Jestem Scrum Masterem, co mam robić?

Śmieją się developerzy ze ScrumMasterów, że ci nic nie robią. Niby żartem, niby po przyjacielsku, ale boli. Gdy ScrumMaster zostaje ScrumMaster jedne z pierwszych pytań, które sobie zadaje to:
  • No i co ja mam teraz robić?
  • A co jeśli zapomnę jak się programuje?
  • A co jeśli znudzi mi się programowanie
Jedna z dróg, którą może wybrać SM na wdrożenie Scruma wiedzie przez cztery następujące etapy:
  1. Framework by Guide
  2. Jakość techniczna
  3. Wartości i wyjście poza zespół
  4. Nieustanny tuning DoD
W tym modelu, SM może zająć się doprowadzeniem do zaistnienia następujących rzeczy:
  1. Framework by Guide
    • Zaimplementowanie w pracy zespołu ról: SM, PO z biznesu, SM, DevTeam
    • Zaimplementowanie w pracy zespołu: sprintów stałej długości, DoD, Planningu, Review, Daily, Retro, regularnego refinementu PBL, Product Backloga, Spring Backloga
    • Biznesowe cele sprintów
    • Zaimplementowanie w pracy zespołu: biznesowego inkrementu produktu na koniec sprintu, współpracy między zespołem a PO, która nie wymaga sztywnego DoR
    • samoorganizacja Zespołu deweloperskiego
    • Doprowadzenie do tego, aby testerzy byli pełnoprawnymi członkami Zespołu scrumowego, a nie podzespołem w zespole
  2. Jakość techniczna
    • Wdrożenie 1-3 metryk kodu oraz systematyczna praca nad ich poprawianiem; propozycja na początek CC oraz LOC na poziomie metod i klas
    • Zmierzenie długu technicznego, przygotowanie planu jego spłaty i wynegocjowanie tego z PO
    • Wdrożenie Continuous Integration -> Continuous Deployment -> Continuous Delivery
    • Wprowadzenie regularnego Code Review w zespole wraz z narzędziem, który je wspiera
    • Wdrożenie Test/Behaviour Driven Development
    • Wdrożenie automatycznych testów funkcjonalnych wraz z narzędziem, które je wspiera; nauczenie PO i/lub interesariuszy formułowania wymagań w formie scenariuszy
    • Wdrożenie Domain-Driven Design, nawiązanie współpracy z ekspertami domenowymi, wdrożenie Modelling Whirpool
    • Regularne Architectural Kata
    • Regularne Refactoring Kata
  3. Wartości i wyjście poza zespół
    • Doprowadzenie do sytuacji, w której prace zespołu są niezależne od innych jednostek organizacji
    • Pomoc managerowi zespołu w na nowo zdefiniowaniu swojej roli w stosunku do zespołu scrumowego
    • Doprowadzenie do określenia zasad współpracy pomiędzy jego/jej zespołem a innymi zespołami i/lub jednostkami organizacyjnymi
    • Stymulowanie wewnętrznych inicjatyw typu "craftsmanship": wewnętrzne konferencje, warsztaty, szkolenia, mini-społeczności skupione w okół danych technologii albo ról (np. gildie)
    • Eksponowanie osiągnięć zespołu na zewnątrz organizacji: konferencje branżowe, artykuły w prasie i na portalach branżowych
    • Wdrażanie i promowanie empirycznego podejścia do pracy tj. wprowadzanie przejrzystych metryk przy jednoczesnym uczeniu organizacji jak z nich sensownie korzystać
  4. Nieustanny tuning DoD
    • Doprowadzenie do sytuacji, w której "Done" oznacza "dostępne dla klientów"
    • Praca na skróceniem time to markiet, time to feedback
    • Dążenie do sytuacji, w której ani zespół ani organizacja nie potrzebują Scrum Mastera, gdyż jego obowiązki zostały osmotycznie przejęte przez członków zespołu i innych pracowników organizacji, którzy bezpośrednio dostarczają wartość dla jej klientów

Saturday, November 18, 2017

Co z tym analitykiem?

Kiedyś napisałem na gorąco o kilku sprawach, o których powinien wiedzieć analityk. Już po siedmiu latach mam kolejną refleksję o roli analityka :)

Jak wiadomo konsultanci nigdy nie mówią wprost, zacznijmy zatem od pewnej historii...

Jak urządzić mieszkanie?

Sęk w tym, że nie bardzo wiem jak. Moje kawalerskie kwatery przypominały koszary. Z tego względu dla uwicia rodzinnego gniazda postanowiłem skorzystać z profesjonalnej pomocy.

Projekt wykonawczy - bo o tym mowa - został wyceniony przez architektów na 6,1k. OK, pomyślałem, jeśli ma być dobrze i full profeska, to niech będzie.

Akcja rozpoczęła się od inwentaryzacji, a efektem - jak mnie pouczono - miał być PROJEKT WYKONAWCZY. Kompleksowa dokumentacja dla wykonawcy wykończenia, dzięki któremu będzie on mógł "zrobić" mieszkanie kropka w kropkę w zgodzie z zamysłem architektów.

-- Czyli moja ekpia będzie wszystko wiedziała co i jak z tego projektu?
-- Tak! - zdecydowanie potwierdzili architekci - Nie będą musieli zadawać żadnych pytań.

Skąd ja to znam - przemknęło mi przez głowę.

-- Więcej wiary! - skrytykowałem się w myślach - przecież budowle wznosi się od tysięcy lat. Architekci nie są w ciemię bici i wyłożyłem pierwszą ratę - 3,3k.

Co z tą fugą?

Projekt rzeczywiście robił wrażenie: gruby z zewnątrz, a w środku wszystko szczegółowo rozrysowane. Nawet rozłożenie płytek w łazienkach zostało precyzyjnie zaplanowane tak, że odniosłem wrażenie, iż sam bym sobie wykończył to mieszkanie, posługując się rzeczonym projektem. Bez słowa wyłożyłem drugą ratę - 2,8k.

Któregoś dnia zadzwonił do mnie Pan Czarek - główny specmajster z ekipy wykonawczej.

--Panie Michale, fugi się nie schodzą...

Fugi nie schodziły w dolnej łazience. Rząd płytek drewnianych jakoś nie chciał spasować się z płytkami ceramicznymi. Ale łaj?

Wnikliwa analiza w składzie: ja, ekipa i architekt zaowocowała oczywistą odpowiedzią - do projektu wkradł się błąd. Płytki drewniane miały wysokość nie 30cm lecz 31,5cm !

Jak to możliwe - zachodziłem w głowę. W projekcie za prawie 7 klocków takie rzeczy? Architektom trzeba oddać jedno, że sytuację uratowali - i tym razem i w kolejnych przypadkach.

Panie Michale, nie jesteśmy idiotami

-- Panie Michale, nie jesteśmy idiotami - zaczął majster Czarek. -- Przecież ja wiem, jak położyć płytki. No, ale kazał Pan robić wg projektu, a ja z projektem nie będę się kłócił. Po co oni tu piszą, że "drzwi mają być z podcięciem wentylacyjnym? Przecież wiadomo, że mają być podcięte. Po co piszą, że kibel ma być wiszący? Przecież jak go Pan przywiezie, to się okaże czy wiszący, czy stojący.

Tu Pan Czarek pokazał mi, jak wyobraża sobie projekt wykonawczy.

-- A gdzie reszta szczegółów? - zapytałem zdziwiony.
-- Resztę, to sobie dogadamy.

Coś tu poszło nie tak

Mieszkanie zostało wykończone jak trzeba. Siedziałem zadumany na schodach, trzymając w ręku PROJEKT WYKONAWCZY - plik kartek, za który zapłaciłem 6,6k. Coś tu jednak poszło nie tak.

Nie kwestionuję ceny za pracę architektów, wiadomo, że robota kosztuje. Kwestionuję cel, do którego wspólnie się skomitowaliśmy. Nie chciałem płacić za projekt, bo te rysunki nie mają dla mnie żadnej wartości. Chciałem zapłacić za doprowadzenie mieszkania do takiego stanu, jaki spodobał mi się na rysunkach. O to mi chodziło!

A co z tym analitykiem?

Analityk w zespole, analityk jako PO, analityk jako Proxy PO...itd. Każda z tych konfiguracji ma sens. Tyle, że analityku! Twoim celem nie jest wysmażenie BPMNów, UMLi, czy cholera wie czego tam jeszcze. Twoim celem jest dostarczenie tego, czego chce klient. Wespół z innymi wykonawcami na przykład z zespołem deweloperskim. Nie bez powodu na rynku pojawiły się biura architektoniczne mające własne ekipy.

Zauważ, że w opisanym przykładzie nie można mieć żalu ani do architektów, ani do ekipy. Problem leżał w tym, że setup organizacyjny pracy był niewłaściwy. Architekci poprzez zakontraktowanie PROJEKTU mieli inny cel niż ekpia.

Chociaż sam prowadziłem wiele szkoleń z UML, jestem raczej niechętny tego rodzaju formalnym notacjom. Ich intencja jest szczytna, ale prowokują one sytuacje, w których to chęć stworzenia poprawnego modelu zastępuje cele klienta. O wiele bardziej przemawiają do mnie nieformalne notacje "free form diagrams" prezentowane chociażby przez Simona Browna w "Software Architecture for Developers".

O tym, że, mało który deweloper używa UMLa zgodnie ze specyfikacją, nawet nie wspominam.

Friday, October 20, 2017

Dosypywanie pieniędzy - podstawowy problem zwinności

Przypomnij sobie (bądź wyobraź) urządzanie swojej własnej kuchni...
Właśnie zamontowali piękne białe blaty i trzeba wypełnić otwór na zlewozmywak. Stoisz więc przed dylematem:

  • zlewozmywak z blachy kwasoodpornej za ok. 300zł - w pełni funkcjonalny, no ale kolorem odbiega od białego blatu
  • biały zlewozmywak porcelanowy za ok. 1 500zł - pięć razy droższy, ale biały, doskonale pasujący do blatu

Teraz zaczyna się liczenie budżetu i załóżmy, że na porcelanę sporo brakuje. Można oczywiście wstrzymać się z decyzją na bliżej nieokreślony czas. Jednak w tym okresie kuchnia będzie nie w pełni funkcjonalna. No, a przecież nie o to chodzi. Decydujesz się więc na zlew z blachy kwasoodpornej z nadzieją, że w przyszłości wymienisz go na porcelanowy.

To jest właśnie cecha zwinności: podejmowanie decyzji w aktualnej sytuacji i w aktualnych ograniczeniach. Podejmowanie ich tak, aby maksymalizować wartość z wykonanej pracy oraz minimalizować straty i nieużytki.

Tylko, że w organizacjach taka sytuacja to rzadkość

W organizacjach, gdy brakuje pieniędzy na prace, to się ich często dosypuje (podkreślam: "często" nie "zawsze" i nie "w każdym bez wyjątku" lecz w "bardzo wielu przypadkach")

A następnie:

  • Zespół pracuje nad sprintem i nagle wpada jakiś ubermanager z innej galaktyki z superpilną wrzutką. Product Ownerze, robimy? No, robimy. Przecież to superpilne, a ubermanager przyszedł z workiem pieniędzy
  • Zespół regularnie nie dowozi sprintu. I co? I nic, biznes poczeka i dosypie trochę kasy.
  • Od roku żaden sprint nie ma sensownego celu. Luzik, mamy już zaklepane mendeje na kolejny kwartał.
  • Zespół jest maksymalnie zdemotywowany. Chce pracować, chce być zwinny, chce mieć FOCUS, chce OPENESS i inne też chce. Ale co z tego, jeśli cokolwiek nie zrobi i tak się nic nie stanie?

Tymczasem w małej firmie na dorobku

W małej firmie na dorobku, Scrum wygląda nieco inaczej. Zarządzanie małą firmą na dorobku przypomina podtapianie się. Miesiąc w miesiąc zastanawiasz się, czy masz na wypłaty (dla pracowników, z wypłatami dla siebie to różnie bywa). I wtedy musisz podejmować decyzje i respektować ograniczenia, bo od tego zależy Twoje być albo nie być.

Konkludując: Chcesz, aby zespół pracował zwinnie? Nie dosypuj pieniędzy!

Monday, September 18, 2017

Koniec z przytulaniem drzew

Taka sytuacja...oderwany od przyjemnego kodzenia, wbijasz na retro, a tu radosny ScrumMaster rzuca Ci przed nos plik łososiowych karteczek, długopis z biedronką, a potem całkiem poważnie pyta: Jaki kolor miał ten sprint?

No i już wiadomo, że ScrumMaster właśnie wrócił z nowej ekstraedżajlowej konferencji (no, wiadomo, że tam się kręcą sami ScrumMasterzy), gdzie zasilił się nowoczesnymi technikami na retrospektywy.

Ostatecznie dostajesz do wyboru: przytulanie drzew albo poszukiwanie wewnętrznego dziecka...

A gdyby tak zostawić te drzewa w spokoju i zająć się czymś ciekawszym np. architekturą?

Na przykład w ten sposób.

Przed retrospektywą

  1. Deweloperzy z Zespołu czytają rozdział "From Mud To Structure" z Pattern-Oriented Software Architecture, 4th Volume.
  2. Product Owner czyta rozdział "Warehouse Management Process Control" z tej samej książki i opcjonalnie rozdział dla deweloperów.

W trakcie retrospektywy

  1. Temat do dyskusji: w jaki sposób idee w tekście mają przełożenie na architekturę systemu, nad którym pracujecie
  2. ScrumMaster dba o timeboxing i o to, aby pojawiające się pomysły zostały konkretnie nazwane
  3. ScrumMaster dba, aby konsekwencje biznesowe poszczególnych pomysłów były zrozumiałe dla ProductOwnera
  4. Pomysły spisujecie na osobnych kartkach (nie muszą być kolorowe ;) )

Na zakończenie retrospektywy

Grupujecie pomysły według dwóch skal:

  • mały/duży wpływ na rozwiązanie problemów w Waszym systemie
  • mała/duża trudność we wdrożeniu w życie

Jako action point proponuję wybrać ten pomysł, który ma możliwie duży skutek oraz możliwie małą trudność we wdrożeniu.

Sunday, July 16, 2017

Dzielenie User Stories z życia wzięte

Żona zakontraktowała ze mną poprawę sytuacji wieszaków na ubrania w garderobie.
Garderoba jest tak wygospodarowana za pomocą ścianek kartonowo-gipsowych z powierzchni mieszkania,
że znajduje się pod dość spadzistą częścią połaci dachu.

Konsekwencja tego była taka,
jedyne wieszaki na ubrania jakie miały tam rację bytu ,to takie samodzielnie stojące w liczbie dwa.

Zgodnie z zasadą safe-to-fail experiments zacząłem od najtańszych. I gdy połamał się czwarty, czy piąty,
a sumaryczny koszt wieszaków zbliżał się niebezpiecznie do 1kPLN otrzymałem, wspomniane zlecenie mojej PO.

Na naradę strategiczną zaprosiłem sąsiada, który rychło przekonał mnie do wykonania pracy samodzielnie.

No i się zaczęło:

  • nie ma gdzie się rozeprzeć drążkami
  • prócz ciężaru ubrań na drążek będzie działać jeszcze szarpanie na boki, gdy ktoś nagle zapragnie
    wyciągnąć ubranie z samego końca składu - czyli karton-gipis nie wytrzyma szarpania
  • i inne mniej poważne rozważania budowlane

Ostateczny plan działań rysował się następująco:

  • usunąć listwę przypodłogową
  • na ścianę nakleić sklejkę 18mm, dodatkowo poprawić wkrętami, sklejka ma być oparta o podłogę
  • wieszak będzie przytwierdzony do sklejki i do podłogi

Raźno wziąłem się do pracy, a pomocny sąsiad zorganizował potrzebną sklejkę. Wyglądało to tak:

Jak to bywa, okazało się, że brakuje części, narzędzi i że praca zajmie kilka popołudni, zamiast jednego. Pokój przylegający do garderoby zaczął przypominać pobojowisko:

W tym momencie moja żona powiedziała STOP (nie jest to cytat dokładny). Okazało się, że bałagan w trakcie prac jest istotnym wymaganiem niefunkcjonalnym, które może położyć całe przedsięwzięcie.

A co na to agile?

Kocham wytwarzanie oprogramowania między innymi dlatego, że pomaga załatwiać ważkie sprawy codziennego życia. Takie jak chociażby montaż wieszaka w garderobie.

Optymalizuj proces wytwórczy "pod klienta"

Pierwsza zmiana w trybie pracy polegała na tym, by każdego wieczora po zakończeniu prac garderoba była gotowa do użytku, a pokój uprzątnięty. Mniej więcej tak:

Z mojej perspektywy taki tryb pracy wymagał więcej wysiłku i trwał dłużej, a zatem był droższy. Najchętniej przeniósłbym żonę z dzieciakami na kilka dni do teściowej, a sam ogarnął temat w trzy pacierze.

Z drugiej strony obecność rodziny dawała pewne korzyści:

  • informacje od żony: czy za wysoko, czy za nisko, czy wystarczająco miejsca do poruszania się
  • dzieciaki przeprowadzające testy obciążeniowe

Nieustanna obecność klienta pozwoliła mi podnieść jakość produktu (w oczach tego klienta, rzecz jasna) i uniknąć poprawek na samym końcu, a w skrajnym przypadku całkowitego demontażu niefunkcjonalnego wieszaka.

A zatem w kontekście całości przedsięwzięcia (łącznie z odbiorem produktu i sprzedażą) było szybciej i taniej. Ode mnie zaś wymagało to takiego sposobu pracy, aby był on całkowicie zrozumiały dla klientki.

Jak to zapisać w backlogu?

Ten bardzo naturalny sposób pracy nie został wymyślony - został zaobserwowany. Zespołom trudno wpaść w ten tryb, no bo jak to zapisać w backlogu?

Jedną z najistotniejszych rzeczy w zwinności jest rozwijanie produktu w taki sposób, aby klient mógł obserwować postęp prac i nie musiał mieć do tego żadnej magicznej wiedzy.

Zapisywanie tegoż jest ważne, ale wtórne. Jeśli pracowałbyś w ten sposób, a w backlogu umieszczał wpisy postaci:

  • Montaż wieszaka w garderobie - etap 1
  • Montaż wieszaka w garderobie - etap 2
  • Montaż wieszaka w garderobie - etap 3
  • Montaż wieszaka w garderobie - etap 4

to będzie OK. Może jakiś neofita zwymyśla Cię na forum. Ale Twój klient będzie wiedział o co chodzi, bo będzie widział co się dzieje, więc będzie miał wpływ na to, co wytwarzasz i będzie wiedział za co płaci. I to jest zwinność.

Czytelny backlog - większa przejrzystość

Sąsiedzi odnotowali dwie rzeczy: moją absencję na placu zabaw oraz hałasy dobiegające z naszego mieszkania. Dopytywali więc żonę, co się dzieje.

Mogła odpowiedzieć:

-Michał robi wieszak w garderobie i jest na etapie drugim.
Ale czy to by ich zadowoliło? Czy hałasy nie były zbyt niepokojące? Powstał więc problem z przejrzystością mojej pracy.

Dla jej poprawienia mógłbym nieco przeformułować wykonywane zadania:

  • Jako Żona chcę zobaczyć różnicę między wieszakami stojącymi, a tym co robisz, żeby zrozumieć czy mi odpowiada pomysł
  • Jako Żona chcę powiesić chociaż puste wieszaki, żeby przekonać się jak tego można używać
  • Jako Żona chcę powiesić kilka lżejszych ubrań, żeby zobaczyć czy wygodnie się tego używa
  • Jako Żona chcę samodzielnie powiesić mniej używane ubrania, żeby zobaczyć czy mam wystarczającą ilość miejsca do poruszania się w garderobie
  • Jako Żona chcę powiesić tyle ubrań ile wlezie, żeby zweryfikować wytrzymałość wieszaka

Zauważ, jak bardzo przeformułowanie zadań poprawia przejrzystość prac nad wieszakiem. Zwłaszcza z perspektywy mojej żony oraz pośrednich interesariuszy (zainteresowanych hałasem) w postaci sąsiadów.

Dzięki tej przejrzystości moja żona mogłaby sprawniej komunikować się z sąsiadami, a oni mogliby nagle zachcieć mieć podobny wieszak u siebie, gdyż otrzymali bardzo jasne informacje na temat tego, co się dzieje i co można zyskać na poszczególnych etapach prac.

Czy to jest PSI?

No sam powiedz, czy to PSI?

Mamy tu jakiś fragment wieszaka: mocowanie do ściany, ramię do wieszania, podpora oraz mocowanie do podłogi. Czy to już wieszak? W jakimś sensie tak, nie do końca o to chodziło, ale pewien typ ubrań można wieszać.

W PSI ważna jest literka P - potencjalnie. Gdyby ktoś chciał, to potencjalnie mógłby tego użyć, akceptując ograniczenia tej funkcjonalności. Dla mnie osobiście "P" oznacza, że klient ma wystarczający obraz tego, jak wieszak będzie wyglądał na końcu, aby dać zielone światło i pieniądze na dalsze prace.

W tym sensie ułomny pół-wieszak robi na kliencie o wiele lepsze wrażenie niż bałagan w pokoju, a w tle przerażający pisk szlifierki kątowej.

PSI zmienia się w SI

SI, czyli shippable increment.

Czy tak trzeba, czy można robić?

W zeszłym roku remontowałem łazienkę na działce, a wyglądało to tak.

Żona i dzieci wypoczywali nad morzem. Żadnych szczegółowych wytycznych do łazienki nie było, prócz takiej, żeby ją w końcu naprawić. Więc rozoraliśmy z tatą pół domku, a po tygodniu łazienka była gotowa. Żadnego sprzątania na wieczór - proces wytwórczy zoptymalizowany "pod wykonawcę".

Podsumowując mamy dwa sposoby optymalizacji pracy nad oprogramowaniem:

  • "montaż wieszaka w garderobie" - optymalizacja procesu wytwórczego "pod klienta"
  • "remont łazienki na działce" - optymalizacja procesu wytwórczego "pod wykonawcę"

Który i kiedy wybrać? To będzie na deser ;)





Wednesday, January 4, 2017

Jak dostarczać przetestowane zadania?

Poniższe pytania i odpowiedzi są możliwie konkretne. Niestety im bardziej konkretna odpowiedź, tym mniejszy kontekst jej stosowalności. I jeszcze bardziej niestety duża szansa na zastosowanie odpowiedzi w niewłaściwym kontekście albo (z powodu nieuwagi autora) wyciągnięcie z tych odpowiedzi wniosków, których autor wcale nie miał na myśli.

Z w/w powodów proszę aby, jeśli wyciągniesz z poniższego tekstu wniosek, który jest sprzeczny ze zdrowym rozsądkiem, Twoim doświadczeniem, Scrum Guidem itp., niezwłocznie mnie o tym poinformuj w komentarzu – w miarę możliwości doprecyzuję tekst.

Problem:
  • Sprint trwa 2 tygodnie
  • Zespół planuje prace na cały sprint
  • Po wykonaniu zadania PO zleca testy biznesowe osobom z biznesu i na tej podstawie odbiera zadania ze sprintu
  • Bywa, że osoby z biznesu nie zdążają przetestować zadania przed sprint review i zadanie jest undone
  • Jak zatem planować prace i współpracować, aby dostarczać zadania, które są done?

1. Czy powinniśmy zaplanować development tylko na 1. tydzień sprintu, dając tym samym biznesowi czas na przetestowanie w 2. tygodniu sprintu tego, co zrobiliśmy w 1. sprincie?

- Nie. Tydzień siedzenia i czekania jest stratą czasu i pieniędzy.

2. Czy w takim razie powinniśmy zorganizować prace tak, że testowanie biznesowe odbywa się w kolejnym sprincie?

- Nie. Poprawki zgłoszone do zadań z poprzedniego sprintu będą zaburzać wasze prace w bieżącym sprincie. Modelowo zespół pracuje time & material i otrzymuje wynagrodzenie na koniec sprintu za to, co dostarczył w sprincie. Z perspektywy zespołu nie ma sensu robić w sprincie pracy, która na koniec nie zostanie odebrana i opłacona.

Jednym z kluczowych przesłanek za pracą w iteracjach i inkrementach jest ta, że PO po każdym sprincie może zdecydować się na wstrzymanie prac programistycznych, aby skupić się na biznesowym zarabianiu na produkcie. Może też zdecydować, że już osiągnął to, co chciał i współpraca z zespołem dobiegła końca. Planowanie testów na kolejny sprint odbiera mu tę możliwość.

3. Ale nasz PO liczy mendeje, które spaliliśmy w sprincie. Musimy zaraportować prace na jakieś zadania.

- Dobrze, że je liczy. Powinien również liczyć zysk z dostarczonej pracy. Jeśli zysk jest, to w czym problem?

4. Wy tym, że przecież nie możemy przez dzień czy więcej siedzieć tylko i pić kawę.

- Częściowo to prawda. Chodzi nam o subtelną zmianę priorytetów: przestajemy dążyć do maksymalnej utylizacji Waszego czasu pracy, zaczynamy dążyć do maksymalnej wartości Waszej pracy. Jeśli zatem okazuje się, że wszystko jest done i macie jeszcze czas w sprincie, to warto zastanowić się nad zwiększeniem dostarczanej wartości np. poprzez planowanie większej ilości wartościowej pracy. Poza tym PO nie płaci za wykonane zadania/user story/funkcjonalności, lecz za osiągnięcie celu sprintu.

5. Przypuśćmy, że mamy taką sytuację: w pierwszym tygodniu sprintu zrobiliśmy zadania i poprosiliśmy PO o akceptację (a więc o biznesowe przetestowanie). Czym mam się zająć w następnej kolejności?

- Kolejnym zadaniem ze sprint backloga.

6. Ale wszystkie są już ‘in progress’

- Pomóż kolegom/koleżankom sprawniej uporać się z ich zadaniami, abyście szybciej osiągnęli cel sprintu.

7. Ale oni mówią, że w tej chwili nie potrzebują pomocy i że będziemy sobie przeszkadzać

- Zacznij testować zadania kolegów/koleżanek.

8. Ale oni już zaczęli swoje testy deweloperskie?

- Zacznij testować biznesowo.

9. Ale to analitycy z biznesu mają się tym zająć.

- A kto ma otrzymać wynagrodzenie za pracę, która jest done – Wy czy analitycy z biznesu?

10. Czyli analitycy mają nie testować biznesowo?

- Nie wiem jak jest ułożona Wasza współpraca. Może i mają testować, ale odpowiedzialność za dostarczenie celu sprintu spoczywa na zespole.

11. Ale nie mamy żadnej metody, żeby ich zmusić do testowania na czas

- Co do zasady, to da się zmusić współpracowników do pewnego zachowania, ale wtedy cały czas musisz podtrzymywać bodziec przymuszający np. zagrożenie eskalacją. Ostatnie 40 lat doświadczeń wskazuje, że postawienie na współpracę, budowanie relacji i podejście win-win daje w typowym środowisku biznesowym lepsze efekty.

12. A co zrobić jeśli analitycy nie mają czasu na testowanie?

- Zgłosić PO. Jeśli nie mają czasu odebrać zadania, to nie jest ono wystarczająco ważne albo nie zostało przez nich wycenione biznesowo. Osobiście rozważyłbym niebranie na sprint zadań, co do których nie ma zobowiązania, że zostaną odebrane.

13. Mówiliśmy im, że mają się zobowiązać, ale oni mówią, żeby ze sporym wyprzedzeniem podać kiedy mają testować bo muszą zaplanować swoje prace, a my nie jesteśmy w stanie tego przewidzieć

- Czyli chcecie, aby biznes zaplanował swoją pracę „pod Was”, bo wy nie jesteście w stanie zaplanować swojej?

14. To nie tak. Nie da się patrząc na zadanie podać nawet ‘mniej więcej’ kiedy będzie gotowe do testowania.

- Prawdopodobnie zadania są zbyt duże. Prawdopodobnie należy się przyjrzeć refinementowi.

15. Nie da się ich bardziej podzielić.

- Da się. Zróbmy warsztat na ten temat. Byle na Waszych przypadkach nie na ogólnych schematach.

16. Powiedzmy, że chciałbym testować biznesowo, ale nie wiem jak, nie mam potrzebnej wiedzy.

- Zapytaj analityków z biznesu.

17. Mówią, że nie mają czasu.

- Zapytaj jeszcze raz.

18. Znów nie mają czasu.

- Pytaj aż do skutku. Wpadnij na kawę, na lunch. Popracuj na ich piętrze.

19. Nawet jeśli się czegoś dowiem, to testowanie idzie mi wolno nie wyrobię się do końca sprintu.

- Do końca tego sprintu może i nie, ale za 2-3 może nabierzesz wprawy.

20. A co jeśli do końca sprintu zostało 2 dni, czekamy tylko na wyniki testów biznesowych. Czy możemy zacząć nowe zadanie?

- Zanim to zrobisz, to poświęć chwilę na refinement, poprawę jakości kodu, dopisanie koniecznych testów, spłatę długu technologicznego.

21. Już to wszystko zrobiliśmy…

- To dobierzcie zadanie z product backloga. Unikajcie w trakcie planingu wrzucania do sprint backloga zadań rezerwowych.

22. Dlaczego? Przecież i tak dobieramy z backloga?

- Ale z produktowego, a nie z napchanego sprint backloga.

23. Co za różnica?

- Taka, że jeśli na początku napchacie sprint backlog rezerwowymi zadaniami, to na koniec sprintu prawie na pewno zostaną Wam niewykonane zadania.

24. Ale przecież chodzi o osiągnięcie celu sprintu, a nie o wykonanie wszystkich zadań.

- To prawda. Jeśli cel jest osiągnięty i zostały jakieś zadania, to nie ma dramatu. Mimo to ludzie lepiej się czują jeśli zrobią wszystko, co sobie zaplanowali. Nawet jeśli doskonale rozumieją, że nie jest to celem, to niepusty sprint backlog ich ‘uwiera’.

25. Czyli mamy planować tak, aby wykonać wszystkie zadania ze sprintu?

- Nie. Tego nie powiedziałem. Powiedziałem tylko, żebyście unikali napychania sprint backloga rezerwowymi zadaniami. Tylko tyle. Popełniasz błąd wnioskowania polegający na niewłaściwym odwróceniu implikacji. Poczytaj o błędach poznawczych. np. Sztuka myślenia

26. Przypuśćmy zatem, że dobierzemy jakieś zdanie z product backloga. W takim razie te zadania nie zostaną przetestowane biznesowo do końca sprintu.

- To podzielcie na mniejsze i sami testujcie biznesowo.

27. No, to powiedzmy, że zostało 2h do końca sprintu, dobrałem zadanie i na pewno nie zostanie ono przetestowane biznesowo do końca sprintu.

- No, prawdopodobnie nie zostanie.

28. Ale wcześniej napisałeś, żeby nie robić takich zadań, bo jak skończymy współpracę na tym sprincie, to nam nie zapłacą za nieodebrane zadania.

- Istnieje takie ryzyko. Zmniejszasz je dobierając zdania z wierzchu product backloga w nadziei, że kolejny sprint jednak ruszy, dokończysz to zadanie i otrzymasz zapłatę.

Lecz zanim zdecydujesz się rozgrzebać zadanie, które będziesz kontynuował w kolejnym sprincie, najpierw przeprowadź w/w 27-punktowy ciąg rozumowania ;)

Monday, September 26, 2016

Rethinking Software Architecture

From time to time everybody feels that the architecture of the software one develop is quite closer to a big bull of mud that the screaming architecture.

I give you plan of a workshop you may lead with your team. This is a part of my ArchitecturalKata for an Agile Team workshop.

What is the Goal

We want to achieve agreed and clear vision of the architecture. I am really pragmatic person. So I am not going to push you to introduce some sexy solutions as: DDD, Clean Architecture, CQRS, Event Sourcing and stuff. It may happen it may not.

There are many criteria to meet to achieve these architectures. Here, our goal is to move your architecture into a better place, even it mean a step forward. We want the architecture to be more testable, maintainable and more decoupled. That's all.

What We Need?

  • a team who work on the system (recommend no more than 10 people)
  • 1-2 days
  • silent classroom
  • space on the walls or on the floor
  • quite big table or space on the floor
  • couple blocks of sticky notes in many colors
  • colored markers
  • pair of scissor
  • printer paper
  • big flip-chart sheets
  • paper tape
  • a computer with a code baseline
  • beamer (useful but not necessary)

See Responsibilities

Because flow of that workshop varies in some details depends on the software size and granulation, I give you an example for the quite big legacy system (developed from more than a decade, where primary building blocks are components containing many classes).
  1. First, capture all your components. Write each on a sticky note. It may be hundred of them or more but not so much :)
  2. Then look into the source code and try to name responsibilities. Responsibility is a role of the component and the way how it serve to others. So, you will find them looking at the public methods, events published, signals sent. Sometimes one strange method is one responsibility, other time group of related method define a responsibility.
  3. That's important: name only those responsiblities you see in the code, not those you think they are
  4. Don't be too detailed with the granulation of the responsibilities. Be ready to regroup and rename them any time you want
  5. Probably you know that in a legacy code components have many responsibilities, so name them explicitly and write them on small stickies. Next put small stickies on components they come from
  6. You will see than you have two to four components which looks like stars with its satellites :) These are components where single responsibility principle was really abused. There is much code inside

Redefine Responsibilities

Now its time to redefine responsibilities of the components. Organize your components obeying following rules:
  • A component has exactly one coherent responsibility
  • You are allowed to add new components
  • You are allowed to remove components
  • You are allowed to rename components
So now:
  1. Add/Remove/Rename components and reorganize responsibilities stickies
  2. Repeat until every single component have sort of small stickies and all of them describe one coherent responsibility

Redefine Communication Between Components

  1. Now draw directed lines representing communication between components and note purposes of a communication just right above the lines. A line starts from a component which initiate communication.
  2. There is one rule during this exercise: a line cannot cross an other line. I will explain why at moment.
  1. Sometimes you will discover a cyclic dependency between components, so remove it, if needed.

Cluster Components

  1. The rule "don't cross the line" caused that components which work closely are stuck closely.
  2. Try to circle clusters of closely related components. But there is important rule: look for the clusters related to the functionality of the system. You may ask yourself: What is the core cluster where we have minimal deliverable functionality? How to cluster components to extract potentially optional functionalities?
  3. Name these clusters

Define Clusters API

Now we want to see high-level view. We want to extract fine grained and decoupled clusters enclosed in modules, processes or separate applications.
  1. First define an API for the clusters.Finally we want cluster-to-cluster communication instead of component-to-component. A component-to-component communication is fine inside the cluster, but not between them.
  2. API receives communication from other clusters and distributes it inside of the cluster. It also translates the inside-cluster communication into outside one.Technically that translation layer will be some combination of facades and adapters.
  3. Defining API remember that we have: exposed interfaces and required interfaces. Define both.
  4. Also explain how the inside-cluster components talk to each other.
  5. This is important: obey the encapsulation rules: nothing from inside of the cluster is seen to the outside world

Define Communication Between Clusters

  1. Draw communication between clusters. It will be API-to-API communication, it mean exposed interface to required interface.
This is it. Artifacts and discussions during that workshop bring quite clear understanding of the current state and well defined vision were want to be if about architecture of our software.

How long it takes to refactor the code?

Wel, it depends ;). I know the cases (software of that size) where it took a year or so total. Remember that visioning is a one thing, but bringing the vision into reality is completely different story.

What Next?

One of the next steps is a really tricky stuff. We need to prepare plan how to communicate our technical objectives to managers and all those people who have an authority to say YES or NO to our refactoring work. On the end we want them to support our new architecture.

Working strategies to convincing sponsors are the key part of my ArchitecturalKata for an Agile Team workshop. If you want me to lead this workshop for your team, please contact me at the contact form.

Monday, October 5, 2015

Scrum, Kanban, XP, Scrumban, SAFe, Nexus, LeSS, DAD, Evo

There were days in the Java world when we were framework enthusiasts. Every single day new framework was deployed to sourceforge, googlecode, github, bitbucket or so on.

So it was turned out that being a Framework-Junkie led you to really poor architecture (see these articles: * Driven * do not change anything, Extremely Pragmatic Software Architecture, Measuring Software Architecture, Frame-of-our-work, What Exactly Are Patterns?).

Having this technological discussion out of our heads we started new one: what is the best agile framework. Yep, we are quite poor learners. How it possible that people who are trained to see repeatable patterns in the world don't see that we replay the old movie? - searching for the Silver Bullet.

Teams or whole organizations jump from one agile framework to another one - in the same way they jumped from Struts2 to JSF, from JSF to Spring MVC, etc. But they don't achieve desired effects.

If you wonder how to jump from SAFe to LeSS or another, or maybe you wonder which agile framework to use - I know the answer. Are you ready? - IT DOES NOT MATTER.

That's right - an agile framework doesn't do the job - PEOPLE DO. Don't try to bypass teams members skills by a new framework. This is a cognitive bias I described here.

Any framework was developed by highly-skilled professionals as a generalization of their daily routine. Having highly skilled people you will apply any framework, but a framework won't make your people better.

Again, frameworks are useful, but people and their skills are the key success factor.

Friday, July 17, 2015

A Word on Motivation

Don't blame people, avoid punishing them, empower people, let them to Drive themselves, motivate people positively. Have you heard about this stuff? I have a lot. Basically I agree, but...

A friend told me a story. His is the owner of some organization from the IT industry. Once the organization cooperated with dishonest supplier who hadn't paid the VAT tax related to their businesses for couple years. (in Poland VAT tax is the way how the sate sicks up the poorest subjects, but it's another story).

During the tax control they obviously discovered the trick an punished the supplier. As a consequence of the case weak invoices were mandated to be removed from the accounting system. Technically there was no business between my friend and the supplier. But my friend deducted VAT tax, so Tax Office request him to refund it. Two million Polish zloty (it's over $500k) in 14 days...well, this is the law.

But he survived, found the win-win solution with Tax Office. Was he motivated positively? I don't think so.

When I think about my business carrier (it has took 7 years since I started our company) I went through lots of fuckups. There was: tiny organization, little bit larger one, almost bankruptcy, UE project with a lot of madness around, we were cheated by a salesman we trust and so on and so forth.

When some investor was unsatisfied because of project one blamed personally me, I was refused so many conferences I even remember, when we started DevCastZone.com I received heaps of emails from frustrated users with many reasons: err 404, to slow, to expensive, I expected something else and so on and so forth.

You know, for the last eight years I was motivated mostly negatively by the environment I worked in. Really! Of course there were days, workshops, coaching sessions when I met attendees needs and it was fucking awesome. These days are like a pearls - they are worth to challenge every single day.

Despite all these things I sill have fun at my work. Actually thanks to these events I achieve all stuff in my work: businesses, books and articles written, presentations made, friends. So, what the hell the idea with positive motivation??

Thursday, July 16, 2015

Just Do It! Pattern

Hope you have read the Fearless Change by Linda Rising. In not, Just Do It!

Well, Just Do It! it's one of the patterns Linda described to introduce new ideas to the organizations. This is a short story how to use it.

Once I coach an organisation. I was mostly focused on the work with management board, my friend coaches the developers.

The have also group UX Specialists who work together in one room. They serve many projects and customers and were really frustrated about their WIP, relationship to the other teams and to the whole organization as well.

We met in the kitchen and I was told how they work and what kind of stuff they deal with. We almost set meeting for the workshop following week, but...STOP! Let's do something NOW!

They asked themselves just two questions:
  • What we offer our clients (business clients, other teams, organization)?
  • What we require from our clients (as above)?
Pretty hug questions, huh? Because of lack of empty space we wrote all that on the window.
And that's all. It was 15-minutes long Just Do It! Pattern case. Leaving the room I said casually: Listen guys, you might think about this window. I would back following week.

Next visit in the UX room were really surprising. The cover all isses with possible can-do solutions.

Starting from that point we ware able to do some deeper analysis of their current situation.

Again, we did a one week break to re-thing all that. So, I was really touched when I saw this:

They take matters into their own hands. They start to visualize the workflow, to track distractors and WIP, they founded standards of UX-craftsman in the organization. But remember were they start - at the window.

Well, big changes are really difficult, but teeny-tiny changes are quite easy. So, Just Do It!

Friday, February 20, 2015

Yesterday's Meeting at JUG Lodz

This is the slides I presented in the evening.



Some folks also asked me about materials related to conversation patterns and working with business people. This the list with some resources
  • My stuff at this blog
  • My stuff at InfoQ
  • My stuff at Conversation Patterns for Software Professionals
  • Bridging Communication Gap, by Gojko Adzic - is about improving communication between customers and development teams; how to create quality software with Agile techniques
  • Specification by Example - explains core concepts founded in Bridging Communication Gap in more details
  • Non-violent Communication. Language of Life - great book by Marshall Rosenberg about advanced communication skills
  • Core Protocols - these are procedures for improving personal communications and team meetings for total nerds :)
  • Fearless Change by Linda Rising and materials on her home page

Saturday, August 2, 2014

Listen to Your Product

This year at Agile 2014 I met Raje Kailasam who talked about very interesting approach which is Product Humanization (PH). As Raje claims, she's still searching for a good name. She also consider Product Persona as a name. As you'll see later on, Product Experience (PX) seems to be good name as well.

In short, PH/X is an idea to stand in your product's shoes and feel what it feels. Sounds awkward, huh? Let's take a deeper insight.

If I asked you about next features or a next sprint scope, you would start thinking about answers but in the same time this process would be biased by doubts related to: budget, velocity, technical dept or whatever. That is because your logical thinking tries to find 'the best' answer according to you current situation.

But when you identify yourself with your product, you may employ whole your body to this process and express what the product feels (if it could) and what it think as well.

Take a look on free-style examples we recorded at the conference.





During this short session we also draft two techniques employing Raje's approach.

Product Interview

Purpose of this technique is to grab some deeper knowledge about current state of a product. One of the Scrum Team members plays the product role, rest of the Team interview him or her.

We found the critical part is questions you ask the product. These seem to work well:
  • What do you as an entity want to be?
  • What do you want to do?
  • Where do you want to go?
  • How do you want to be served?
  • Why do you want to exist?
  • What do you want to see?
  • With whom do you want to belong?
  • Who are your friends?
  • How do you feel now?
  • How do you feel about your future/past?
  • How do you feel about your body? Tell me more about it?
  • Which of the part of your body you are aware the most now?
  • What do you feel about your relationships? Which are difficult? Which are not?
  • What is important to you?
  • What do you want to say? To whom?

Use collected answers to improve Product Goal, Releases, Epics, Product Canvas or to identify places to introduce improvements to increase business value.

Product Advocate

It is about employing an advocate of the product during Scrum planning meeting.

The Advocate tells the Team and PO how s/he feels about new stories, sprint goal and scope. Use the answers to improve Sprint Goal, User Stories, scenarios.

These is early draft of Product Humanisation. Watch Raje's activity to stay up to date.

Thursday, June 12, 2014

It's All About the Culture

I was attended in really interestnig conference Agilia Budapest by Aguarra company.

The greatest thing was that almost all speakers brought some new ideas and some new approaches in the subject.

So one of the speakers was Andrei Boghiu Product Manager at Prezi, so you probably know who they are. Adrei talked about the product development process in Prezi, from a feature idea to a deployment. He talked about their: continuous learning, constant feedback from the market, lack of documentation in favour of prototypes, collaboration between people, flat organisational structure and so forth.

I listened to him and in that moment I realized Wait a minute, I've heard something similar! Same story I've heard from Spotify guys and the guys from the ThoughtWorks and Touk and SoftwareMill and from couple other companies.

But you know, every time I hear those speakers, I also see people who try to repeat the success story in their own companies and they fail. What is wrong with that?

My observation is that bright companies talk only about the solution they use. However that solutions are well known it's a hard work to implement them with positive results.

Think about it, even if a company use prototypes and screens instead of stories and scenarios, how they convince people to do that? How they engage the people in taking the responsibility instead of waiting for the orders from top management? Finally, how they created the environment where all that well known stuff perfectly works in?

I asked Andrei about it. I think he was little bit surprised by this question ;) and he mentioned couple interesting things such: they engage people to make failures and learning, people (I mean engineers) directly influence the business activities. These are parts of their organisational culture. Yep, it's all about the culture. The culture is the factor which turn all mentioned solutions from an idea into the everyday habits.

Adrei et al. take their organisation cultures for granted, they find difficult to explain what it exactly is. They are simply affected by the culture of their organisations and work in that way.

This is the question I wonder the most: How the specific culture was created in the organisation? What were the steps they used? I have no any doubts that was made on purpose even if the creators were never named what they actually did.

This question requires some deeper researches and interviews.

Saturday, February 15, 2014

Agile Organisational Culture

One of the most painful lacks of applying Agile is, in my opinion, the situation when we incorporated an agile structure but organisational or working culture remains pre-agile.


Organisational culture includes the: human behaviours, skills, beliefs, organisational values, mission and visions, language expressions, symbols, norms what is allowed or what is not inside the organisation. So all these things putting together make a mental shift toward being agile.

Applying Scrum or any framework in most cases gives a structure only. I mean: PO, SM, Team, Backlog, charts, meetings, workflow and so forth. But it's not enough to Scrum brings benefit to your organisation.

Even if DevTeams and business teams commit they know they are a-g-i-l-e now, they will fail because of misunderstandings what agile organisational culture components (listed above) mean to them.

As far we give the agile structure to people, we also need to align every part of organisation with ubiquitous agile culture.

Tuesday, January 28, 2014

It's Not Pround To Be Geek

Although 'Geek' defines some identity for a developer, being geek doesn't sound proundly for me. One having accepted this identity delimits oneself at the same time.

When you think you are Geek also create responsibility related to being Geek. Then it is easy to say: I am Geek, expecting an excellent requirements to start working or I don't wanna talk to stakeholders, this analyst's job, I am Geek or something else.

I've seen many IT-related conferences speeches. My observation is lots of speakers builds their authority around of being Geek. They leverage IT-business cooperation problems, present business-IT relationships with distorting mirror and think it's funny. Well, that is funny for geeks, but not for agilist.

Differentiating from 'Others' is a very powerful strategy for a speaker or for an individual in general. This strategy underlines what a group of individuals have in common and how they differ from 'Others' (read: business), helps to feel more self-confident. But this strategy doesn't help to be more open to a relationship with 'Others'.

So don't be Geek, but Agilist :)

Friday, January 10, 2014

Local Adaptive Step

Every team wants to do good job, but almost always they face with some adversities. These may be: unclear requirements, delays, communication issues and so forth.

Let's say a team wants no extra features during an iteration. This is quite logical expectations, but... things are more complicated. Extra tasks comes from PO, PO is pressed by CTO, CTO is pressed by CEO and CEO is extremely pressed by impatient client.
So, applying the system thinking to this picture it turns out that cause of problems defined by a team might lay in The System organization, not always in the team itself. That's useful point of view and it helps to find a solution in many situations.

However it works, a team or a team leader might not have the authority to reorganize The System. Even if one were a client is mostly beyond of one's influence. So, from one side a team is sure the problems are: clients or salesmen or management:). It wants all of them to change and to follow strictly the Scrum, Kanban, RUP or whatever guideline. Sometimes it's possible, but those are rare cases. Frustration grows up. What to do then?

Maybe start thinking locally, here and now

Let's forget about formal methodologies for a while and think about a team as an agent in the context of some organization.
Now we may observe a team is responsive to surrounding forces.
Instead of implement a methodology causing lots of organizational change (and also mess), let's do a local adaptive step toward the state of balance.

A local adaptive step is actually searching for a balance between all forces surrounding a team. Do whatever needed. You need for Use Cases - do Use Cases, need for formal docs - write a formal docs, don't need for iterations - don't do it at all!. So, a team is not expected to be agile, but it's expected to be balanced.

There are some of my insights on constraints a team have to be assured to do a local adaptive steps.
  • a team is fully responsible for expected results of its work
  • a team is free to make all decisions needed to achieve results
  • a team is free to reorganise its structure and process of work

Monday, November 25, 2013

The 'e' Letter Problem

I was inspired by Crista Lopes and her presentation to write this post. However, I found an analogy between her thoughts and my job, I recommend watching this presentation.

So, would you try to write a book or at least blog post without using words with the 'e' letter in the middle of a word? (In Polish it would be probably the 'a' letter). What implications it would cause? Would it be a challenge to express yourself giving the 'e' letter a miss?

Well, I think some of expectations about software development methodologies or techniques are similar to the 'e' letter restriction I mentioned:
  • How to estimate this requirement? But I only have three-words explanation and that's all?
  • How to start writing a code? But requirements will be precised soon ('soon' becomes 'now' when we will decide it is 'now')
  • How to refactor 10-years old code during a weekend?
  • How to deliver a software in 50% of time estimated with 50% of developers needed?
  • How to start *DD with a team not experienced enough?
  • How to accomplish more projects than our current capacity?
  • How to motivate people with a pay cutting at the same time?
  • How to boost our effectiveness without changing anything?
  • etc.

There is no magic in the world. All methodologies and techniques have its own preconditions. These must be guaranteed before start. But we do repeat the same mistake over and over again. We want to write a book without the 'e' letter.