niedziela, 28 października 2012

Samoorganizacja a token lidera

Czytając ostatnimi czasy internet zauważyłem rzucane masowo z lewa i prawa słowo "Lider". Konteksty są różne : ktoś napisze w poście o procesie wyłaniania lidera a ktoś inny w radosnym szale przypisze cechy lidera swojej pozycji w organizacji. Ba spotkałem się nawet z nazwaniem mojej skromnej osoby liderem łódzkiego juga (sic ku*wa!). Dlaczego tak bardzo każdy chce być liderem? (a nawet ostatnio zauważyłem, że nie wystarczy być liderem - trzeba być charyzmatycznym liderem)

Ze względu na przeterminowaną hierarchiczną strukturę wielu organizacji ktoś kto ma w nazwie stanowiska słowo "lider" zarabia więcej pieniędzy. Z drugiej strony poprzez to stanowisko możemy sobie zrekompensować przeróżne kompleksy siedzące w nas od czasów młodości. Jeśli jakiś mały nerdzik był szykanowany w podstawówce to teraz czas aby obrócić strukturę i pokazać (bogu ducha winnym) ludziom kto teraz rozdaje karty! No i na pewno żona w domu się ucieszy :

- Nie uwierzysz Zośka, dzisiaj przyszedł dyrektor i powiedział "Stefan - od teraz będziesz liderem".
- Super Stefan ale weź wyrzuć śmieci
- I'M A LIDAAAAAA!
- A i weź pimpka na spacer

W czym lider przeszkadza

Nauczka dla mnie na dziś - notować gdzieś namiary na wszystkie ciekawe badania. Jeszcze zanim postanowiłem dzielić się ze światem swoimi przemyśleniami przy okazji zbierania materiałów do pracy z kategorii "Dlaczego Agile jest zajebisty" natrafiłem na szereg ciekawych badań o tym jak to ludzie gładko przechodzą w tryb pasywności gdy w pobliżu pojawia się inna osoba niezwykle aktywna (w NLP to się zdaje nazywało "narzuceniem" i "przejmowanie ramy"). Zupełnie tak jakby w układzie odizolowanym poziom aktywności pozostał stały. Osobę aktywna popularnie bywa nazywana liderem. Problem polega na tym, że osoba pasywna automatycznie traci możliwość wejścia w niezwykle wartościowy stan hiper-kreatywności i hiper-aktywności - i nie chodzi tu o flow (info dla tych co wiedzą co to je to flow ;)). Temat jest na tyle złożony i fascynujący, że poświęcę mu kiedyś osobny wpis. Na razie musicie mi uwierzyć, że tak jest.

Drugim problemem będzie niedostępność tego lidera. Gdy ktoś już wytycza ścieżkę i nagle gdzieś znika to zespół nie do końca może wiedzieć o co mu chodziło i w którą stronę chciał iść. Z moich obserwacji wnioskuję, że kierunkiem w którym podąży zespół najczęściej jest kierunkiem aneksu kuchennego i rozmów o byle czym. Oczywiście mogą istnieć ludzie, którzy tak dobrze komunikują swoją wizję, że wszyscy wiedzą dokąd zmierzamy - ale ilu jest takich ludzi?

Wczoraj (o ile tylko udało mi się skończyć ten artykuł w niedzielę) miałem dużą, naprawdę dużą przyjemność uczestniczyć na Warsjawie w warsztacie Jeden dzień z trudnym klientem - zwinny projekt w formie gry . W trakcie warsztatów robiliśmy mały projekcik manualny a prowadzący próbowali symulować nieprzyjemne sytuacje życiowe. Udało nam się tak zbudować ramy grupy, że nie wykształciła się konkretna osoba o dominującym wpływie (starałem się dążyć do tego świadomie - nie wiem jak inni). Gdy prowadzący przyszli "zasymulować stratę lidera" wybrali osobę, którą akurat w danym momencie wykazywała najwięcej inicjatywy. Miało to praktycznie zerowy wpływ na naszą pracę!

Brak Lidera

