pondelok 30. novembra 2015

Kreatívne prostredie a.k.a frustrácia z práce

Myslím si, že empatický manažér alebo scrum master si ľahko všimne, keď je jeho tím frustrovaný, alebo nefunguje dobre. Stačí sa pozrieť na výsledky, ako dodáva, alebo počúvať, čo sa povráva na chodbách, prípadne ako vyzerajú retrospektívy a celodenné fungovanie tímu. Pokiaľ mu to nie je jedno, začne premýšľať o tom, ako situáciu zlepšiť.

Nápadov, ako situáciu zlepšiť môže mať mnoho. Môže ho napríklad napadnúť "rýchla akcia", pretože nechce venovať situácii veľa času a možno ho už štve ako dlho problém trvá. A tak sa rozhodne (v prípade ak ide o manažéra) niekoho vyhodiť, alebo vymeniť scrum mastera. Alebo v lepšom prípade niekoho pošle na 3-dňové školenie (korporátny sheep dip) s očakávaním, že človek sa vráti ako "odborník" a že situácia sa tým vyrieši.

Ak to nezaberie, môže skúsiť iný nápad. Napríklad, zaviesť rotáciu ľudí. Čas od času môže povymieňať ľudí, aby sa nedostali do "provoznej slepoty", alebo aby každý mal možnosť pracovať na niečom inom, aby ľudia mali stále pocit, že sa učia. V prípade, ak firma bojuje s technickým dlhom legacy kódu formou maitenance oddelenia, tak ľudia sa môžu preplachovať aj tam. A tak sa tím vlastne nikdy nestihne stabilizovať, keďže to (podľa psychologických výskumov) trvá tak zhurba pol roka.

Ďalším nápadom môže byť napríklad skúsiť zaviesť párové programovanie. Myslím si však, že toto napadne skôr scrum mastera ako manažéra. Dvaja programátori sedia za jedným počítačom s jednou klávesnicou. Jeden píše, druhý ho kontroluje, a po hodinke alebo nejakom čase sa striedajú. Má to veľa výhod a aj poprední programátori to veľmi chvália. Ale nariadiť takúto zmenu "zhora" môže mať tiež negatívny efekt - ľudia môžu byť k takémuto prístupu skeptickí, pretože ak to predtým nikdy neskúšali, predstava, že budú musieť robiť "s tým" alebo "s oným", ich neláka. A tiež to vyžaduje vyjdenie z určitej komfortnej zóny, čo dokážu iba tí čo naozaj niečo "chcú".

Iný príklad môže zahŕňať ďalšie drastickejšie zmeny, ako napríklad zmena kompletného procesu. Napríklad "od dnes sme agile". Alebo rôzne typy vyhrážok či odmien, extra bonusov. Každý manažér má rôzne nápadité "nápady", ktorými si môže myslieť, že si ďalší problém môže škrtnúť z (asi dlhého) zoznamu problémov.

V týchto príkladoch, a vlastne je úplne jedno, koľko ich ešte vymyslím, a aké super overené sú, budem bohužiaľ veľmi skeptický. Myslím si, že je veľká pravdepodobnosť, že to nevyjde. Prečo? Jednoduchá odpoveď znie, pretože prichádzajú od manažéra. To, že tím nefunguje, si vlastne všimol manažér. Riešenie na problém tiež objavil manažér (alebo scrum master).


Základom je diskusia

Je myslím úplne v poriadku, keď si problém všimne niekto iný. Samozrejme, veď problém tímu môže byť aj v tom, že si sami nevidia ďalej od nosa. Dôležité však je neísť ďalej. Pretože funkcia tímu v agile ale aj z psychologického hľadiska je hlavne samostatné riešenie problémov, alebo úloh. A to, že má tím problém, si myslím že sa nijakým spôsobom nelíši od iných úloh. Je to tiež úloha, ktorú by mal tím zvládnuť sám (samozrejme pomoc tam byť môže).

