Hledáme parťáka do Forresta

Tímto článkem udělám malou výjimku a zkusím Vás všechny oslovit s nabídkou práce u nás ve Forrestu. Je to zvláštní, ale už nějakou dobu sháníme Javistu a nedaří se nám sehnat nikoho s kým bychom si padli do noty. Říkal jsem si, jestli to není tím, že ploché inzeráty Vás moc neosloví - respektive práci v mladém a perspektivním týmu s možností osobního rozvoje s platem odpovídajícím Vašim schopnostem nabízí každý druhý. Jenže co jiného taky do několika řádkového inzerátu napsat, že? Proto jsem se rozhodl napsat tento článek, ve kterém bych Vám rád popsal, jak vyvíjíme u nás ve Forrestu - co používáme za nástroje, jak řídíme projekty, na kterých projektech pracujeme, jaká je možnost si u nás vyzkoušet nové technologie a všechny ty věci, na které stejně při každém přijímacím pohovoru přijde řeč s lidmi, kteří se zajímají. Článek možná bude zajímavý i pro ty z Vás, kteří práci nehledají - vždyť je to nakouknutí do cizí kuchyně a kdo z nás není aspoň trochu zvědavý, no ne?
Začnu s tím, co mě co by Javistu při příchodu do Forresta překvapilo:

Různorodost projektů

Forrest vznikl nejdříve jako multimediální ateliér (15 let nazpět), vyrostl ve webovou agenturu, která řešila primárně "statické weby" a aktuálně řeší celou řadu bohatých webových aplikací. Každý týden na projektové komisi probíráme nové projekty s časovou dotací od několika týdnů až po jeden rok. Více než polovina projektů se týká stálých zákazníků, ale stále se udržujeme ve střehu účastmi v tendrech a "new byznysem". Řešíme projekty, které žijí několik let, ale také projekty, které jsou jednorázové a mají předem danou životnost. Právě tyto projekty jsou skvělé pro zkoušení nových technologií a postupů, u kterých si dopředu nejsme jistí, jak se osvědčí. Zákazník to samozřejmě na kvalitě nepozná, ale pro nás je to škola. Na malých projektech nám navíc rostou budoucí šéfové projektů - začínají s tím na co stačí a když se osvědčí dostanou příště projekt náročnější.
Forrest dělá ale zajímavé projekty, které se dobře vyjímají v CVčku - děláme pro ČEZ, KB, Vodafone, Lagardere, KB-Blok, kancelář prezidenta, GTS a řadu dalších.

Specializace

Forrest sice rostl, ale zákazníci a profesionálové v daných oborech mu zůstávají. Máme řadu projektů, které jdou mimo vývoj - pouze na konkrétní oddělení. Stále se dělají statické weby (ty se Javistů nedotknou), byznys analýzy a marketingové studie, logomanuály a grafické návrhy, multimediální hry a doplňky. Život u nás je zkrátka velmi pestrý.
Na druhou stranu se člověk může skutečně věnovat tomu, čemu se věnovat chce. Já jako Javista nejsem (naštěstí) nucen se zabývat nuancemi HTML a CSS implementací v jednotlivých prohlížečích a obcházení chyb, které se v nich nacházejí. Nikdo po mně nechce dodělat tuhle ikonu, támhle nápis. Nikoho také nenapadne po mně chtít navrhnout strukturu webu, protože na tohle všechno máme specialisty, kteří se tomu věnují celé měsíce a jsou opravdovými odborníky a mají na to správné nástroje.
Tohle bylo pro mě jedno z velkých překvapení - do té doby, než jsem začal ve Forrestu, jsem si pro "své" webové aplikace musel často grafiku (ošklivou) i HTML a CSS (často optimalizované pouze pro nejrozšířenější prohlížeč) dělat na koleně sám. To mě jednak nebavilo a jednak výsledky stály dost za pendrek.

Takhle se pracuje v Náchodské pobočce

Vybavení

Jsme sice malá firma, ale co se týká vybavení nemůžeme si nikdo na nic stěžovat. Vedení se podařilo získat několik projektů z EU a tak si můžeme všichni užívat plně virtualizované platformy pro naše vývojové a testovací servery (VMWare ESX Server). Vytvoření nového serveru je po naše Operations oddělení otázkou několika desítek minut.
Každý z nás pracuje na notebooku (já mám třebas IBM Thinkpad T61, ale sem tam se po firmě najde i nějaký ten Mac), které aktuálně osazujeme SSD disky, které nebyly v původní výbavě. Na každém pracovním místě máme dockovací stanici a samostatný 21" LCD monitor. Kvalitní židle a klávesnice dle vlastního výběru (můj favorit). Co se týká operačních systémů - majorita Forrestů používá Windows, nicméně my vývojáři jedeme spíše na Linuxu. Operations s různými OS na stanicích naštěstí nemají žádný problém (i když oficielně dělají podporu jen pro Win platformu).
Řada z nás má k dispozici mobilní telefony (většinou pouze senioři a lidé ve styku se zákazníkem) - povětšinou HTC Desire HD, ale mohli jsme si v dané cenové relaci vybrat.

