Twitterissä puhuttiin hiljattain paljon kymmenkertaisesta insinööristä, mikä käynnisti laajan keskustelun siitä, mikä tekee hyvästä insinööristä. Joitakin todella typeriä asioita mainittiin, kuten ”10x-insinöörit vihaavat kokouksia” ja ”10x-insinöörit tulevat myöhässä toimistolle” ja ”10x-insinöörien kannettavan tietokoneen tausta on yleensä musta”. Yleisesti ottaen näyttää siltä, että jotkut ihmiset ajattelevat, että jos olet tarpeeksi fiksu, on ok olla kusipää.
Wixissä yritämme jättää kusipäät oven ulkopuolelle. Uskomme, että 10x insinöörit eivät ole vain ihmisiä, jotka pystyvät tuottamaan 10x nopeammin kuin useimmat ihmiset, jopa enemmän, ne ovat ihmisiä, jotka voivat tehdä koko tiimistä 10x paremman vaikuttamalla positiivisesti kaikkiin, joiden kanssa he työskentelevät.
Monet ihmiset käyttävät ison osan urastaan siihen, että heistä tulee mielestämme kunnon insinööri. Se tarkoittaa, että olet hyvä koodaaja, joka osaa ratkaista ongelmia ja osaa sujuvasti käyttää käytettävissään olevia työkaluja, kuten IDE:tä, debuggeria, palveluja ja kehyksiä. Tässä artikkelissa yritetään kuvata, mikä me Wix Engineeringissä uskomme tekevämme kunnon insinööristä 10x insinöörin.
Yksi insinöörin tärkeimmistä kyvyistä on kyky työskennellä itsenäisesti. Pähkinänkuoressa tämä tarkoittaa sitä, että tietää aina, mitä pitää tehdä, ja harvoin joutuu tilanteeseen, jossa odottaa jonkun kertovan, mitä pitää tehdä. Se ei tarkoita sitä, että pystyt tekemään kaiken itse, vaan sitä, että osaat purkaa esteet itsellesi ja muille tiimisi jäsenille niin, että tekninen velka on mahdollisimman pieni. Jos esimerkiksi jokin ongelma estää sinua, löydät siihen ratkaisun, joko pyytämällä apua kollegoiltasi tai ratkaisemalla sen itse. Itsenäisillä insinööreillä on kyky viedä projekti ideasta tuotantoon sen kaikkien vaiheiden kautta. He pystyvät määrittelemään, mitä asioita he tarvitsevat voidakseen suoriutua tehtävästä, ja he tietävät, milloin nostaa lipun pystyyn, jos tarvitsevat apua.
Suunnittelu
Vaikein asia, jonka kanssa vähemmän kokeneiden insinöörien näkee kamppailevan, on se, että he pystyvät ottamaan ison tehtävän haltuunsa ja pilkkomaan sen pienempiin vaiheisiin. Tämä on tärkeää paitsi siksi, että pystymme arvioimaan, kuinka kauan jokin asia kestää, se on myös kriittinen osa laadukkaan ohjelmiston rakentamista. Oikein suunnittelu tarkoittaa, että kehittäjä voi julkaista tuotteen ensimmäisen version mahdollisimman aikaisin ja alkaa saada palautetta nopeammin. Oikeaoppinen suunnittelu tarkoittaa, että sinulla on järjestelmäsuunnitelma varhaisessa vaiheessa ja sinulla on hyvä kuva siitä, mitä aiot tehdä, ennen kuin hyppäät veteen. Oikein suunnitteleminen tarkoittaa, ettei kehitystyön aikana tule suuria yllätyksiä, jotka rikkovat suunnittelun. Hyvän insinöörin pitäisi pystyä pilkkomaan tehtävä, määrittelemään suunnittelu ja julkaisuvaiheet sekä toimittamaan suunnitteludokumentteja ja arvioita suunnitelmansa osoittamiseksi.
Nöyryys
Tämä on vaikea kysymys. Jopa vahvimmilla insinööreillä on monesti kasvamisen paikka nöyryyden suhteen. Se tarkoittaa sitä, että ei saa olla rakastunut omiin ratkaisuihinsa. Kykyä kuunnella ja hyväksyä muiden ihmisten ratkaisuja. Olettaa vertaistensa parasta, ja kun näkee jotain, joka vaikuttaa virheeltä, yrittää ymmärtää sen taustalla olevat syyt. Avata asiat keskusteltaviksi. Antaa ihmisten ehdottaa omia ratkaisujaan. Jaa ideasi äläkä koskaan huolehdi siitä, että saat niistä kunniaa. On tärkeämpää, että kaikki kokevat idean hyväksi ja tuntevat sen olleen tiimityötä kuin se, että kaikki tietävät sen olleen sinun ideasi. Ole rehellinen. Anna ihmisille kunniaa. Älä koskaan pelkää sanoa, että olit väärässä, tai tunnustaa, että joku muu on oikeassa. Ihmiset kunnioittavat ihmisiä, jotka voivat muuttaa mielipidettään.
Käytä uudelleen
Saattaa kuulostaa triviaalilta, mutta useimmat ihmiset eivät ymmärrä, että paras tapa edistyä on rakentaa aikaisemman työn päälle. Vähemmän kokeneilla insinööreillä on aina paha tapa ajatella, että paras tapa edetä nopeasti on sivuuttaa kaikki jo olemassa oleva ja aloittaa alusta. Hyvät insinöörit tutustuvat aina perusteellisesti kaikkiin jo olemassa oleviin ratkaisuihin, oppivat niistä, kysyvät niistä ja ymmärtävät niitä. Vaikka olemassa oleva ratkaisu olisi puutteellinen, he yrittävät selvittää, miten sitä voitaisiin parantaa, ennen kuin he päättävät korvata sen. He eivät koskaan hylkää olemassa olevaa ratkaisua perehtymättä siihen syvällisesti ja keskustelematta olemassa olevan ratkaisun omistajan kanssa.
Infrastruktuurin ajattelutapa
Kuten edellä on kuvattu, aikaisemman työn uudelleenkäytöllä voi olla valtava vaikutus ihmisiin. Tämä tarkoittaa, että insinöörien tulisi aina olla tarkkana, onko heillä mahdollisuus luoda jotain uudelleenkäytettävää. Helpointa on jättää tällainen tilaisuus huomiotta. Uudelleenkäytettävien asioiden tekeminen maksaa ”tekijälle” aina enemmän kuin niiden tekeminen ilman uudelleenkäytettävyyttä, joten monet lyhytnäköiset ihmiset jättävät huomiotta ne hyödyt, joita he ja muut tiimit hyötyvät myöhemmin. Hyvä kehittäjä tunnistaa mahdollisuudet luoda uudelleenkäytettäviä asioita, osaa tehdä niistä uudelleenkäytettäviä parhaalla mahdollisella tavalla ja panostaa siihen.
Master your domain
Ainut tapa keksiä hyviä ratkaisuja on ymmärtää perusteellisesti tuote, jonka parissa työskentelet. Hyvät insinöörit eivät ainoastaan ymmärrä syvällisesti tuotetta, jota he kehittävät. He ymmärtävät myös kaikki käyttötapaukset, ymmärtävät tuotteen motivaation ja pystyvät helposti käymään mielekästä keskustelua tuotepäällikön kanssa, kyseenalaistamaan päätöksiä ja tarjoamaan vaihtoehtoja. He tietävät, mitkä ovat tärkeitä ominaisuuksia ja mitkä vähemmän tärkeitä asioita, ja osaavat priorisoida sen mukaan ja tarjota tarvittaessa kiertoteitä. Tämä on tärkeää paitsi tuotteelle, jonka parissa työskentelet, myös mille tahansa tuotteelle, jonka kanssa integroit.
Uteliaisuus
Hyvillä kehittäjillä on oltava tervettä uteliaisuutta, joka ulottuu paljon oman alansa rajojen ulkopuolelle. Tämä pätee erityisesti sen oppimiseen, miten taustalla olevat teknologiat todellisuudessa toimivat, mutta aivan yhtä tärkeää on ymmärtää tuotteita, joiden parissa muut tiimit työskentelevät, niiden arkkitehtuuria ja sitä, miten ne kytkeytyvät toisiinsa kokonaiseksi järjestelmäksi. Tämän laajemman kontekstin hallitseminen voi olla korvaamatonta, kun ratkaistaan monimutkaisia ongelmia, ja se voi olla inspiraation lähde.
Ei rajoja
Havaitsemme usein, että huonojen ratkaisujen ja huonon arkkitehtuurin lähde juontaa juurensa siihen, että ihmiset pelkäävät muuttaa asioita, jotka ovat heidän laatikkonsa rajojen ulkopuolella. Asiakaskehittäjällä on taipumus ratkaista asiat asiakkaalla, vaikka se olisi parempi ratkaista palvelimella. Sovelluskehittäjillä on taipumus ratkaista ongelma paikallisesti, vaikka ratkaisu kuuluisi alustaan tai infrastruktuuriin. Syy tähän on yksinkertainen. On helpompaa olla aloittamatta keskustelua eri tiimin kanssa, on helpompaa käsitellä ulottumattomissa olevaa maailmaa mustana laatikkona, on helpompaa toimia sen paholaisen kanssa, jonka tuntee. Hyvien insinöörien on kuitenkin tiedettävä, että he ovat osa yhtä suurta järjestelmää ja että mikään järjestelmän osa ei oikeastaan ole heidän ulottumattomissaan. Arkkitehtuurimuutoksesta keskusteleminen toisen tiimin kanssa on terveellistä ja hyödyllistä, ja se saattaa lisätä näkökulmaasi. Tarjoutuminen myötävaikuttamaan haluamaasi muutokseen on hyvä keino rakentaa luottamusta tiimien välille. Uuden toimialueen koskettaminen on kokemus, josta voit vain hyötyä. Tärkeintä on, että kun rajoistasi tulee joustavampia, vaikutusvaltasi kasvaa. Aina kun vältät ulottumasta rajojesi ulkopuolelle, ymmärrä, että itse asiassa pidät itseäsi loitolla suuremman vaikutuksen saavuttamiselta.
Vastuu/omistajuus
Vaikkei se olekaan heti ilmeistä, mutta hyvin usein, jos pengot perimmäistä syytä siihen, miksi jokin hanke viivästyi tai epäonnistui, huomaat, että syynä ovat omistajuus ja vastuu. Ihmisillä on aina taipumus syyttää ympäristöään: ”Jouduin odottamaan, että toinen tiimi sai jonkin asian valmiiksi”, ”Minulla oli järjestelmäongelma, eikä kukaan ehtinyt auttaa minua”, ”Sain määritelmät liian myöhään”. Hyvä insinööri tietää, että nämä asiat ovat lähes aina tekosyitä. Kun olet tehtävän omistaja ja vastuu sen toteuttamisesta on sinulla, ajattelutapasi pitäisi olla se, että jokainen kohtaamasi ongelma on asia, joka sinun on ratkaistava. Jos toinen tiimi estää sinua, mene juttelemaan heidän kanssaan. Tarjoa parityöskentelyä ongelman parissa äläkä ”heitä” vastuuta jollekin toiselle. Jos et ole vielä saanut määritelmiä, tee oletuksia siitä, mitä määritelmät tulevat olemaan. On parempi edetä jonkin verran ja tehdä myöhemmin korjauksia kuin vain istua ja odottaa. Jos jokin iso asia viivästyttää sinua, tiedä milloin nostaa lippu ylös ja osaa kiertää ongelman niin, että voit ainakin edistyä toisella rintamalla. Älä koskaan joudu tilanteeseen, jossa joku muu on vastuussa ongelmasi ratkaisemisesta, vaan päinvastoin – sinä olet vastuussa siitä, että pääset maaliin, ja sinun on hoidettava esteet matkan varrella.
Kommunikaatio
Tämä on todellinen pelinvaihtaja, ja se on usein kriittisin asia, joka insinöörillä on oltava, jotta hän pystyy vaikuttamaan valtavasti koko tiimiin. Kyky kommunikoida on suurin yksittäinen asia, joka mahdollisti sen, että ihmiskunnasta tuli se, mikä se on, ilmeisesti sama asia on yhtä kriittinen kaikilla elämän osa-alueilla, myös ohjelmistotekniikassa. Hyvien insinöörien on kyettävä selittämään ideansa ja mielipiteensä kaunopuheisesti. Heidän on kyettävä älykkäästi ja kunnioittavasti väittelemään kollegoidensa kanssa. Viestinnässä ei ole kyse vain puhumisesta, vaan vielä tärkeämpää on pystyä kuuntelemaan. Kaikki tiimin jäsenet eivät pysty ilmaisemaan ajatuksiaan yhtä hyvin, ja hyvän insinöörin on oltava kärsivällinen ja kysyttävä oikeita kysymyksiä ymmärtääkseen, mitä muut ajattelevat, ja autettava heitä tulemaan kuulluksi. Kaikki tämä on yhtä tärkeää sekä suullisessa että kirjallisessa viestinnässä, ja mikä tärkeintä, kyse ei ole vain keskustelusta – kehittäjien elämä on täynnä tonneittain erilaisia viestintämuotoja: asiakirjoja, esityksiä, dokumentaatiota, koodikommentteja, commit-viestejä. Jopa luettavan koodin kirjoittaminen ja hyvien muuttujien nimien valitseminen on yksi viestinnän muoto.
Tiimityö
Tämä on yksi niistä kohdista, joissa jopa kokeneetkin insinöörit epäonnistuvat hyvin usein eivätkä edes tiedä, että niin tapahtuu. Ajattele kaikkia niitä kertoja, kun olet sanonut ”se on liian monimutkaista, jätä se minulle”. Ajattele niitä kertoja, kun sanoit ”tämä tehtävä on yhden ihmisen työtä, useamman ihmisen lisääminen ei helpota sitä”. Ajattele kaikkia niitä kertoja, kun sinulla ei ollut aikaa auttaa jotakuta toista etkä koskaan ottanut asiasta yhteyttä tai korjannut/korjannut jonkun koodia kysymättä hänen arvosteluaan tai teit suuren muutoksen kuulematta tiimiäsi. Esimerkkejä on vaikka kuinka paljon. Ja asia on niin, että jopa kokeneille insinööreille se tuntuu tällä hetkellä oikealta. Tämä on kuitenkin taktista ajattelua, joka kannattaa vain lyhyellä aikavälillä. Jos haluamme saavuttaa suuria asioita, meidän on varmistettava, että voimme tehdä yhteistyötä tiiminä. Ei ole sattumaa, että tiimityö tuli heti viestinnän jälkeen. Ne ovat asioita, jotka tekevät meistä tehokkaimpia, se on perusbiologiaa. Suuret insinöörit eivät ainoastaan tee yhteistyötä, konsultoi kollegoitaan, opi heiltä, auta heitä, muodosta pareja ja kunnioita heitä, vaan he myös mentoroivat, tuovat esiin ongelmia, kiinnostuvat kaikesta tiimissä tapahtuvasta ja oppivat siitä sekä pyrkivät ennakoivasti olemaan avuksi myös sellaisissa asioissa, jotka eivät suoraan koske heitä. Hämmästyttävät insinöörit tietävät, milloin ja miten keksiä malleja, jotka helpottavat monen ihmisen yhteistyötä asioissa, joissa odotetaan paljon työtä.
Pitäkää se yksinkertaisena
Ratkaisun monimutkaisuus voi olla yksi tiimin kyvyn edetä ja sopeutua hiljaisista tappajista. Se on kuin korkea verenpaine. Harjaantumattomalle silmälle näyttää siltä, että kaikki on kunnossa ja kaikki toimii odotetusti, mutta itse asiassa syvällä sisimmässäsi jokin, joka ei vaikuta suoraan mihinkään päätoimintoihin, tappaa sinut hitaasti. Hyvät insinöörit luovat käytännöllisiä ratkaisuja ja luettavaa koodia, vaikka kirjoittaisitkin enemmän koodirivejä. Älä näytä, kuinka ”fiksu” olet käyttämällä kaikkia kielen mahdollisuuksia, luomalla turhia abstraktiotasoja tai kirjoittamalla yhdellä rivillä funktion, jota kukaan muu ei voi ymmärtää tai debugata. Älä ole puristi, älä yli-insinööröi ratkaisuja silloin, kun se ei ole ehdottoman välttämätöntä, äläkä koskaan pelkää ottaa jotain jo valmiiksi monimutkaista ja yrittää yksinkertaistaa sitä.
Priorisointi
Me emme voi tehdä kaikkea. Emme voi ratkaista kaikkia ongelmia. Emme voi voittaa kaikkia keskusteluja. Emme voi tehdä kaikesta täydellistä. Meillä on rajallinen aika ja rajalliset resurssit, ja meidän on käytettävä ne viisaasti. Tämä tarkoittaa, että meidän on pystyttävä erottamaan toisistaan se, mitä meidän on vaadittava tekemään, mitä voimme lykätä ja mitä meidän pitäisi jättää huomiotta. Kehittäjät tekevät näitä päätöksiä kymmeniä kertoja joka päivä. Kun harkitsemme, tutkimmeko bugia, kun harkitsemme refaktorointia, kun harkitsemme jonkin käyttötapauksen tai ääritapauksen käsittelyä, kun harkitsemme poikkeamista suunnitellusta tehtävästä ja jopa kun käytämme aikaa jonkun vakuuttamiseen omasta mielipiteestämme. Hyvät insinöörit osaavat olla peräänantamattomia korjatessaan, tutkiessaan, tutkiessaan tai vaatiessaan, että heidän on saatava asiansa esille niissä asioissa, jotka ovat todella tärkeitä. He osaavat tehdä muistiinpanoja ja palata asiaan myöhemmin, jos se on tärkeä mutta ei kiireellinen. Ja he osaavat jättää jonkin asian rauhaan tai hyväksyä jonkun toisen mielipiteen, vaikka olisivat siihen tyytymättömiä, kun asia ei ole oikeasti niin tärkeä.
Ajanhallinta
Kuten edellä mainittiin, olemassaolomme surullinen totuus on se, että aika sitoo meitä. Kehittämiemme tuotteiden on lopulta käynnistyttävä, meillä on määräaikoja, arvioita ja tavoitteita, jotka meidän on saavutettava. Hyvien kehittäjien on kehitettävä intuitionsa arvioida, kuinka kauan heidän tehtävänsä kestävät, mutta heidän on myös oltava fiksuja siinä, miten he pilkkovat ja järjestävät tehtävänsä vielä pienempiin osiin. Heidän on hallittava keskeytyksiä ja kontekstin vaihtamista viisaasti. Tämä ajan arviointia koskeva intuitio on erottamaton osa edellä kuvattua priorisointikykyä. Jos esimerkiksi jokin asia on tarpeeksi lyhyt, se saattaa olla tekemisen arvoinen, vaikka se ei olisikaan supertärkeä. Ja jos se on liian pitkä, voi olla parempi lykätä hieman tai neuvotella kollegoiden tai esimiehen kanssa.
Johtopäätös
Kuten aiemmin mainittiin, uskomme, että insinöörit, jotka ovat asiantuntijoita kaikissa edellä mainituissa asioissa, voivat tehdä tiimistä 10-kertaisesti paremman vaikuttamalla ja inspiroimalla kollegoitaan. Suurten insinöörien on aina muistettava, että tämä on osa heidän jokapäiväistä työtään: vaikuttaminen ja innostaminen. Se tarkoittaa, että sinun on löydettävä aikaa paitsi oman työsi tekemiseen myös muiden auttamiseen heidän työssään. Tämä tapahtuu monissa eri muodoissa: mentoroimalla tiimisi jäseniä, luomalla resursseja ihmisten kouluttamiseksi, varmistamalla, että kaikki on hyvin dokumentoitu, olemalla aina avoin selittämään ja muodostamalla pareja ihmisten kanssa ja paljon paljon muuta. Hyvänä mentorina ja kouluttajana oleminen tarkoittaa, että et ainoastaan auta tiimisi jäseniä kasvamaan, vaan se myös syventää ymmärrystäsi kaikesta siitä, mitä teet, ja antaa sinulle uuden näkökulman asioiden selkeyteen, järjestelmän monimutkaisuuteen ja paikkoihin, joissa asioita voidaan parantaa.
Nämä ovat 10-kertaisten insinöörien tunnusmerkkejä, ei ainoastaan heidän yksilöllisen vaikutuksensa kannalta, vaan myös heidän vaikutuksensa kaikkien muiden kannalta. Kysy aina itseltäsi, mitä voit tehdä tehdessäsi vaikutuksestasi suuremman, aina on lisää tilaa kasvaa.