Jeden z princípov agile hovorí:

"Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done."

Myslím si, že ak má tím problém, je najdôležitejšie aby o tom vedel sám tím, aby si to naozaj uvedomoval. Žiadne riešenie, ktoré manažér poskytne, problém nevyrieši, ak tím sám neprijme fakt, že má problém.

Predstava manažéra ako "zadávateľa príkazov", alebo egoisticko-naivného "ja viem najlepšie čo pomôže, pretože mám informácie a skúsenosti, ktoré oni nemajú", veľmi rýchlo stroskotá na výsledkoch. Tím sa "zlepší" len naoko. Prečo?


Nápady nemusia byť zlé

Povedzme si to na rovinu. Manažér nemá vo firme úlohu kreatívneho prispievania k produktu, ktorý firma vytvára. On sa nestretáva s každodennou pracovnou rutinou tímu, s každodennými problémami a "aha!"-efektami, ktoré ľuďom v tom tíme formujú myslenie. Skúsenosti, ktoré tím získava svojou každodennou prácou, tým, že manažér presadzuje vlastný pohľad, bohužiaľ začnú vychádzať nanivoč.

Samotná kreativita ľudí, ktorá v tvorbe softvéru je primárne žiadanou vlastnosťou, je pošliapavaná manažérskymi rozhodnutiami. Je dôležité, aby tím mal možnosť svoje skúsenosti aplikovať na ďalšie zlepšovanie. Aby cítil slobodu a otvorený priestor "nekonečných možností", a k tomu by mal manažér a všetci ostatní pomáhať. Týmto smerom si myslím, že by mal tím viesť.

Aby sa odstránili vzťahové problémy, komunikácia, aby ľudia VEDELI byť k sebe úprimní. Nejde o to, aby bol v miestnosti "hluk" ako každému ide huba, ako sa tu super komunikuje, ide o to, aby človek dokázal bez manipulácie a presadzovania vlastného ega úprimne "ľúbiť" softvér, na ktorom pracuje, aby sa každý mohol tešiť z toho, čo robí, pri vzájomnom rešpekte.

A problém preto často nie je v zlom procese, alebo že sa nerobí párové programovanie, alebo, alebo.. Problém je často v tom, že sa potrebujeme vedieť zastaviť bez strachu z nestihnutia termínu, a riešiť problém. Že sa občas potrebujeme vydať smerom, ktorý možno nikam nebude viesť, ale že to nebude znamenať náš "koniec". Potrebujeme mať pocit, že náš fail nevadí. Fail safe. Ako manažér, aj tam je naša úloha vhodná.

Druhou vecou je, že musíme byť úprimní. Musíme svoje osobné vlastnosti zlepšovať, musíme sa chcieť zlepšovať. Budovať svoju osobnosť. Dôvodom je, že nám to dá otvorenú myseľ. Vedieť, že nie sme dokonalí, vedieť o svojich nedostatkoch a vidieť tú diaľku vecí ktoré nevieme, nám pomôže pochopiť druhého človeka, pretože pravdepodobne má tiež nedostatky, tak ako my, a my budeme vedieť, aké ťažké je na sebe pracovať. To je podľa mňa myslené už spomenutou vetou:

"Build projects around motivated individuals."

Manažér ako služobník

Vo svojej podstate, prečo vlastne existuje softvérová firma? Moderné softvérové firmy sa začali formovať s príchodom mikropočítačov. Je snáď každému jasné, že ľudia pracujúci s mikropočítačmi 70-tych a 80-tych rokov boli nadšenci. Vtedy sa kašľalo na nudné procesy, vtedy išlo o to vyhrať vojnu o prestíž, o novinku, o to byť najlepší na trhu.
 

Existovala obrovská diverzita počítačov a vlastností, dnes už takú nemáme. Všetko sa nejak štandardizuje, a čo je vlastne dobre, pretože nám to zlepšuje systematizáciu práce, jednoduchšie sa nám prenášajú dáta, atď.