Benefity

Podle benefitů se zaměstnání sice nevybírá, ale je to něco, co potěší. Forrest toho může v tomto směru nabídnout dost - od 5 týdnů dovolené, přes proplácení nákladů na dojíždění, výuku jazyka, stravenky až po příspěvky na permice do fitcenter, příspěvků na životní pojištění, telefon, internet atd.
Co se týká práce z domu, tak ta běžně možná je. Nepreferujeme to jako pravidelnou záležitost, protože chceme mít týmy a lidi co nejvíce pohromadě, ale v případě, že si člověk potřebuje vyřídit nějaké osobní záležitosti, potřebuje hlídat děti nebo mu není dvakrát nejlíp, pracuje prostě z domu. Někdy je to tedy víc, někdy méně - prostě podle toho, jak kdo potřebujeme.

Vzdělávání

Ve vývojovém oddělení nemáme žádný propracovaný systém vzdělávání. Vše se odvíjí od individuálních zájmů a aktivit jednotlivců - s tím, že firma má pro tyto účely vyhrazený rozpočet. Já s několika kolegy každoročně obrážíme některou Java konferenci - předloni jsme byli v Amsterodamu na Spring One, loni i letos na povedeném Geeconu v Poznani a Krakowě. Pravidelně se také účastníme WebExpa a samozřejmě také, pokud je zájem, jezdíme na školení. Nákup knížek a dalších studijních materiálů nebo software funguje na požádání. Nicméně nikdo nikoho do ničeho nenutí a tato část je ponechána vysloveně na zájmu každého z nás, takže někdo jezdí častěji a někdo méně.

Vývojový proces

Ačkoliv se dogmaticky neřídíme žádnou z cool metodik vývoje, odvážil bych se to, co u nás provozujeme nazvat agilním přístupem. Projekty realizujeme v krátkých iteracích - v existujících projektech, kde je požadován další rozvoj, releasujeme jednou za týden až tři týdny (minoritní změny se publikují okamžitě). U nových projektů je první iterace často mezi dvěma a třemi měsíci, než projekt dostane obrysy a další rozvoj už je v kratších iteracích. U větších projektů děláme analýzy včetně UML modelů, kde to uznáme za vhodné. U jednodušších projektů nám většinou postačuje základní slovní zadání, ERD diagramy a detailnější rozpracování komplikovanějších oblastí. Velkou výhodou je, že na začátku projektu připravují marketingoví/UX specialisté drátěné modely aplikace a grafici následně i grafický náhled obrazovek. Nejtěžší rozhodnutí (např. jestli má být web modrý nebo zelený) tak zákazník dělá ještě před tím, než se do toho pustíme my z produkce.
Realizační tým se sestavuje pro konkrétní projekty a týmy jsou promíchané většinou různě podle toho, kdo je aktuálně v daném termínu volný a také podle toho, jaké dovednosti projekt vyžaduje. Z toho vyplývá, že postupně člověk pracuje s většinou kolegů a pokaždé s někým jiným. Týmy se skládají z lidí za různá oddělení a v řadě projektů je Javista pouze jeden (ten si tudíž všechny aplikační náležitosti šéfuje a rozhoduje sám). U větších projektů děláme dvou, maximálně tříčlenné týmy - pokud by měl být tým větší, snažíme se projekt rozparcelovat na nezávislé podprojekty, které mohou řešit menší týmy.

V průběhu projektu se dělají pravidelné statusy (nejsou to denní stand-up meeting, ale spíš týdenní nebo i častější VOIP telekonference) projektového týmu. Nicméně tým je malý a komunikace mezi jednotlivými členy probíhají dle potřeby. Téměř vždy je tým namíchaný z lidí z různých poboček a tak je komunikace na dálku téměř pravidlem. Na začátcích projektů, kdy je potřeba komunikovat osobně větší, se dohodneme na nějakém schématu přejezdů mezi pobočkami a tak čas od času vyrážím z Hradce do Náchoda nebo do Prahy, kde s týmem pracujeme společně. U větších projektů se po jejich ukončení dělá krátká retrospektiva, kde se snažíme identifikovat, co nám fungovalo a co ne.
Provozujeme cosi na způsob DevOps, takže release pro Javistu i Webaře znamená reálné nasazení na produkci, kde máme od Operations oddělení pouze připravenou databázi, webový a aplikační server a připraveny základní instalační adresáře. Vlastní zprovoznění projektu (aktualizace) je už přímo na nás. Kluci z Operations řeší takové věci jako monitoring, zálohování, nastavení clusterovacích strategií, firewally apod. Jednoduché instalace typizovaných řešení zvládnou Operations bez Javistů a specialitky nechávají na nás. Problémy na produkčních prostředích (služby) řeší Operations jako takové, v případě že si neví rady, tak problém rychle probublá až k nám do vývoje k člověku, který je za daný projekt zodpovědný. Vývojáři si tedy poměrně zblízka přičichnou k deploymentu a věcí s ním spojených a s klukama z Operations spolupracují často.