Czy brak lidera będzie więc rozwiązaniem? Istnieje pewien psycholgiczny efekt zwany Rozmyciem odpowiedzialności, który mówi że niebardzo (to wtedy gdy 60 osób patrzy się jak ktoś morduje kobietę i nikt nie dzwoni na policję bo przecież na pewno ktoś inny zadzwowni - zdarzenie wydarzyło się naprawdę!). Z drugiej strony im więcej chłonę wiadomości z zakresu cybernetyki i teorii złożoności tym bardziej wierzę, że ta sytuacja może być opanowana i przynieść wiele wartości.

Jeśli zarówno lider jak i brak lidera mogą być złymi rozwiązaniami to co nam zostało? A gdyby tak każdy był liderem?

Token lidera

Po raz pierwszy na koncepcję "lidera w zależności od sytuacji" natknąłem się czytając o strukturach społecznych plemion jeszcze przed zrodzeniem się "gospodarki rolnej". Wyobraźmy sobie plemię kilku osób (coś jak team agile). Jedna osoba zna się na polowaniu na mamuty a druga umie rozpoznać trujący gatunek grzyba. W trakcie polowania ma to jak największy sens by pierwszy osobnik przejął dowodzenie ale gdy w okół nie ma zwierza to dowodzenie przejmie drugi z wymienionych. Wizja jest jasno określona - chodzi o przetrwanie grupy. (więcej ciekawych rzeczy na : http://en.wikipedia.org/wiki/Tribalism

Podobnie w teamie, jedna osoba może znać się lepiej na projektowaniu rozwiązań wielowątkowych a inna jest dobrze obeznana z zagadnieniami bazodanowymi. I na CH*J ja się pytam musi tu być jakiś lider, który deleguje zadania?Ano jest jedna sytuacja, która to usprawiedliwia - gdy osoba, która powinna sama wyskoczyć o token lidera jest nieśmiałym, nieprzystosowanym społecznie introwertykiem. Ale zamiast łykać środki przeciwbólowe trzeba po prostu przestać napierdalać głową o ścianę - wrócimy do tego dalej w punkcie "Świadoma samoorganizacja".

Poziom lidera - jak się uchronić od złej dynamiki

Powyższe dzieło przedstawia taką niby wizualizacje "zostawania liderem w czasie". Każdy kolor symbolizuje innego członka zespołu. w momencie gdy sytuacja wymaga krytycznego poziomu danej osoby zostaje ona po prostu liderem i każdemu wychodzi to na dobre.
Ten rysunek z kolej pokazuje sytuacje często spotykaną w korporacji - jedna osoba jest mianowana liderem i nie pozwala w krytycznej sytuacji zdobyć tokenu lidera osobie kompetentnej do rozwiązania problemu. Na końcu widać sytuacje, gdzie osoba mianowana faktycznie powinna dostać token lidera ze względu an swój zakres umiejętności ale w tej strukturze nie am to znaczenia.
Na koniec bardzo niebezpieczna sytuacja znana wszystkim jako "wykształcenie się naturalnego lidera". Żeby zrozumieć tę dynamikę trzeba znać koncepcję "pingowania społęcznego" i dopasowywania się do struktur. Tutaj w uproszczeniu przyjmijmy, że dana osoba tak często staje się liderem, że sama wierzy w to, ze jest liderem permanentym. Jeśli cały proces odbędzie się w sposób nieświadomy to tak jak w tej historyjce z małpami - zespół też w to uwierzy i nie będzie kwestionował tego porządku. Nastąpi niekoniecznie najoptymalniejsza stabilizacja teamu (a nawet stagnacja).

Świadoma samoorganizacja

Jak sprawić by zespół optymalnie sam się organizował a introwertycy mieli odwagę podjąć token lidera? To proste. Z czego szkolą się zazwyczaj programiści : Technologie. A czego potrzebują, żeby świadomie pokierować procesem samoorganizacji grupy : Psychologii i Socjologii. EUREKA KU*WA NORMALNIE. Tylko dlaczego jedyne szkolenia z tego zakresu o jakich słyszę to "szkolenia managerskie" dal osób, które już nie prorgamują? No dobra czasem wysyła się informatyków na szkolenia z tzw "umiejętności miękkich" ale to raczej dla wygody ludzi, którzy z tymi informatykami się komunikują.

Ciekawostka

Początkowo chciałem nazwać tę koncepcję "liderem sytuacyjnym" ale okazało się, że ta fraza została już podchwycona ---> http://en.wikipedia.org/wiki/Situational_leadership_theory . Autorem koncepcji według wiki jest ten sam człowiek, który napisał "one minute manager". Książki jeszcze nie czytałem ale z referencji słyszałem, że jest totalnie zjebana i symbolizuje całe zło projektowe z jakim walczą metodyki zwinne. Przeczytam- ocenię. Tymczasem faktycznie w modelu "lidera sytuacyjnego" brakuje poziomu M5 - NIE PRZESZKADZA

Na zakończenie recenzja Warsjawa 2012

Było fajnie, mili ludzie i dobre jedzenie. Do zobaczenia za rok!

piątek, 19 października 2012

JUG Lodz Start-up a prawo

Żyjąc w świecie technologii czasem łatwo zapomnieć jakie prawa rządzą rzeczywistością poza firewallem. Bardzo ciekawa prezentacja.

Start-up a prawo. Paweł Jóźwiak.

niedziela, 14 października 2012

Czym jest HAK?

Haki w kodzie

Wszystkie dzieci wiedzą, że hacki są złe bo zmniejszają jakość kodu ale czy czy ktoś z was zastanawiał się "jaka jest istota haka"? Jak go zdefiniować i po czym rozpoznać, że właśnie zastosowaliśmy hak? W celu uzyskania odpowiedzi wciśnij 5.

Rozpatrywany przypadek (u)życia





Kod poniżej stanowi próbę implementacji wspomnianej specyfikacji. Mamy klasę "Osobą" , która to klasa zawiera pewną narodowość określającą wytrzymałość alkoholową.

 
 public class HAK {
    public static void main(final String[] args) {
        final Osoba polak = new Osoba(POLAK);
        final Osoba rosjanin = new Osoba(ROSJANIN);
        final Osoba anglik = new Osoba(ANGLIK);

        System.out.println("10 promili");
        System.out.println("polak : " + (polak.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
        System.out.println("rosjanin: " + (rosjanin.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
        System.out.println("anglik : " + (anglik.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
    }

    static class Osoba {
        private final Narodowosc narodowosc;

        private Osoba(final Narodowosc narodowosc) {
            this.narodowosc = narodowosc;
        }

        public boolean czyPrzezyje(final int promile) {
            return narodowosc.getLimitAlkoholowy() > promile;
        }
    }

    static enum Narodowosc {
        POLAK(16), ROSJANIN(16), ANGLIK(3);

        private final int limitAlkoholowy;

        private Narodowosc(final int limitAlkoholowy) {
            this.limitAlkoholowy = limitAlkoholowy;
        }

        public int getLimitAlkoholowy() {
            return limitAlkoholowy;
        }

    }
}

Gdy odpalimy program zobaczymy, że ze wspomnianej trójki: Polak,Rosjanin i Anglik - ten ostatni nie powinien przeżyć. Na razie wygląda to nieźle ale co się stanie gdy nasz Anglik postanowi opuścić swą zmąconą kryzysem ojczyznę, przyjąć obywatelstwo naszego pięknego kraju co zaowocuje pojawieniem się w jego obiekcie Narodowości "POLAK"? Program pochopnie uspokoi pijącego co może doprowadzić do tragedii!!! (podobny efekt może się pojawić gdy Rosja podbije Europę Zachodnią)

Czas na hak

Najszybszy hak :
 

 public boolean czyPrzezyje(final int promile) {
            return narodowosc.getLimitAlkoholowy() > promile 
&& nieprawdaZeBylAnglikiem();
        }

Można oczywiście przechować pierwotną narodowość i jej właśnie użyć do znalezienia limitu alkoholowego ale co gdy taka parka angielska przyjmie polskie obywatelstwo i powije dziecko w naszym przecudownym kraju? Jaki limit alkoholowy będzie miał ten potomek? Chyba intuicyjnie czujemy, że taki sam jak rodzice. I teraz pojawia się krytyczny moment a) możemy iść dalej w haki:
 

 public boolean czyPrzezyje(final int promile) {
            return narodowosc.getLimitAlkoholowy() > promile 
&& sprawdzCzyJegoPrzodkowieOdIlusTamPokolenTeżByPrzezyli();
        }

b) Możemy chwilę się zastanowić dlaczego pomimo tego, że specyfikacja nic o tym nie mówiła to historia przodków wpływa na wytrzymałość alkoholową. Powinno nas to doprowadzić do pewnej generalnej reguły, która określi jednoznacznie przypadki, z którymi męczyliśmy się do tej pory

Czas na generalna regułę

 

 public class OgolnaZasada {

    public static void main(final String[] args) {
        final Osoba polak = new Osoba(POLAK);
        final Osoba rosjanin = new Osoba(ROSJANIN);
        final Osoba anglik = new Osoba(ANGLIK);

        System.out.println("10 promili");
        System.out.println("polak : " + (polak.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
        System.out.println("rosjanin: " + (rosjanin.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
        System.out.println("anglik : " + (anglik.czyPrzezyje(10) ? "przezyje" : "nie przeżyje"));
    }

    static class Osoba {
        private final Genotyp genotyp = Gatunek.budujGenotyp();
        private final Narodowosc narodowosc;

        private Osoba(final Narodowosc narodowosc) {
            this.narodowosc = narodowosc;
        }

        public boolean czyPrzezyje(final int promile) {
            return genotyp.okreslWlasciwosc("WYTRZYMALOSC_ALKOHOLOWA") < promile;
        }

    }

    static class Genotyp {
        private final Map geny;

        public Genotyp(final Map genyInicjalizujące) {
            geny = genyInicjalizujące;
        }

        public int okreslWlasciwosc(final String nazwaWłaściwości) {
            return geny.get(nazwaWłaściwości);
        }
    }

    static class Gatunek {
        public static Genotyp budujGenotyp() {
            final Map geny = new HashMap();
            geny.put("WYTRZYMALOSC_ALKOHOLOWA", obliczOdziedziczonąWytrzymałośćAlkoholową());
            return new Genotyp(geny);
        }

        private static int obliczOdziedziczonąWytrzymałośćAlkoholową() {
            return new Random(currentTimeMillis()).nextInt() % 16;
        }
    }
}

Czas zdefiniować Hak

W świetle podanego przykładu będzie to miejscowe rozwiązanie problemu olewajac generalną zasadę, która być może nie została nawet wykryta. Wszystko się zjebie gdy albo : 1) generalna regułą się zmieni (Anglicy zwiększą odporność alkoholową) lub: 2) Generalna zasada zacznie się manifestować w innych, jeszcze nie zhaczonych miejscach kodu (np. dołożymy Włocha)

Oczywiście rozwiązanie z genami może okazać się hakiem w kontekście jakiejś szerszej reguły

niedziela, 7 października 2012

Agile i skany mózgu

Poniżej link do bardzo ciekawego tekstu starającego się interpretować "zwinną rzeczywistość" podpierając się skanami mózgu. Bardzo polecam aby każdy sam przeczytał ten tekst. Znajdziecie w nim pomiedzy innymi takie o to informacje:

http://www.infoq.com/articles/brain-scrum-maza

  • Groźba wydalenia z grupy powoduje takie same reakcje neuronalne jak ostry ból. Ludzie są stworzeni do tego aby pracować w oparciu o kontakty społeczne wewnątrz grupy
  • Bez względu jak wielu domorosłych psychologów będzie swoje wywody na grupach podpierać piramidą Maslova - to jednak nie jest ona do końca poprawna
  • Naturalne motywatory : autonomia oraz uczciwe zasady społeczne (nie jest to wspomniane w przytoczonym tekście ale ten czynnik jest krytyczny. Jednakże aby go zrozumieć potrzebny jest osobny artykuł). Zamiast tego pojawia się nowy model SCARF.
  • Wytwarzanie oprogramowania to nie "seryjna produkcja rzeczy" i tutaj obowiązują inne zasady pracy niż w fabryce.
  • I wiele innych...