Inženýr 10x

Nedávno se na twitteru hodně mluvilo o inženýrovi 10x, což odstartovalo velkou debatu o tom, co dělá dobrého inženýra. Byly zmíněny některé opravdu hloupé věci, jako například „10x inženýr nesnáší schůzky“ a „10x inženýr chodí pozdě do kanceláře“ a „pozadí notebooku 10x inženýra je obvykle černé“. Obecně se zdá, že někteří lidé si myslí, že pokud jste dostatečně chytří, je v pořádku být kretén.

Ve Wixu se snažíme nechat kretény za dveřmi. Věříme, že 10x inženýři nejsou jen lidé, kteří dokáží produkovat 10x rychleji než většina lidí, ba co víc, jsou to lidé, kteří dokáží 10x zlepšit celý tým tím, že mají pozitivní vliv na každého, s kým pracují.

Mnoho lidí stráví velkou část své kariéry tím, že se stanou tím, co my považujeme za slušného inženýra. Znamená to, že jste dobrý programátor, který umí řešit problémy a plynule používá nástroje, které máte k dispozici, jako je IDE, debugger, služby a frameworky. V tomto článku se pokusíme popsat, co podle nás ve společnosti Wix Engineering dělá ze slušného inženýra desetinásobného inženýra.

Jednou z nejdůležitějších schopností inženýra je schopnost pracovat samostatně. Ve zkratce to znamená vždy vědět, co je třeba udělat, a málokdy být v situaci, kdy čekáte, až vám někdo řekne, co máte udělat. Neznamená to, že jste schopni udělat všechno sami, znamená to jen, že víte, jak se odblokovat a jak odblokovat ostatní ve vašem týmu čistým způsobem, který vytváří minimální technický dluh. Pokud vás například zablokuje nějaký problém, najdete pro něj řešení, ať už tím, že si necháte pomoci od kolegů, nebo ho vyřešíte sami. Nezávislí inženýři mají schopnost dovést projekt od nápadu až po produkci ve všech jeho fázích. Jsou schopni definovat, jaké věci potřebují k tomu, aby byli schopni úkol splnit, a vědí, kdy mají zvednout praporek, pokud potřebují pomoc.

Plánování

Nejtěžší věc, se kterou vidíte méně zkušené inženýry bojovat, je schopnost vzít velký úkol a rozdělit ho na menší kroky. To je důležité nejen proto, abychom dokázali odhadnout, jak dlouho něco trvá, ale je to také kritická součást tvorby kvalitního softwaru. Správné plánování znamená, že vývojář může vydat počáteční verzi produktu co nejdříve a začít dříve získávat zpětnou vazbu. Správné plánování znamená, že máte návrh systému brzy a máte dobrou představu o tom, co budete dělat, než skočíte do vody. Správné plánování znamená, že vás během vývoje nečekají žádná velká překvapení, která by rozbila váš návrh. Dobrý inženýr by měl být schopen rozdělit úkol, definovat návrh a fáze uvolnění a poskytnout návrhovou dokumentaci a odhady, aby ukázal svůj plán.

Pokora

To je těžké. I ti nejsilnější inženýři mají mnohokrát kam růst, pokud jde o pokoru. Znamená to nebýt zamilovaný do vlastních řešení. Umět naslouchat a přijímat řešení jiných lidí. Předpokládat to nejlepší od svých kolegů, a když vidíte něco, co se jeví jako chyba, snažit se pochopit důvody, které za tím stojí. Otevřít věci k diskusi. Nechat lidi navrhovat vlastní řešení. Podělte se o své nápady a nikdy se nestarejte o to, abyste za ně získali uznání. Je důležitější, aby se všichni s nápadem cítili dobře a měli pocit, že to byla týmová práce, než aby všichni věděli, že to byl váš nápad. Buďte upřímní. Přiznejte lidem zásluhy. Nikdy se nebojte říct, že jste se mýlili, nebo uznat, že někdo jiný má pravdu. Lidé si váží lidí, kteří dokáží změnit svůj názor.

Použití