Vývojové nástroje

Většina z nás používá IntelliJ Idea IDE, ale máme mezi sebou i pár zatvrzelců, kteří používají Eclipse nebo Spring Tool Suite. Pro verzování používáme CVS - především z historických důvodů. Žádná větší změna v tomto směru se nechystá, přestože někteří z nás koketují s distribuovaným VCS Git. Buildovací systém máme postavený na Apache Maven a jako firemní repository používáme Archivu. Jako integrační server používáme TeamCity a pro evidenci chyb a požadavků Mantis Bug Tracker. Analytické modely vytváříme v Enterprise Architectu. Jako aplikační server používáme většinou Apache Tomcat (i když na vyžádání zákazníka jsme dodávali i na WebSphere nebo Oracle OC4J) a databázi MySQL (respektive jejího bratříčka Percona) nebo Oracle. Webový server je majoritně Apache i když jej v poslední době nahrazujeme spíše NGinX. Cílová produkční platforma je jednobarevná a to Linux (ani nevím, jestli kdy kdo měl zájem provozovat aplikaci na M$ serveru - i když tam bychom samozřejmě také mohli vpřípadě potřeby deployovat). Testy píšeme v JUnit, ale zastáncům TestNG bychom určitě nebránili. Většina programování se děje přímo v Javě (1.6) nicméně zákaznické customizace děláme v poslední době už spíš jen v Groovy. Základem většiny našich projektů je Spring Framework (nedávno jsme přešli na 3.X verzi), na kterém je také postaven náš modulární systém. Na pkomponentový web framework RamJrojektech se také setkáte se Spring Security,MyBatis, Stripes, JSF, Struts i když poslední dobou čím dál víc používáme náš home-made et, který nám lépe umožňuje sdílet práci mezi Java vývojáři a webaři (jednoduché vstupní formuláře a základní CRUD jsou schopni kolegové z web developmentu realizovat bez nás - Javistů) a který má řadu sexy fíčurek jako je AJAX partial update nebo živá validace vstupů uživatele.
Do seznamu jsem zahrnul pouze ty nejzásadnějších technologie a nástroje - neustále něco zkoušíme a prototypujeme. Za pár let může seznam vypadat zase úplně jinak (i když základ asi přetrvá).

Jsme lidi a všichni se známe

Forrestů je okolo padesáti a pořád fungujeme jako malá firma. Díky práci v různě namixovaných týmech se mezi sebou všichni známe. Navíc se 2x do roka organizuje setkání všech Forrestů - na jaře ve sportovním duchu, před Vánoci spíš jako večírek. Samozřejmě na pobočkách se nějaké lokální akce pořádají pravidelněji - Náchoďáci jezdí na cyklovýlety, my v Hradci chodíme spíš do hospody :).

Jarní teambuilding v Deštném

