Joel Test 2.0
Nemám ambice a hlavně ani potřebnou autoritu na to razit Joel Test 2.0, využívám jeho jména při svém zamyšlení, co je pro mě důležité, čemu bych věnoval v softwarové firmě pozornost a čeho bych chtěl na svých projektech dosáhnout. Když na blogu Aspectworks publikovali svůj výsledek Joel Testu a když SoftWare Samuraj zpochybňoval aktuálnost Joel testu, čekal jsem, že téma bude v komunitě rezonovat víc. Po nějaké době se k tomu proto vracím.
Joel Test 1.0
Není obtížné v Joel testu získat skóre 10 bodů z 12. Jenže firmy s 10 a více body dostatečně nerozlišíte a ani nedostanete vodítko co zlepšit. Mimochodem, ve firmě, která získá 8 a méně, byste pracovat nejspíš vůbec nechtěli. Tedy pokud by vaším úkolem zrovna nebylo dát věci do pořádku.
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you use the best tools money can buy?
- Do you have testers?
- Do new candidates write code during their interview?
- Do you do hallway usability testing?</li></ol>
Můj pohled
Kdysi jsem si poznamenal otázky, které kladu u pohovoru, ale doposud jsem to neformalizoval jako test. Následuje výčet bodů a pod nimi pak podrobnější vysvětlení.
- Zvládne nově příchozí programátor udělat něco už první den?
- Píšete unit testy?
- Děláte code review?
- Dokážete nasadit jedním kliknutím?
- Modelujete?
- Měříte a vizualizujete?
- Necháte kandidáty na pohovoru programovat?
- Děláte usability testy?
- Scházíte se denně na stand-up?
- Pořádáte pravidelně retrospektivu?
- Máte 1:1?
- Dodržujete listinu základních programátorských práv?
První den v práci
První dojem je velmi důležitý. To platí i první den v práci. Dojem nedělá jen zaměstnanec ale i firma na něj. Zvládne za jeden den nainstalovat vše potřebné na čistý počítač, rozjet workspace, deployovat na localhost a ten samý den fixnout byť i drobný bug?
Unit testy
Obecně se ví, že by se měly psát testy, ovšem bohužel i dnes to mnohdy pokulhává. Za pokrytí 20 % u mě máte půl bodu, za 40 % bod.
Code review
Code review pomáhá. Pomáhá vychovat nováčky, udržet pořádek nebo zlepšit povědomí i o komponentách, které jsem nepsal. Děláte formální code review a děláte ho ještě před mergem do hlavní větve?
Nasazení na jedno kliknutí
Přijde mi, že build servery (jako například Jenkins) jsou velmi rozšířené, ale jak daleko je dotažené CI (Continuos Integration)? Je potřeba ještě mnoho manuálních kroků, než se build dostane na produkci. Nejen že to není úplně zopakovatelný proces, ale je silně náchylný na chybu. Ano, mluvím o nástrojích jako například Chef nebo Puppet.
Modelování
Předpokládám, že píšete dokumentaci, ale obsahuje i obrázky (jak známo kus za tisíc slov)? Bude se lišit případ od případu, není potřeba kreslit celou sadu UML a ani na všechno, ale na klíčové části určitě napasujete nějaký komponentový, sekvenční či stavový diagram, případně diagram tříd nebo BPMN. Nesmíme zapomenout na databázový model a wireframy na UI. Celý bod si zasloužíte v případě, že model rovněž verzujete.
Měření
Měříte? Pokrytí testy, duplicitu kódu, cyklomatickou složitost, lead time, WIP (work in progress) limit… Vyhodnocujete, jak se mění v čase? Měření je za půl bodu. Celý bod, když ze samotného měření vyvozujete příslušné akce.
Necháte kandidáty na pohovoru programovat?
Tohle je možná jeden z nejkontroverznějších bodů. Sám se vztekám, když na pohovoru zkouší z QuickSortu. Uznávám, že pointerová aritmetika je latinou softwarového inženýrství a může oddělit zrno od plev, viz Nebezpečí Java škol, ale pro mnoho programátorů nejsou pointery denním chlebem. Jeff Atwood (Joelův parťák ze Stackoverflow) razí jednoduchý Fizz Buzz test.
Líbila se mi programovací session u SoftWare Samuraje, kterou jsem mohl vidět jako kandidát i jako pozorovatel. Úkolem je naimplementovat určitý návrhový vzor (nebo alespoň část, nemusí ho stihnout celý) včetně unit testů. Kandidát dostane UML diagram a vzor je mu vysvětlen (pokud ho nezná). Tímto jednoduchým cvičením zjistíte hrozně moc. Jak analyzuje zadání, umí psát testy, jak se orientuje v IDE, jak reaguje na připomínky, jaký tvoří design, jak dokáže vysvětlovat…
Usability testy
Jistě jste si jako uživatelé nejednou zanadávali na ergonomii nějakého software nebo webové stránky. Co ale děláte proto, abyste neházeli lidem klacky pod nohy? Děláte usability testy?
Stand-up
Velmi se mi osvědčily denní schůzky na stojáka. Setkávám se se dvěma extrémy, buď se takové mítinky vůbec nekonají a členové týmu tak navzájem nedostatečně informují, nebo se to celé zvrhlo v hodinové vykecávání, kde nikdo nechce být. Bod si tedy zasloužíte, když stand-up trvá méně jak 15 minut a začíná včas!
Retrospektiva
Je mnoho věcí, kterými se můžeme inspirovat u armády, v případě debriefingu i u hasičů. Máte pravidelné mítinky, kde sbíráte zpětnou vazbu a něco s tím děláte?
1:1
Máte pravidelné schůzky 1:1 (jeden na jednoho) se svým nadřízeným? Dostává se vám každý týden třicet minut času jen pro vás? Pro inspiraci doporučuji článek, jak Rands dělá 1:1.
Listina základních programátorských práv
O listině základních programátorských práv už jsem dříve psal. Jde o následující výčet, na co má každý programátor v práci právo.
- dva monitory
- rychlý počítač
- klávesnici a myš dle svého výběru
- pohodlnou židli
- rychlé internetové připojení
- tiché pracovní podmínky