Může to znít triviálně, ale většina lidí nechápe, že nejlepší způsob, jak dosáhnout pokroku, je navázat na předchozí práci. Méně zkušení inženýři mají vždy špatný zvyk myslet si, že nejlepší způsob, jak rychle pokročit, je ignorovat vše, co již existuje, a začít znovu. Dobří inženýři si vždy důkladně vyhledají, zjistí, zeptají se na všechna již existující řešení a pochopí je. Dokonce i v případě, že je stávající řešení nedostatečné, budou se snažit zjistit, jak ho vylepšit, než se rozhodnou ho nahradit. Nikdy nezavrhnou existující řešení, aniž by se jím důkladně zabývali a aniž by si promluvili s vlastníkem existujícího řešení.

Myšlení v oblasti infrastruktury

Jak bylo popsáno výše, opětovné použití předchozí práce může mít na lidi obrovský vliv. To znamená, že inženýři by měli vždy sledovat, zda mají příležitost vytvořit něco opakovaně použitelného. Nejjednodušší je, když takovou příležitost máte, ignorovat ji. Vytváření opakovaně použitelných věcí stojí „tvůrce“ vždy více než vytváření věcí, které opakovaně použitelné nejsou, takže mnoho krátkozrakých lidí ignoruje výhody, které oni i ostatní týmy později získají. Dobrý vývojář rozpozná příležitosti k vytvoření znovupoužitelných věcí, ví, jak je udělat znovupoužitelnými tím nejlepším způsobem, a investuje do toho úsilí.

Zvládněte svou doménu

Jediný způsob, jak přijít s dobrým řešením, je důkladně porozumět produktu, na kterém pracujete. Dobří inženýři nejenže důkladně rozumí produktu, který vyvíjejí. Rozumějí také všem případům použití, chápou motivaci produktu a mohou snadno vést smysluplnou konverzaci s produktovým manažerem, zpochybňovat rozhodnutí a nabízet alternativy. Vědí, co jsou důležité funkce a co méně důležité věci, a umí podle toho stanovit priority a v případě potřeby nabídnout řešení. To je důležité nejen pro produkt, na kterém pracujete, ale také pro všechny produkty, se kterými se integrujete.

Zvědavost

Dobří vývojáři musí mít zdravou zvědavost, která sahá daleko za hranice jejich domény. To platí zejména pro poznávání toho, jak vlastně fungují základní technologie, ale stejně tak je důležité porozumět produktům, na kterých pracují jiné týmy, jejich architektuře a tomu, jak jsou propojeny jako ucelený systém. Mít tento širší kontext může být při řešení složitých problémů k nezaplacení a může být zdrojem inspirace.

Žádné hranice

Často vidíme, že zdroj špatných řešení a špatné architektury má kořeny v tom, že se lidé bojí měnit věci, které jsou za hranicemi jejich škatulky. Vývojář klienta bude mít tendenci řešit věci na klientovi, i když je lepší je řešit na serveru. Vývojář aplikace bude mít tendenci řešit problém lokálně, i když řešení patří do platformy nebo do infrastruktury. Důvod je jednoduchý. Je jednodušší nevytvářet diskusi s jiným týmem, je jednodušší považovat svět mimo svůj dosah za černou skříňku, je jednodušší jednat s ďáblem, kterého znáte. Dobří inženýři však musí vědět, že jsou součástí jednoho velkého systému a že žádná jeho část není ve skutečnosti mimo jejich dosah. Diskutovat o změnách architektury s jiným týmem je zdravé a užitečné a může to přispět k vaší perspektivě. Nabídka, že přispějete ke změně, kterou požadujete, je skvělá pro budování důvěry mezi týmy. Dotknout se nové oblasti je zkušenost, která vám může jen prospět. A co je nejdůležitější, když se vaše hranice stanou flexibilnějšími, znamená to, že se zvětší váš vliv. Kdykoli se vyhýbáte tomu, abyste sáhli za své hranice, uvědomte si, že tím vlastně brzdíte sami sebe v tom, abyste měli větší dopad.

Odpovědnost / vlastnictví

