Distribuirana tvrtka - da ili ne?
May 14, 2008 – 12:56 amNa ovogodišnjem Web.Startu imao sam priliku reći par riječi o radu u distribuiranim tvrtkama te podijeliti svoja iskustva iz dvije tako organizirane tvrtke (Collabora i Rei).
Za one koji su propustili ovogodišnji Web.Start (nemate izlike) ili su bili tamo ali su propustili moje predavanje (imate izlike), “ukratko” ću ga prepričati u ovom postu. (Edit: Berislav se pred dvije godine dotaknuo iste teme sa malo drugačijim zaključcima)
Već je sasvim normalno da se na Webu informiramo, igramo (neki i žive :), kupujemo, zabavljamo pa i radimo. Raditi preko neta nije ništa novo, bilo kao telecommuting (gdje zapravo imamo mjesto na poslu, ali ponekad možemo i od kuće), ili kao outsourcing (kod kojeg se dobro definirani zaokruženi zadatak daje udaljenom timu i samo se čeka krajnji rezultat). No, što ako cijelo vrijeme radimo od kuće (ili od bilo gdje drugdje), ali kao dio tima a ne udaljeni kooperant?
Prednosti
U takvoj situaciji tvrtki ne treba nikakav prostor niti ured, što može poprilično smanjiti troškove, pogotovo ako je tvrtka malena ili tek započinje s poslom. Osim toga, izbjegavaju se sve moguće komplikacije sa putovanjem na posao (gužve, izgubljeno vrijeme, troškovi, itd), a u krajnjem slučaju tvrtka niti nije ograničena na rad sa ljudima iz neposredne blizine (niti je itko primoran na selidbu).
Primjer za ovo su i već spomenute dvije tvrtke. Collabora doduše ima urede, ali su i oni na raznim lokacijama, velik dio ljudi radi od kuće, i ne postoji nikakva zemljopisno-uvjetovana podjela na organizacijske cjeline. Rei također ima radnike iz različitih krajeva (Hrvatske, ovaj put :), a komunikacija i interakcija se odvija preko ‘neta.
Problemi
Naravno da ima i problema. Jedan od prvih koji pada na pamet je kako raditi management ljudi ako nitko nije “tu”, odnosno kako provjeriti/natjerati ljude da rade. Ako ljudi zabušavaju, istina je da je to nemoguće provjeriti preko neta (niti je moguće provjeriti koliko točno sati rade), ali ista stvar je i sa radom u uredu; kad se netko bavi kreativnim poslom nije baš moguće zaviriti mu u glavu i provjeriti radi li sad ili razmišlja o tome gdje će na more slijedeće ljeto..
S druge strane, realan problem je motivacija (ili nedostatak iste). Kako svatko radi solo od kuće, ponekad se teško natjerati obaviti neki naporni dio posla, ili naprosto započeti sa samim poslom. Kako nema suradnika koji su upravo krenuli raditi (što bi bila neka motivacija da se i mi primimo posla), ali zato ima svih mogućih distrakcija i opravdanja, od “malo TV-a” do “mogu sat vremena dulje spavati, nadoknadim popodne”. Ovo sa “nadoknadim kasnije” može biti prilično loše, jer si neki broj radnih sati lako razvučete preko cijelog dana i još napravitte manje nego što biste napravili da ste se jednostavno primili posla.
Kod rada kod kuće, pogotovo ako se radi u istom prostoru u kojem se i živi, može biti dosta teško povući granicu između rada i života. Ja osobno cijelo vrijeme osciliram između dviju krajnosti (a switch se događa obično kad rokovi stisnu, ili kad puknem od preopterećenosti).
Zato, ako radite/ćete raditi od doma, svakako preporučam da si složite neki prostor koji će biti samo “radni” (garaža, tavan, soba, ili bar kut sobe), i koji koristite samo kad ste u “radnom modu”, kako bi si na taj način povukli psihičku granicu između “na poslu” i “kod kuće”. Po mom iskustvu, potrebna je.
Komunikacija
Mislim da je najveći problem distribuiranog rada ipak komunikacija (odnosno, opet, nedostatak iste). Osim nekakve formalne komunikacije mailovima, i poslovnim sastancima, puno više komunikacije u svakodnevnom radu otpada na neformalnu komunikaciju: čavrljanje u pauzama, brza pitanja vezana uz posao, razgovori i opuštanje za vrijeme ručka ili nakon posla, i slično. Osim što se velika količina informacija prenosi i na ovakav način, nuspojava je i da se ljudi koji zajedno rade tako i osjećaju.
Za razliku od toga, kad se sva komunikacija odvija preko neta, puno teže je kreirati to zajedništvo i motivirati adhoc komunikaciju. Jedan od po meni dobrih načina je korištenje IRC-a, ili nekog sličnog multiuser text chata. Svi u tvrtki dođu na isti kanal, koji onda može služiti kao neki lounge, soba za sastanke i mjesto za neobavezno čavrljanje, sve u jednom. Dodatna prednost IRC-a je i da je moguće logirati svu komunikaciju, pa se tako nakon sastanaka ili usputnog spominjanja nečeg vezanog uz posao uvijek može naći tko je što rekao, što smanjuje mogućnost zabune, a i ne treba dodatno voditi bilješke sa sastanaka ;-)
Za 1:1 komunikaciju dobra stvar je i neki drugi IM, recimo GTalk ili Skype. Pritom je meni osobno draža text komunikacija zbog manje mogućnosti zabune (ako su obje strane navikle na text komunikaciju :) i jednostavnije mogućnosti logiranja, ali ponekad su i audio pozivi zgodniji.
Ono sa čim nikako nisam imao dobrih iskustava su bilo kakvi oblici telekonferencija. Kod voice konferencija ukoliko ima više ljudi (što je i poanta) stvar postaje prilično zbunjujuća, jer nema vizualnih hintova kad će tko reagirati ili tko bi što želio reći, pa u takvim slučajevima uvijek mora postojati neki moderator koji naposlijetku naizmjence poll-a sve druge kako bi i oni nešto rekli.
Videokonferencije su mi također nespretne, iz razloga što su prebliske stvarnoj komunikaciji, a ipak nisu stvarna komunikacija oči u oči, pa se zapravo s njima ništa korisno ne dobija (osim mogućnosti hvalisanja kako “mi imamo videokonferencije”). Ono što mene osobno muči kod videokonferencija je mali delay (nemoguće ga je potpuno ukloniti) koji daje dojam da je sugovornik lagano pospan ili mu danas razmišljanje nije baš jača strana, te činjenica da kamere ne mogu biti u centru ekrana što rezultira osjećajem da sugovornik stalno gleda nešto preko ramena ili u pod…
Još par alata koji su korisni i inače, ali mislim da su ključni za uspješno funkcioniranje distribuirane tvrtke (koja se bavi nekakvim razvojem softvera ili nekim knowledge biznisom):
Issue tracker
Issue (ili bug) tracker je odlična stvar za sve slučajeve kad želite nešto zabilježiti, i biti sigurni da je kasnije netko reagirao. To ne mora biti bug u softveru, nego i svojevrsna shared todo lista (npr. ubacite high priority major severity issue “Prijaviti radnike na slijedeći WebStart” - baš mi je žao što se ovog primjera nisam prilikom izlaganja prezentacije sjetio, trema je učinila svoje :). Popularni open-source trackeri su recimo Bugzilla i Trac.
Groupware
Ukoliko više ljudi radi na istom projektu (a obično radi), dobro je imati mjesto gdje se vodi evidencija tko što u kojem trenutku treba raditi, kao i sva prateća komunikacija oko toga. Odlični primjeri web2.0 groupwarea su activeCollab (instalirate na svoj server) te Basecamp (hosted rješenje). Google Calendar također može poslužiti za sinkroniziranje.
U prezentaciji sam spomenuo da bi bilo zgodno imati i nekakvi oblik privatnog inhouse Twittera kako bi se vidjeli kratki status updatei tko što radi, te sam kasnije saznao da će novi activeCollab imati i tu mogućnost! Definitivno korisna stvar. Kad već hvalim aC, na WebStartu sam imao prilike iz prve ruke vidjeti kako taj softver radi i ostao sam totalno zadivljen - stvar je odlična, svakako preporučim da pogledate!
(Distribuirani) Version Control Sustav
Odlična stvar čak i ako solo radite na projektu koji nikad nitko drugi neće vidjeti, a nezamjenjivo ukoliko više ljudi radi na istom projektu. Jednom kad se naviknete, nema nazad :-) Distribuirani VCS-ovi pružaju veću slobodu i fleksibilnost od centraliziranih, što mislim da je dodatna prednost ako je cijela tvrtka distribuirana. Take your pick: git (vjerojatno najbolji), darcs (moj omiljeni iako ima par quirkova), ili bzr (gura ga Canonical/Ubuntu). Ukoliko ste ipak konzervativniji, tu je naravno Subversion (tu je recimo zgodno da se Trac odlično integrira sa svn-om).
Code review
Manje alat a više praksa kod kojeg svaki komad koda koji se commita prije toga pregleda još netko (osim samog autora). Prednosti ovoga su da se uhvati veliki broj sitnih (i ne tako sitnih) bugova, nikad se ne dogodi da samo jedna osoba zna neki dio koda, osoba koja radi review ima priliku nešto naučiti na kodu kojeg gleda, a originalni autor također ima priliku nešto naučiti iz komentara reviewera. Osim toga na ovaj način se i lako osigurava konzistencija stila kodiranja, komentara i slično. Code review je posebno dobar u distribuiranim timovima jer u njima nema mogućnosti da netko “preko ramena” pogleda komad koda i da komentar, pa su oni zapravo i zamjena za tako nešto.
U prezentaciji nisam poimence spominjao alate za code review (prikazani screenshot je od VMWareovog Review Boarda), ali se slažem sa Stjepanom da bi trebalo istaknuti Guidov Rietveld te VMWaretov Review Board. Collabora za to koristi interno razvijeni alat Merge Monkey.
Ostali alati
Za slučajeve kad trebaju stvarno dvije osobe istovremeno raditi na jednom dijelu koda (ili netko treba nekome nešto pokazati, ili se radi pair-programming), nezamjenjiv je alat za dijeljenje desktopa ala VNC.
Za spremanje podataka o projektu ili internom ustroju firme zgodno je postaviti i interni wiki, kojeg onda svi mogu uređivati i popunjavati podacima koji su im bitni. Wiki je koristan upravo zbog toga što ne forsira nikakvu specijalnu strukturu dokumentacije, pa je stvar lako prilagoditi baš onom workflowu kojeg mi koristimo.
Google Docs, ili bilo koji online office suite - ne znam ima li smisla ovo uključivati u cijelu priču. Svakako ima svoju upotrebu (i web2.0 je :), te ima neke prednosti u odnosu na offline izradu dokumenata i mailanje / stavljanje na wiki, ali ih nisam smatrao dovoljno značajnima za poseban slide.
Team building
Team building, pojam koji kod većine zaposlenika različitih tvrtki s kojima ja imam kontakt (čitaj: prijatelji zaposleni na raznoraznim mjestima) izaziva prilično negativne osjećaje. Možda zato što smatraju da dovoljno (i previše) vremena ionako provode uz ljude iz firme, i onda ih se još dodatno tjera da se i umjetno “druže” s njima?
Kod distriburianih firmi team building ipak nije samo tlaka, nego je jedinstvena prilika da se suradnici koji se inače nemaju priliku uživo vidjeti bar upoznaju, druže neko kratko vrijeme i u tom razdoblju steknu neku bliskost i osjećaj pripadnosti timu/tvrtki. U tom smislu teambuilding više zamjenjuje ležerne kave nakon / prije posla a manje neka intenzivna forsirana druženja.
Distribuirana tvrkta (Yes/No/Abort)?
Na kraju ovog podugačkog posta (nadam se da prezentacija nije bila predugačka :), što je na kraju bolje, raditi u uredu ili imati distribuiranu tvrtku? Kao i obično, odgovor je negdje u sredini. Apsolutno distribuiranu tvrtku, gdje svi uvijek udaljeno rade - definitivno ne. Previše je tu potencijalnih problema u komunikaciji i motivaciji. No (a ovo možda nisam naglasio u prezentaciji, a svakako sam trebao), mislim da je dobra ideja iskoristiti prednosti rada na daljinu i kombinirati ih sa prednostima rada na zajedničkoj lokaciji.
Po mom mišljenju idealno bi bilo da se neki dio vremena (recimo jedan dan u tjednu, ili jedan tjedan u mjesecu) provede u uredu/HQ-u/omiljenom kafiću (ali radno!:)/zajedno, s tim da bi pritom svi trebali u isto vrijeme biti na okupu baš zbog druženja, komunikacije i dizanja morala. Ostatak vremena i dalje ostaje na volju ljudima da si organiziraju kako im najviše odgovara (a opet ostanu u svakodnevnom kontaktu sa svim ostalima). Na ovaj način iskombiniraju se dobre strane i jednog i drugog pristupa.
Ako ste do ovdje pročitali, svaka čast! Ispričavam se na dugačkom postu, nisam ga stigao skratiti[tm] :-)