Čo však mnoho dnešným softvérovým spoločnostiam chýba, je uvedomiť si, ako boli vedení ľudia tej doby. Viem, že mnoho z nich veľa nespali, že to pracovne preháňali. O tom nechcem tvrdiť, že to bolo dobré. Ale tí ľudia boli zo svojej práce nadšení. Tímy chodili za svojimi manažérmi vlastne "ukazovať", čo vymysleli, na čo prišli. Mali z toho radosť, a aj keď nie vždy bola práca predajná, myslím si, že to bol ten dôvod tých najväčších úspechov.

Dnes, aj vďaka tejto minulej dobe už máme skúsenosti s mnohými vecami, ktoré sa osvedčili ako dobré, a ktoré zas nie. Je myslím prirodzené, že na začiatku je vždy všetko chaotické, a postupne sa to usporiadava a začína fungovať ako hodinky. To sa myslím stalo - a stále pokračuje - aj s vývojom softvéru.

Už myslím máme moderné prostriedky, a aj procesy na to, aby sme dokázali popísať čo má ten najväčší vplyv na produktivitu. Možno agile je takýmto procesom, ale myslím si, že mnoho princípov je iba vyjadrením zdravého sedliackeho rozumu, ktorým je, že človek sa najviac obetuje veci, ktorú má rád.

sobota 21. novembra 2015

Kávička s hudbou v sluchátkach = ideálna nálada na upratovanie

Pred pár dňami som brázdil cesty svojho harddisku. Cítil som sa dosť neobvykle, obklopil ma závoj déjà vu. Našiel som kopu stratených vecí, jednou z nich boli aj sety Café del Mar z deväťdesiatych rokov, ktoré som počúval ešte na strednej škole s bratom. A tak nasledovala nostalgia, pocit, na ktorý som už skoro aj zabudol, akú má príchuť (už ich počúvam druhý deň, hlavne pri hraní Euro Truck Simulatoru).

Ani neviem čo ma viedlo k tejto vzrušujúcej akcii, možno som mal taký zvláštny pocit, že by som si chcel pripomenúť, kto som (computatrum ergo sum). Od určitého okamihu, asi odkedy som začal byť skoro celé dni mimo domu (rozumej v práci), mi začal počítač slúžiť k účelným veciam, a prestal som sa starať o to, kde čo mám, prestal som sa vracať k veciam, ktoré som akútne nepotreboval (prestal som "tráviť čas za počítačom"). Asi sa takým veciam človek nikdy nevyhne, predsa len, v mojom veku má už kopa ľudí rodiny (alebo aspoň kamarátov :D).

To je jedno, spravil som to, a mám z toho aj úžitok. Ja viem, že skoro každý človek čo vlasní počítač takto svoj disk už veľakrát prebrázdil. Vtedy sa dejú zázraky - väčšinou začneme triediť veci. Presúvať, mazať, kopírovať, premenovávavať fotky, a zapisovať IDv3 tagy do MP3-jek (našťastie na posledné dve operácie existujú super nástroje, ktoré mi v deväťdesiatych rokoch chýbali).

O čom chcem dnes vlastne písať - ako som objavil vlastné triedenie vecí, aby som mal na očiach to, čo je dôležité, a odsunul bordel stranou. Aby som vedel kde hľadať, a aby som hneď vedel, kde mám čo uložiť, aby som nad tým proste (azda z lenivosti) nemusel dlho premýšľať, pretože mám z toho nechuť.

Základ je adresárová štruktúra

Či už máte Linux alebo Windows či niečo iné, svoje veci odkladáte väčšinou na nejaké jedno miesto. To je normálne, hlavne aby ste si hudbu nekopírovali do /bin alebo ešte lepšie /dev :D

