Wpisy otagowane ‘berlin’

Mini konferencja w pracy

piątek, 18 Maj 2012

Pod koniec kwietnia odbyła się wewnętrzna konferencja w mojej pracy. Był to jeden z moich celów na ten rok - hura! udało się go zrealizować :)

Pomysł na konferencję zrodził się w głowie koleżanki z pracy w pod koniec zeszłego roku. Jeszcze w grudniu mieliśmy pierwsze spotkanie organizacyjne i sformowaliśmy nieformalny zespół. Niecałe pół roku później 80 osób mogło uczestniczyć w wydarzeniu składającym się z 12 wykładów (w 2 ścieżkach) i godzinnego „open space”. Konferencje wystartowała w czwartek o 15 i zakończyła się po 19.

Pokrótce o naszym pomyśle na konferencję: W moim biurze pracuje sporo osób: ponad 800. Regularnie odbywają się jakieś małe eventy, na przykład co 2 tygodniowe wykłady na tematy techniczne organizowane przez zaangażowane osoby w różnych częściach organizacji.

„Problem” polega na tym, że na poszczególne eventy z reguły przychodzą zawsze „te same osoby” i eventy przyciągają osoby związane z organizatorem wydarzania. Na sesje grupy A przychodzą członkowie zespołu A, B i C, a na warsztaty grupy X przychodzą ludzie z X, Y i Z. Nie było niczego co przyciągnęłoby wszystkich. Nie było wydarzenia na temat techniczny na którym pojawili by się przedstawiciele zespołów A, B, C, X, Y i Z.

Tak powstał pomysł na konferencję: Stworzyć coś, co przyciągnie wszystkich i pozwoli się nam nawzajem poznać.

By zrealizować naszą wizję przyciągnęliśmy prezenterów z różnych części organizacji. Następnie zadbaliśmy o odpowiednią promocję: wysłaliśmy maile na najróżniejsze grupy dyskusyjne, stworzyliśmy plakaty i ulotki, które rozprowadziliśmy po budynku.

Konferencję rozpoczęliśmy ”ice breakerem”, gdzie ludzie mieli okazję się troszkę poznać. Następnie mieliśmy wykłady zorganizowane tak, by ludzie „zmuszeni” byli zobaczyć coś nie związanego z ich specjalizacją. Zamiast np. ścieżki technicznej i agielowej mieliśmy ścieżki mieszane. Najpierw dwa równoległe wykłady techniczne, później dwa równoległe wykłady na temat procesu. Sesje było ograniczone w czasie do 25 minut by zbytnio „nie zanudzić” uczestników.

Na koniec odbył się godzinny „open space”. Była to część konferencji gdzie uczestnicy sami decydowali o czym będą rozmawiać. Sesja ta bardzo się podobała i w jej wyniku powstało kilka konkretnych inicjatyw. Następnym razem na pewno poświęcimy tej części programu więcej czasu..

Komentarze uczestników i „menadżmentu” po konferencji były bardzo pozytywne i już myślimy o tym kiedy zorganizować kolejną jej edycję…

A propo „menadżmentu”. Wszyscy organizatorzy byli „szeregowymi pracownikami”. Konferencja została zorganizowana ”przez nas”. Konferencję organizowaliśmy pomiędzy naszymi normalnymi obowiązkami – spotkania odbywały się w czasie obiadów lub po pracy. Oczywiście gdy już mieliśmy konkretny pomysł co chcemy zrobić zaczęliśmy zabiegać o wsparcie naszych przełożonych, które w końcu uzyskaliśmy (co wymagało równoległych rozmów w kilku „częściach organizacji”).

W każdym razie przekaz jest taki: Jeśli masz pomysł na coś ciekawego – zrób to! Małymi kroczkami, krok po kroku, da się zbudować coś dużego :)

Zresztą, to nie pierwszy raz..

Legacy Code Retreat Berlin

poniedziałek, 16 Kwiecień 2012