7 Responses to “Distribuirana tvrtka - da ili ne?”
Bome ima već skoro dvije godine! :)
http://www.softwave.info/development/patka/
By Berislav Lopac on May 14, 2008
Ajme! Tnx na linku :) Btw baš čitam Randov originalni post i sjetio me još jedne stvari - mislim da je situacija puno gora kad je većina ljudi na okupu a jedna osoba (ili manjina) radi remotely, baš zbog stvari koje je on naveo - oni koji su u uredu mogu se zabavljati i/ili dogovarati uživo i tek kasnije blijedo/jedva/nikako prepričati to telecommuting kolegama. U tom slučaju je čak bolje da svi rade udaljeno, jer bar nema podjele na takav način.
By senko on May 14, 2008
Zašto preferiraš darcs nad git-om, ako kazeš da je git bolji ?
By misko on May 14, 2008
@misko: Zato što sam se naučio na darcs. Ima nekih zgodnih prednosti pred gitom (interaktivni cherrypicking), jednostavniji je i ima nešto drugačiju filozofiju rada sa patchevima (na koju sam se taman navikao pa mi je git malo “čudan”).
Ali kako stvari sada stoje, darcs ima nekih ozbiljnih problema (sporost u odnosu na git, ponekad se zblesavi kod većih konflikata), a developeri gita su si stvarno dali truda i učinili ga puno više user-friendly alatom nego prije.
Također sve više ljudi svoje projekte drži u njemu, pa mislim da je već dosegnuo (ili će uskoro) i kritičnu masu korisnika odnosno tipping point nakon kojeg će svi koristiti git upravo zato što svi koriste git, kao što je danas slučaj sa Subversionom za centralizirani VCS.
(Napomena, “svi” u gornjem odlomku shvatiti uvjetno).
By senko on May 14, 2008
Odličan post.
Review Board mi se jako sviđa. Imam neki osjećaj da bi mogao postati novi trac.
By slavus on May 14, 2008
hmm.. tenks na gomili linkova, a slavusov komentar da bi review board mogao postati novi trac znaci da cu doticni pregledati detaljno, posto sam zadnji put kad sam pokusavao zapeo u instalaciji traca negdje tamo oko konfiguracije templateing sustava (kojeg su mislim cak i zamijenili u 0.12), a inace mi se cini alat taman kakav mi treba..
By zappan on May 16, 2008
Samo radi ispravke, Review Board i trac nemaju istu namjenu, niti su jedan drugome zamjena.
By slavus on May 21, 2008