Ačkoli to není na první pohled zřejmé, velmi často, pokud se ponoříte do příčiny toho, proč se nějaký projekt zpozdil nebo selhal, zjistíte, že se to odvíjí od vlastnictví a odpovědnosti. Lidé budou mít vždy tendenci svalovat vinu na své okolí: „Musel jsem počkat, až jiný tým něco dokončí“, „Měl jsem problém se systémem a nikdo neměl čas mi pomoci“, „Dostal jsem definice příliš pozdě“. Dobrý inženýr ví, že tyto věci jsou téměř vždy jen výmluvy. Když jste vlastníkem úkolu a odpovědnost za jeho splnění je na vás, vaše myšlení by mělo být takové, že každý problém, na který narazíte, je něco, co musíte vyřešit. Pokud vás blokuje jiný tým, jděte a promluvte si s ním. Nabídněte se, že na problému pracujete ve dvojici, a „neházejte“ odpovědnost na někoho jiného. Pokud jste ještě nedostali definice, vytvořte si určité předpoklady o tom, jaké definice budou. Je lepší udělat nějaký pokrok a později provést úpravy, než jen sedět a čekat. Pokud vás něco velkého zdržuje, vězte, kdy zvednout vlajku, a vězte, jak problém obejít, abyste alespoň mohli pokročit na jiné frontě. Nikdy nebuďte v situaci, kdy je za řešení vašeho problému zodpovědný někdo jiný, je to naopak – vy jste zodpovědní za to, abyste se dostali do cíle, a musíte se vypořádat s překážkami na cestě.

Komunikace

To je skutečná změna hry a často nejkritičtější věc, kterou musí inženýr mít, aby mohl mít obrovský vliv na celý tým. Schopnost komunikovat je největší věcí, která umožnila lidstvu stát se tím, čím je, a samozřejmě je stejná věc stejně kritická pro jakýkoli aspekt života, včetně softwarového inženýrství. Dobří inženýři musí umět výmluvně vysvětlit své myšlenky a názory. Musí umět inteligentně a s respektem diskutovat se svými kolegy. Komunikace není jen o mluvení, ještě důležitější je umět naslouchat. Ne každý v týmu bude schopen vyjádřit své myšlenky stejně dobře a dobrý inženýr musí být trpělivý a klást správné otázky, aby pochopil, co si ostatní myslí, a pomohl jim být vyslyšen. To vše je stejně důležité pro ústní i písemnou komunikaci, a co je důležitější, nejde jen o konverzaci – život vývojářů je plný tuny forem komunikace: dokumenty, prezentace, dokumentace, komentáře ke kódu, zprávy o revizích. Dokonce i psaní čitelného kódu a volba správných názvů proměnných je formou komunikace.

Týmová práce

To je jedno z míst, kde i zkušení inženýři velmi často selhávají a ani o tom nevědí. Vzpomeňte si, kolikrát jste si řekli „je to moc složité, nechte to na mně“. Vzpomeňte si, kolikrát jste řekli „tento úkol je práce pro jednoho člověka, přidáním dalších lidí se to neusnadní“. Vzpomeňte si na všechny případy, kdy jste neměli čas pomoci někomu jinému a nikdy jste to nesledovali, nebo jste někomu opravili/refakturovali kód, aniž byste ho požádali o recenzi, nebo jste provedli velkou změnu, aniž byste ji konzultovali se svým týmem. Příkladů je spousta. A jde o to, že i zkušeným inženýrům to v danou chvíli připadá jako správná věc. Ale je to taktické myšlení, které se vyplatí jen krátkodobě. Pokud chceme dosáhnout velkých věcí, musíme se ujistit, že dokážeme spolupracovat jako tým. Není náhoda, že týmová práce přišla na řadu hned po komunikaci. To jsou věci, které nás činí nejefektivnějšími, je to základní biologie. Skvělí inženýři nejen spolupracují, konzultují, učí se, pomáhají, tvoří dvojice a respektují své kolegy, ale také mentorují, upozorňují na problémy, zjišťují zájem a učí se ze všeho, co se v týmu děje, a aktivně se snaží být nápomocni i u věcí, které se jich přímo netýkají. Úžasní inženýři vědí, kdy a jak přijít s návrhy, které usnadní spolupráci mnoha lidí na věcech, kde se očekává hodně práce.

Udržujte to jednoduché