W ostatnią sobotę miało miejsce pierwsze berlińskie Legacy Code Retreat (w sile 16 uczestników). Pomogłem trochę w jego organizacji, głównie jednak wziąłem w nim udział jako uczestnik. W tym poście opiszę swoje wrażenia.

Format

Format Legacy Code Retreat został zaproponowany przez  J. B. Rainsbergera i jest podobny do „normalnego” Code Retreat – składa się z 6 sesji, w których pracujemy w parach i po każdej sesji kasujemy nasz kod. W przeciwieństwie jednak do normalnego Code Retreat nie zaczynamy od zera pisać „Grę w życie” a pracujemy już z dostarczonym kodem gry Trivia i naszym celem jest jego zrozumienie i bezpieczne zrefaktoryzowanie.

Nasz event poprowadzony został przez Martina Klose, który świetnie spisał się w roli facylitatora. Rozpoczęliśmy od krótkiego wprowadzenia, gdzie Martin omówił 4 rules of simple design” i algorytm refaktoryzacji legacy kodu. Z ciekawostek, event prowadzony był po angielsku, z czego bardzo się cieszę, jako że byłem jedyną osobą która nie potrafiłaby pracować po niemiecku..

Fajnym motywem podczas rozpoczęcia dnia było ćwiczenie, które wykonaliśmy by „szybko się poznać” w grupie. Martin polecił nam ustawić się w szeregu, gdzie na jednym końcu były osoby, które uważały się za wymiataczy w TDD a na drugim końcu, osoby, które dopiero rozpoczynały swoją przygodę z TDD. Następnie Martin zasugerował by osoby początkujące pracowały w ciągu dnia z osobami doświadczonymi.

  • Sesja 1 – Zapoznanie z kodem
    • Pierwsze starcie z kodem. W tej sesji rozpoczęliśmy pisanie testu charakteryzacyjnego i zajęło nam to praktycznie cały dostępny czas (przy czym prawie 10 minut zmarnowaliśmy na skonfigurowanie JUnita, który z jakiegoś powodu nie chciał dodać się do projektu, ech…). Dev z którym pracowałem w parze nigdy nie pisał w Javie, także trochę czasu spędziliśmy również na wytłumaczenie podstawowych rzeczy na temat Javy.
  • Sesja 2
    • Martin sugeruje wszystkim zastosowanie techniki Golden Master. Sprowadza się to mniej więcej do tego co robiłem w poprzedniej sesji, więc z moim nowym dev partnerem ruszamy do kodowania. Po parunastu minutach mamy już gotowy test, który porównuje wykonanie programu z naszą „złotą kopią”. Jesteśmy pewni siebie i wtedy pojawia się Martin z pytaniem „Skąd wiecie, że wasz test jest wystarczający?” „Jaką macie pewność, że pokrywa on wszystko to, co robi kod?”. Jako stary wyjadacz „testowania mutacyjnego” nie daję się zbić z tropu i przystępujemy do „testowania” naszego testu poprzez celowe wprowadzanie błędów do kodu produkcyjnego i obserwowanie czy nasz test to wykrywa. Martin miał rację.. Są pewne modyfikacje, których nasz test nie wyłapuje. Resztę sesji spędzamy na udoskonalaniu naszego testu.
  • Sesja 3
    • W tej sesji skupiliśmy się na refakoryzacji kodu. Konkretnie poprawialiśmy czytelność (łatwość zrozumienia) instrukcji warunkowych, np. „if (roll % 2 != 0)” na „if(canLeavePenatlyBoxAfter(roll)”
  • Sesja 4
    • Refaktoryzacja kodu małymi kroczkami. Reguły: Ustaw timer na 2 minuty. Pracuj z kodem i wrzucaj swoje zmiany do repozytorium kodu. Jeśli w ciągu 2 minut nie zdążysz wrzucić niczego do repo, cofnij swoje zmiany do momentu ostatniego commitu w repo i rozpocznij od nowa. Po drugim razie, gdy dopadł nasz timer, pracowaliśmy w naprawdę malutkich kroczkach i w sumie daliśmy radę! Generalnie, im częściej wrzucamy nasze zmiany do repo tym lepiej (mniej konfliktów, częstszy feedback), także myślę że ćwiczenie wykonane w tej sesji było wartościowe.
  • Sesja 5
    • Celem tej sesji było zidentyfikowanie fragmentów kodu, które dało się zamienić w pure functions„. Podczas tej sesji pracowałem w Rubym (wszystkie poprzednie były w Javie) i odczułem na własnej skórze, jak wspaniałe wsparcie do refactoringu ma Java.. (Np. IDE w Javie było dużo sprytniejsze w znajdywaniu duplikacji w kodzie). Jedną z zalet „wyciąganych” przez nas funkcji było to, że można je było stosunkowo łatwo przetestować.
  • Sesja 6
    • W czasie tej sesji, po zidentyfikowaniu i stworzeniu kilku „pure functions” mieliśmy przyjrzeć się im bliżej i zastanowić się, gdzie można by je przenieść – jednym słowem, zaczęliśmy „wyciągać klasy”. Cały schemat refactoringu można opisać mniej więcej tak:
      • Extract method
      • Replace fields with parameters to the method
      • Make method static
      • Test the method
      • Find a new home for the method, move to (and maybe create) new class
    • Alternatywnym sposobem, wypróbowanym przez niektórych uczestników było zastosowanie refaktoringu „pull up” i przeciągnięcie pewnych funkcjonalności do „nowej” klasy bazowej, a następnie zastosowanie refakoryzacji „replace inheritance with delegation” – coś, co mam w najbliższym czasie przetestować.

Scala

Po trzeciej sesji mieliśmy długi lunch, w czasie którego rozmawiałem o Scali. Temat, który mnie interesował to testowanie i jak w podejściu funkcyjnym radzimy sobie z problematycznymi zależnościami kodu, takimi jak baza danych czy odwołania do innych systemów. W podejściu obiektowym, używamy w tym celu „mocków’. Z tego co zrozumiałem, w Scali ważnym pojęciem jest kompozycja funkcji, i właśnie odpowiednio korzystając z kompozycji możemy „wstrzykiwać” albo prawdziwą funkcję, która pobiera dane z bazy danych, albo funkcję „testową”, która tylko udaję bazę danych. I tak testowanie takiego systemu sprowadza się do przetestowania funkcji, z których składa się nasz system na poziomie jednostkowym, a następnie przetestowanie całego systemu (złożonej funkcji), gdzie być może niektóre funkcje zastąpione są zmienikami na potrzeby testów.

Organizacja

Jeśli chodzi o organizację tym razem kupiliśmy małe śniadanie w piekarni a na obiad poszliśmy do restauracji – wyszło to dużo taniej niż zamawianie kateringu.

Generalnie, bardzo nam się podobało i już myślimy o kolejnym evencie, może w czerwcu?

Zachęcam Cię do organizacji Legacy Code Retreat w swoim mieście!

Ps. Zdjęcia z wczoraj można zobaczyć tutaj..

 

ALE2011 – Koordynacja wolontariuszy

środa, 14 Wrzesień 2011

Poniżej zbiór faktów i wniosków na temat „organizacji wolontariuszy”.

Koordynacją wolontariuszy zajmowałem się razem z drugim „Gregiem”. Myślę, że nasz duet w miarę dobrze się sprawdził, mi w każdym razie współpracowało się z Gregiem dobrze ;)