Co se mi zdá jako unikátní věc, je poměr produktivní síly oproti síle režijní. Přestože mezi vývojářem v Hradci a ředitelem společnosti jsou dva nadřízení, všichni z nich skutečně pracují na projektech. Tj. nejsou to manažeři, kteří by už jenom řídili - jsou to vývojáři stejně jako on (pravda šéf produkce už moc neprogramuje, ale řídí si řadu projektů jako PMko) a denně pracují na svých projektech. Onen neblahý stav, který znám z několika firem, kde se za odsloužená léta lidé dostávají na manažerské pozice, kde už nepracují, ale jen se kumulují a řídí, u nás prostě nehrozí. Sice máme pozice jako je senior a junior vývojář, ale to neznamená, že já jako senior bych nechával nepříjemné bugy a úkoly na mladších kolezích a pro sebe si nechával jen tu zajímavější práci. Většinu servisu sice skutečně mají na starosti oni, ale když dojde na lámání chleba řešíme urgenty všichni bez ohledu na formální zařazení. Stejně tak na projektech, kterých jsem se hodně účastnil pořád nějaký servis dělám sám. Neexistuje u nás role bug-fixer, všichny řešíme chyby a není u nás chudák, který by trávil celou svou pracovní dobu fixováním chyb ostatních.
Ze své praxe jsem zažil taky případy, kdy existoval boj mezi jednotlivými odděleními firmy - nebo spolu minimálně některá oddělení prostě nekomunikovala (třeba vývoj a obchod). Tohle ve Forrestu taky nepotkáte - oddělení sice existují, ale tím, že jsou realizační týmy namíchané vždy z různých lidí různých týmů, nevzniká žádná rivalita, ale spolupráce. Koneckonců všichni chceme projekty dotáhnout do konce co nejdříve a v takové kvalitě, aby nás po nasazení nebudily ze spánku.
Máme pravidelná hodnocení jednou za půl roku, kdy se spolu bavíme o tom, kam bychom byli rádi, aby se jednotliví lidé posunuli a naopak co by bylo možné vylepšit v chodu firmy nebo postupech, které praktikujeme. Samozřejmě tam probíráme i kvalitu odvedené práce na projektech a změny ve finančním ohodnocení. Na hodnoceních ovšem málokdy padne něco zásadně nového - jelikož spolu mluvíme pravidelně už v rámci projektů většina věcí se probírá a řeší za chodu.

U kormidla může stát každý

Jedna z výhod malé firmy je to, že každý z nás může ovlivnit to, kam firma bude směřovat. Zkraje může sice ovlivnit jen lokální rozhodnutí, ale postupem času zjistí sám, že rozumné nápady a návrhy ve Forrestu nezapadnou a dostanou příležitost k realizaci. Stačí jen ty rozumné nápady mít a přicházet s nimi k ostatním a umět je vyargumentovat. Samozřejmě musí přiložit ruku k dílu, protože nejlepší realizátor nápadu je autor sám, ale tyhle věci se prostě u nás dějí.
Tohle je jedna z věcí, která mně osobně na Forrestu opravdu baví. Sice je to někdy pekelně těžké ostatní přesvědčit o svém nápadu, ale realita není jiná - jen si zkuste vystoupit na takovém dni D.

Ale máme i své chyby

Abych jen nechválil - je tu i pár věcí, se kterými není jednoduché se sžít. Tak především u nás se pracuje a přestože nemáme zase až tak moc přesčasů, v pracovní době se člověk nezastaví a kupodivu se najde dost lidí, kterým práce v práci vadí. O ty ale zájem nemáme.
Máme tři pobočky (Praha, Náchod, Hradec Králové) a běžně se pracuje s lidmi na různých pobočkách. Komunikace po telefonu, mailech, jabberu není někdy úplně jednoduchá a člověk si k ní musí najít cestu. Sami se čas od času dopouštíme komunikačních chyb, za které v projektech někdy platíme časem a starostmi navíc.
Děláme paralelně na několika projektech - Forrest ročně zveřejní několik desítek nových webů a aplikací a všem dává následnou podporu (což se za ta léta docela nahromadilo). Stává se tedy, že člověk i jen za jeden den musí přepnout i mezi několika projekty a ne vždycky se dá zátěž plánovat a předvídat. Tohle mě osobně dalo nejvíc úsilí strávit - teď už mi přepínání tolik nevadí a jsem schopný udržet přehled i nad několika projekty najednou. Příjemné to vždy ale není.
Jsme pořád malá firma, což má na jedné straně výhody v tom, že tu nenajdete žádné rigidní procesy a anonymitu. Na druhé straně jsou naše rozpočty vždy limitované a nákup superdrahého SW/HW je běh na delší trať (která se často nedoběhne). Stejně tak ani naše platy nejsou přemrštěné a milionářem se tu za rok nestanete.

Proč tohle všechno píšu?

Já sám mám velký zájem na tom, najít schopného vývojáře do našeho týmu. Rád bych našel někoho se zdravým náhledem na vývoj, zkušenostmi a elánem, který k nám zapadne. Někoho s kým se dá stejně dobře pokecat u piva jako na statusu, někoho po kom bude radost číst kód a testy, někoho kdo mě překvapí skvělými nápady. Někoho, kdo místo planých řečí sedne a vytvoří funkční prototyp, který mi vyrazí dech. Vím, že takoví lidé mezi čtenáři mého blogu jsou a já rád bych jim zítra říkal "parťáku".

Poznámka: Tento článek vychází z mé osobní zkušenosti ve Forrestu coby aplikačního vývojáře, který se zabývá projekty pro klienty. Člověk, kterého hledáme by byl součástí týmu, který pracuje na našich klíčových produktech - tedy Edee CMS a souvisejících modulech. Na této pozici se bude jednat o práci trochu jinou a dost pravděpodobně ještě zajímavější.