Základ je vytvoriť si adresárový systém, ktorý reprezentuje "kategórie", podľa ktorých sú veci umiestnené. Najprv som uvažoval takto. Mám: hudbu, filmy, dokumenty, projekty, úvahy, fotky, stiahnuté súbory, temp, prácu, gitarové taby, a binárky (programy, skripty). Linux má vo veciach dosť jasno, ale musím mať aj ja. Takže môj nápad, postupne "vyevoluciovaný" z čias objavovania počítača, vyzeral asi (veľa som vynechal) takto:

bin/
#sf603/
 |__ hudby/
 |__ AES/
doc/
 |__ od_boxy/
 |__ old/
 |   |__ queen/
 |   |__ kindle/
 |   |__ ...
 |__ courses/
 |    |__ cryptography/
 |    |__ functional programming/
 |    |__ machine learning/
 |    |__ ...
 |__ knihy/
 |    |__ computers/
 |    |__ beletria/
 |    |__ ...
 |__ foto/
 |__ gitara/
 |__ uvahy/
 |__ skola/
 |    |__ FEI/
 |    |     |__ doktorandske/
 |    |__ spss/
 |__ praha/
music/
filmy/
projects/
 |__ emuStudio/
 |__ ...
tmp/
NAPAL/
 |__ DF/
 |__ DM/
 |__ DS/

Otras. Fuj. Aj keď sa to môže zdať relatívne usporiadané, je to bordel. Napríklad, hudba sa nachádzala na niekoľko miestach, sú tam podivné adresáre, do ktorých som sa musel pozrieť aby som vedel čo tam je. Ani sa nechcem zaoberať popisovaním toho hnusu. Ale upratovať neznášam. Už teraz asi bude zrejmé, kde čo patrí, a kde nie, aby sa zachoval aspoň intuitívne "systém", ktorý sa v tejto štruktúre používa.

Niekedy sa na to treba vy...

Proste sa mi nechce chodiť cez všetky adresáre a triediť, ale zmazať sa to bojím. Nič, povedal som si, že to potrebuje vážny refactoring. Kto nevie, čo je refactoring, mám pre neho veľmi pekné prirovnanie. Predstavte si, že ste kuchár v kuchyni a každý deň dostávate požiadavky na jedlá. Prvé jedlo urobíte za nejaký čas, a zašpiníte nejaký riad. Skúsených kuchárov už možno na tomto mieste napadne, že počas toho ako sa mu varí polievka môže aspoň umyť nože a dosku na krájanie. Ale niekoho to nenapadne, alebo sa na to vyserie. Ale nevadí, po uvarení to nahádžeme do umývadla, veď ešte nie je ani z polovice plné. Druhé jedlo - pohoda, otvoríme šuflík, stále máme čo použiť, aj keď možno nám už chýba nôž, ktorý máme radšej. A tak môžme pokračovať - až kým sa neminie všetko, alebo skoro všetko (pekne odložené ostanú veci, ktoré nepotrebujeme). A tak musíme začať umývať (prichádza pán Refactoring). Ale vidíme, že ten nôž je úplne na spodku :( Nieeeee - a tak musíme buď všetko vybrať z umývadla, až kým sa dostaneme k nožu (ale kde? nemám takú veľkú dosku), alebo pekne všetko umyť. Ale zákazníci už čakajú a ja si tu umývam riad... Nikto nechápe čo som to za bordelára - a stane sa to pár krát, asi prídem o prácu. Tento príbeh by sa mal zapísať ako "podobenstvo" do evanjelia pre každého programátora.

Všimnime si však trochu analógiu aj s bordelom v našom počítači. Stačí maličký odklon od našej štruktúry, a bordel je už nezastaviteľný.

Prevencia bordelu?

Ako som už povedal, potrebujeme systém. Dobrý systém, kde by odklon od štruktúry nemohol nastať tak ľahko. Dôvod, prečo v mojom predošlom systéme mohlo ľahko dôjsť k odklonu, je že kategórie nemali veľký vzájomný "kontrast". Inak povedané, ak by sme kategóriám priradili farby, mohlo by to vyzerať ako niečo podobné:

...
#sf603/
projects/
doc/
filmy/
NAPAL/
 |__ DF/
 |__ DM/
music/
...

Keď ukladáme nejakú stiahnutú vec na disk, myslím si, že pracuje hlavne "pravá" hemisféra mozgu. Dôvodom je, že podľa vzoru (nášho systému) hľadáme miesto, kam tú vec dať. A keď sa stretne s vecou na rozhraní, alebo s novou podkategóriou, ktorú nevie hneď zaradiť, začne pracovať. Lenže pravá hemisféra je asynchrónna, preto nevieme hneď odpoveď. A keďže logická, ľavá hemisféra už "nemá čas" čakať, tak to niekam dáme. :)  A tak vznikajú adresáre ako napríklad "od_boxy", ktoré reflektujú rýchlu logickú kategóriu (predsa "od Bokšy") - nechceme sa dlho "zamýšľať", kam by to malo ísť.