Ciekawostka: W czasie organizacji ALE2011 była to normalna sytuacja (kilka osób odpowiedzialnych za jeden obszar, bez formalnego lidera). ALE2011 wprowadziło koncepcję „sof” (nawiązując do „Conference Chair”).

Podczas konferencji do zadań wolontariuszy należało: rejestracja uczestników, odpowiadanie na pytania w punkcie informacyjnym, pilnowanie czasu prezentacji, zbieranie feedbacku po prezentacji, pomoc w opiece na dziećmi, robienie zdjęć oraz reagowanie na nie przewidziane wydarzenia (np. wyczerpanie się baterii w mikrofonie).

Rekrutacja

Wolontariuszy próbowaliśmy rekrutować za pomocą Twittera, strony eventu, facebooka (bezpośrednie kontakty) i innych sieci społecznościowych. Wysłałem też e-maile do kilku uczelni w Berlinie oraz do Wrocławia. W sumie udało nam się z rekrutować 8 osób, z czego jedna się rozchorowała a druga „nie dawała znaku życia po rejestracji”.

W zespole wolontariuszy były 3 osoby z Berlina (Lina z Kolumbii, Budi i Melisa z Indonezji), 2 osoby z Brna (Petr i Michal) oraz Adam z Krakowa.

  • Wszyscy zarejestrowani wolontariusze dowiedzieli się o możliwości bycia wolontariuszem bezpośrednio od kogoś, kogo znali.
  • Z 8 zarejestrowanych wolontariuszy, 2 nie dotarło na event. By „bez problemu” poradzić sobie z zadaniami, jakie stały przed wolontariuszami potrzeba by około 14 osób.
  • Deadline „rejestracji” wprowadzał zamieszanie. Wolontariusze nie byli pewni czy można się jeszcze rejestrować.
  • Ekipa wolontariuszy była świetna ;)
  • Plakaty na uczelni! By dotrzeć do studentów, warto by było powiesić plakaty na uczelni. Niestety nie wszyscy śledzą Twittera i wchodzą na stronę konferencji ;)
  • Bezpośredni kontakt w profesorami na uczelni! Samo wysyłanie maili okazało się nie skuteczne. Niezbędny jest „osobisty” kontakt, by nie być potraktowanym jako spam.
  • Zorganizować spotkanie informacyjne na uczelni. By nawiązać bezpośrednią znajomość ze studentami, i zachęcić ich do zaproszenia znajomych.
  • Zamiast „deadlineu” wyswietlać, ile jeszcze miejsc zostało.