Složitost řešení může být jedním z tichých zabijáků schopnosti týmu postupovat vpřed a přizpůsobovat se. Je to jako vysoký krevní tlak. Netrénovanému oku se zdá, že je vše v pořádku a vše funguje, jak má, ale ve skutečnosti vás hluboko uvnitř pomalu zabíjí něco, co nemá přímý vliv na žádnou hlavní funkčnost. Dobří inženýři vytvářejí pragmatická řešení a čitelný kód, i když napíšete více řádků kódu. Neukazujte, jak jste „chytří“ tím, že využijete všechny možnosti jazyka, vytvoříte nadbytečné úrovně abstrakce nebo napíšete funkci v jednom řádku, kterou nikdo jiný nepochopí a neodladí. Nebuďte puristé, nepřepracovávejte řešení tam, kde to není nezbytně nutné, a nikdy se nebojte vzít něco, co už je složité, a snažte se to zjednodušit.

Prioritizace

Nemůžeme dělat všechno. Nemůžeme vyřešit všechny problémy. Nemůžeme vyhrát všechny debaty. Nemůžeme všechno udělat dokonale. Máme omezený čas a omezené zdroje a musíme je využívat moudře. To znamená, že musíme umět rozlišit, na čem musíme trvat, co můžeme odložit a co bychom měli ignorovat. Vývojáři dělají tato rozhodnutí desítkykrát denně. Když zvažujeme, zda prozkoumat chybu, když zvažujeme provést nějaký refaktor, když zvažujeme zpracovat nějaký případ užití nebo okrajový případ, když zvažujeme odbočit od plánovaného úkolu a dokonce když investujeme čas do toho, abychom někoho přesvědčili o svém názoru. Dobří inženýři vědí, že je třeba neúnavně opravovat, zkoumat, zkoumat nebo trvat na svém názoru u věcí, které jsou opravdu důležité. Vědí, že si mají udělat poznámku a vrátit se k něčemu později, pokud je to důležité, ale ne naléhavé. A vědí, že mají něco nechat být nebo přijmout názor někoho jiného, i když se jim to nelíbí, když to není opravdu tak důležité.

Řízení času

Jak bylo uvedeno výše, smutnou pravdou naší existence je, že jsme svázáni časem. Produkty, které vyvíjíme, musíme nakonec uvést do provozu, máme termíny, odhady a cíle, kterých musíme dosáhnout. Dobří vývojáři si musí vypěstovat nejen intuici pro odhadování toho, jak dlouho jim úkoly trvají, ale také musí chytře rozdělit a seřadit své úkoly na ještě menší části. Musí moudře řídit přerušení a přepínání kontextu. Tato intuice odhadu času je neoddělitelnou součástí schopnosti stanovit si priority, jak je popsáno výše. Například: Pokud je něco dostatečně krátké, může se vyplatit to udělat, i když to není super důležité. A pokud je to příliš dlouhé, možná bude lepší to trochu odložit nebo se poradit s kolegy či nadřízeným.

Závěr

Jak jsme již zmínili, věříme, že inženýři, kteří jsou odborníky ve všech výše uvedených oblastech, mohou tým 10x vylepšit tím, že ovlivní a inspirují své kolegy. Skvělí inženýři musí mít vždy na paměti, že toto je součástí jejich každodenní práce: ovlivňovat a inspirovat. Znamená to, že si musíte najít čas nejen na svou práci, ale také na to, abyste pomáhali ostatním dělat jejich práci. To má mnoho podob: mentorovat lidi ve svém týmu, vytvářet zdroje pro vzdělávání lidí, dbát na to, aby bylo vše dobře zdokumentováno, být vždy otevřený vysvětlování a párování s lidmi a mnoho dalšího. Být dobrým mentorem a pedagogem znamená, že nejen pomáháte členům svého týmu růst, ale také prohlubujete své chápání všeho, co děláte, a dává vám to nový pohled na jasnost věcí, složitost systému a místa, kde lze věci zlepšit.

Toto jsou vlastnosti inženýrů 10x, a to nejen v jejich individuálním dopadu, ale také v jejich dopadu na všechny ostatní. Vždy se ptejte sami sebe, co můžete udělat pro to, aby byl váš dopad větší, vždy je zde další prostor pro růst.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.