Ako sa teda vyvarovať podobným kategóriám? Long story short: vertikálnym radením. Napríklad, to, že je hudba určená na napálenie, alebo prípadne ak by sme si chceli naznačiť "novú" hudbu - stále predsa ide o hudbu. Proste to nie je nová kategória. Ide o jej "atribút". A takýto atribút môže mať predsa hocičo - aj dokumenty, aj programy, a tak ďalej. Skúsme tieto kategórie zoradiť "vertikálne":

music/
  |__ new
  |__ before_2000
  ...
movies/
  |__ to_backup 
  ...

Veľký kontrast nie je všetko

Okrem toho, že by nemali existovať podobné kategórie, každá kategória by mala mať relativne jasno, čo do nej patrí - a mala by mať dostatočne "široký" záber. Napríklad, ako by sa mali usporiadať projekty, alebo škola? Myslíte si, že toto usporiadanie je dobré?

school/
 |__ FEI/
 |    |__ 1. rocnik/
 |    |    |__ matematicka_analyza/
 |    |    |__ ...
 |    |__ 2. rocnik/
 |    ...
 |__ spss/
      |__ ...

Ja si to určite nemyslím. Celé zle. To, čo tu vidíme nie sú kategórie. Ide to tzv. horizontálne usporiadanie, ktoré je nie podľa obsahu (čím kategória je), ale podľa "času a miesta". Kedy sme naposledy hľadali zadanie z 3. ročníka predmet "operačné systémy"? Na to, aby sme také zadanie našli, musíme si pamätať, že je to tam. Ale nikto, NIKTO si nepamätá, čo všetko vlastne v škole robil a tým pádom, ani to, aké veci sú kde "skryté" - a tak sa dostávame k efektu "strácania".

Je preto lepšie ostať pri zemi a držať sa sémantiky našich kategórií. A nevytvárať idiotské adresáre, ktoré nič neznamenajú. Usporiadaná štruktúra môže vyzerať nasledovne:

school/
 |__ zadania/
 |    |__ #current/
 |    |__ ...
 |__ bakalarka/
 |__ diplomovka/
 |__ dizertacka/
 |__ organizacne/
      |__ zapis_fei_1_rocnik
      |__ ...

Poučenia, diskusia, záver. :)


  • Skúsme použiť hlavu, a potlačme naše prvotné nápady, lebo to asi dopadne podobne ako som popísal na začiatku. Najlepšie systém, ktorý ťažko oblafnúť.
  • Kategórie vytvárajme s vysokým kontrastom (jednu kategóriu na obsah jedného typu)
  • V prípade hľadania, ktoré robíme častejšie než ukladanie, sémantika má vždy prednosť pred štruktúrou. Skoro nikdy nehľadáme podľa času, miesta (teda možno okrem fotiek), ale skoro vždy podľa obsahu.
  • Skúsme takto organizovať aj poznatky