Grafik pracy
  • Grafik wolontariuszy został stworzony w google spreadsheet.
  • Na przyszłość, padła sugestia by pozwolić wolontariuszom się „samo zorganizować” zamiast przydzielać im godzinny samemu (lepsze, niz powiedzennie im, że jeśli chcą, mogą się wymieniać)
Organizacja
  • Spotkanie organizacyjne powinno odbyć się dzień wcześniej w miejscu, gdzie jest konferencja! Na spotkaniu powinny obecne być osoby odpowiedzialne za kluczowe elementy programu (lightening talks, open space, sesje) lub wcześniej z tymi osobami powinno się dokładnie wyjaśnić jak będą wyglądać poszczególne elementy programu  i jaki może być wkład wolontariuszy. My mieliśmy spotkanie organizacyjne w moim biurze, a potem udaliśmy się na obiadokolację do pobliskiej knajpy. Było miło i pomogło nam się to trochę poznać, ale mogło być lepiej (mogliśmy lepiej się przygotować na pierwszy dzień konferencji).
  • Spróbowaliśmy zorganizować wolontariuszom coś ciekawego w Berlinie w ramach integracji. Rezultat:  Jazda po ciemku  autobusem nie jest aż taka atrakcja ;) Lepiej było by zrobić ciekawy spacer. (btw, w dzień jazda piętrowych autobusem to super sposób na zobaczenie Berlina).
  • Ustalić wcześniej jak zbierany będzie feedback po sesjach. Zapewnić materiały do zbierania feedbacku przy drzwiach. Nie marnować papieru (używaliśmy karteczek samoprzylepnych, trochę ich poszło..).
  • Przygotować kilka przykładowych scenariuszy + zalecenia co w danej sytuacji robić. (Np. mikrofon przestaje działać, ktoś kogo nie ma na liście uczestników twierdzi, że zapłacił, komuś zginął laptop, speaker przekracza czas i zdaje się nie kończyć)
  • W czasie rejestacji korzystać bezposrednio z google docs lub z excela? Mieć dostęp do większego biurka / kilku biurek rejestracyjnych (by więcej osób na raz mogło sie rejestrować).
  • Zadbać o odpowiedni sponsoring dla wolontariuszy (na wszystkie wyjścia). U nas zabrało np. sponsoringu na obiad konferencyjny (uczestnicy płacili sami).
  • „Przećwiczyć rejestracje” i inne scenariusze na dzień przed konferencją z wolontariuszami (a nie tylko opowiadać).
Tyle zapamiętałem/zebraliśmy podczas retrospekcji..

Organizując światowy dzień CodeRetreat

środa, 14 Wrzesień 2011

Dziś rozpocząłem proces organizacji CodeRetreat Berlin w ramach światowego dnia CodeReteat.

Na razie założyłem tylko grupę na googlach i szukam chętnych do pomocy. Przed nami „trochę pracy”. Musimy znaleźć sponsorów, salę, przeprowadzić rejestrację, zorganizować obiad i załatwić wiele innych małych rzeczy. Damy radę! Po ostatnim CodeRetreat w Berlinie, ludzie są pozytywnie nastawieni :)

Światowy dzień CodeRetreat odbędzie się w sobotę, 3 grudnia 2011. Na razie na liście miast uczestniczących w projekcie nie ma żadnego miasta z Polski, mam nadzieję, że wkrótce się to zmieni ;)

3 grudnia, przez około 32 godziny, gdzieś na świecie odbywać się będzie CodeRetreat. W czasie przerw pomiędzy iteracjami będziemy łączyć się na wideo konferencjach z innymi lokalizacjami i na bieżąco będziemy wymieniać się wrażeniami i pomysłami.

Czy weźmiesz udział w światowym dniu CodeRetreat? W jakim mieście?

ALE2011 w Berlinie

niedziela, 11 Wrzesień 2011

W piątek skończyła się pierwsza paneuropejska konferencja Agile Lean Europe. O konferencji możecie poczytać między innymi na blogu Marcina lub na Twitterze.

Konferencja była dla mnie szczególna, gdyż pierwszy raz wziąłem w niej udział jako koordynator wolontariuszy (wcześniej byłem „tylko” wolontariuszem).  Wiązało się to z dużo większym zaangażowaniem podczas eventu w sprawy „organizacyjne” i mniejszą możliwością udziału w samej konferencji.

Nie mniej jednak miałem okazję poznać sporo fajnych osób i przeprowadzić dużo ciekawych konwersacji, za które swoim rozmówcą chciałbym tutaj podziękować.

Na konferencji:

  • Dowiedziałem się o Agile Tour – może w ten sposób można sprowadzić konferencję agile’ową do Wrocławia?
  • Spotkałem się z propozycją by w czasie planning pokera zamiast estymować złożoność zadań, estymować to jak bardzo dane zadanie jest dla nas zagadkowe/niepewne.
  • Twój manager stosuje micro management? Nie gódź się na to! Walcz! ;) To w naszych rękach jest zmiana świata na lepszy gdzie króluje samoorganizacja ;)
  • W czasie retrospekcji co najmniej 50% czasu spędzaj na rozmowach o przyszłości. Jakie konkretnie kroki przeprowadzicie, by poprawić to co jest „teraz”?
  • Potrzebujemy studentów, którzy „wiedzą co to agile”. Zaproponuj by wygłosić wykład na uczelni, wyjdź na przeciw do studentów. W tym miejscu chciałbym podziękować doktorowi Madeyskiemu za to, że prowadzi świetne kursy wprowadzające w tematykę Agile’ową na Politechnice Wrocławskiej.
  • Poznałem autora techniki Pomodoro, który właśnie przeprowadził się do Berlina ;)
  • Być może w Berlinie stworzymy regularne spotkania dla geeków, inspirowane XTC
Najwięcej „dowiedziałem się” o tym jak organizować zespół wolontariuszy – w praktyce. O tym w następnym wpisie ;)