Det Àr kÀnt att en CTO:s kompetens bara prövas vid andra Äket i denna roll. Eftersom det Àr en sak att arbeta i ett företag i flera Är, utvecklas tillsammans med det och, dÀrmed, gradvis ta pÄ sig mer ansvar i samma kulturella kontext. Och nÄgot helt annat Àr att direkt gÄ in i rollen som teknisk chef i ett företag med en massa legacy och en hel del problem som noggrant sopats under mattan.
I det hÀr avseendet Àr erfarenheten av Leon Fayer, som han delade pÄ , inte direkt unik, men av den summan som han fÄtt efter 20 Är i olika roller, Àr den mycket anvÀndbar. Nedan finns en tidslinje över hÀndelserna under 90 dagar och mÄnga roliga anekdoter som man kan skratta Ät nÀr de hÀnder nÄgon annan, men som inte Àr sÄ roliga att stöta pÄ personligen.
Leon berÀttar mycket fÀrgstarkt pÄ ryska, sÄ om du har 35-40 minuter rekommenderar jag att titta pÄ videon. Den textbaserade versionen hittar du nedan för att spara tid.

Den första versionen av rapporten var en vÀlstrukturerad beskrivning av arbetet med mÀnniskor och processer, innehÄllande nyttiga rekommendationer. Men den fÄngade inte alla överraskningar som dök upp lÀngs vÀgen. DÀrför Àndrade jag formatet och redogjorde för de problem som dök upp i det nya företaget som en ande ur en flaska, och metoderna för att lösa dem i kronologisk ordning.
En mÄnad före
Som mÄnga goda historier började denna med alkohol. Vi satt med bekanta pÄ en bar, och som vanligt i IT-kretsar klagade alla pÄ sina problem. En av dem hade just bytt jobb och berÀttade om sina svÄrigheter bÄde med teknologin och med mÀnniskor, och med teamet. Ju mer jag lyssnade, desto mer insÄg jag att han bara behövde anstÀlla mig, eftersom det var just sÄdana problem jag hade löst de senaste 15 Ären. SÄ jag sa det till honom, och nÀsta dag trÀffades vi redan i en arbetsmiljö. Företaget kallades Teaching Strategies.
Teaching Strategies Àr ledande pÄ marknaden för utbildningsprogram för mycket smÄ barn - frÄn födseln till tre Ärs Älder. Det traditionella "papper"-företaget har funnits i cirka 40 Är, medan den digitala SaaS-versionen av plattformen har funnits i 10. För relativt kort tid sedan inleddes processen att anpassa den digitala teknologin till företagets standarder. Den "nya" versionen lanserades 2017 och var nÀstan som den gamla, förutom att den fungerade sÀmre.
Det mest intressanta Ă€r att trafiken hos det hĂ€r företaget Ă€r vĂ€ldigt förutsĂ€gbar â dag för dag, Ă„r efter Ă„r, kan man vĂ€ldigt tydligt förutsĂ€ga hur mĂ„nga mĂ€nniskor som kommer och nĂ€r. Till exempel, mellan klockan 13 och 15 pĂ„ eftermiddagen gĂ„r alla barn i förskolorna och sover, medan lĂ€rarna börjar mata in information. Och sĂ„ hĂ€r sker det varje dag, förutom pĂ„ helgerna, eftersom nĂ€stan ingen arbetar dĂ„.

För att gÄ hÀndelserna i förvÀg kan jag nÀmna att jag började mitt arbete under perioden med den största Ärliga trafiken, vilket Àr intressant av olika skÀl.
Plattformen, som verkar ha funnits i bara 2 Är, hade en slags stack: ColdFusion & SQL Server 2008. ColdFusion, om ni inte vet, vilket ni förmodligen inte gör, Àr en typ av enterprise PHP som kommit ut i mitten av 90-talet, och jag har inte hört nÄgot om det sedan dess. Det fanns ocksÄ: Ruby, MySQL, PostgreSQL, Java, Go, Python. Men den huvudsakliga monoliten körde pÄ ColdFusion och SQL Server.
Problem
Ju mer jag pratade med företagets anstĂ€llda om arbetet och de problem som uppstod, desto mer insĂ„g jag att problemen inte bara var av teknisk natur. Visst, teknologin var gammal â vi hade arbetat med gammal teknologi, men det fanns problem med teamet och processerna, och företaget började förstĂ„ detta.
Traditionellt satt teknikerna i hörnet och sysslade med sitt eget arbete. Men mer och mer av verksamheten började ske genom den digitala versionen. SÄ det fanns nya tillÀgg till företaget under det senaste Äret innan jag började: en styrelse, CTO, CPO och QA-chef. Det vill sÀga, företaget började investera i den teknologiska sfÀren.
Tecken pÄ tungt arv fanns inte bara i systemen. Företaget hade legacy-processer, legacy-mÀnniskor, legacy-kultur. Allt detta behövde Àndras. Jag tÀnkte att det sÀkerligen inte skulle bli trÄkigt och beslutade mig för att prova.
TvÄ dagar före
TvÄ dagar innan min nya anstÀllning anlÀnde jag till kontoret, fyllde i de sista papperna, trÀffade teamet och upptÀckte att teamet vid den tiden kÀmpade med ett problem. Problemet var att den genomsnittliga laddningstiden för sidor hade stigit till 4 sekunder, det vill sÀga i dubbelt sÄ lÄng tid.

Enligt grafen hade nÄgot uppenbarligen hÀnt, men vad vet jag inte. Det visade sig att problemet lÄg i nÀtverks latens i datacentret: 5 ms latens i datacentret omvandlades till 2 sekunder för anvÀndarna. Varför det blev sÄ visste jag inte, men det blev i alla fall kÀnt att problemet lÄg i datacentret.
Dag ett
TvÄ dagar hade gÄtt, och pÄ min första arbetsdag upptÀckte jag att problemet fortfarande var kvar.

Under de tvÄ dagarna laddades sidorna för anvÀndarna i genomsnitt pÄ 4 s. Jag frÄgade om de hade kommit fram till vad problemet var.
â Ja, vi har öppnat ett Ă€rende.
â Och?
â Tja, de har Ă€nnu inte svarat oss.
DÄ insÄg jag att allt jag fÄtt höra tidigare bara var en liten del av isberget som vi mÄste kÀmpa emot.
Det finns ett bra citat som passar bra i det hÀr fallet:
«Ibland krÀvs det att man förÀndrar organisationen för att förÀndra teknologin».
Men eftersom jag började arbeta under den mest hektiska tiden pÄ Äret var jag tvungen att titta pÄ bÄda lösningsalternativen: bÄde kortsiktigt och lÄngsiktigt. Och börja med det som var kritiskt just nu.
Dag tre
SÄ, inlÀsningen tar 4 sekunder, och mellan 13 och 15 Àr det de största topparna.

PÄ den tredje dagen sÄg inlÀsningen ut sÄ hÀr under den tidsperioden:

FrĂ„n mitt perspektiv fungerade ingenting överhuvudtaget. FrĂ„n allas perspektiv gick det dock nĂ„got lĂ„ngsammare Ă€n vanligt. Men det gĂ„r inte bara sĂ„ â det Ă€r ett allvarligt problem.
Jag försökte övertyga teamet, men de sa bara att vi behövde fler servrar. Det Àr förstÄs en lösning pÄ problemet, men lÄngt ifrÄn den enda och mest effektiva. Jag frÄgade varför servrarna inte rÀckte, vilken trafikvolym vi hade. Jag extrapolerade data och kom fram till att vi hade ungefÀr 150 förfrÄgningar per sekund, vilket i stort sett ligger inom rimliga grÀnser.
Men vi fĂ„r inte glömma att innan man fĂ„r rĂ€tt svar mĂ„ste man stĂ€lla rĂ€tt frĂ„ga. Min nĂ€sta frĂ„ga var: hur mĂ„nga frontend-servrar har vi. Svaret förvĂ„nade mig lite â vi hade 17 frontend-servrar!
â Jag vĂ„gar knappt frĂ„ga, 150 delat med 17 blir det ungefĂ€r 8? Menar ni att varje server hanterar 8 förfrĂ„gningar per sekund, och om det imorgon blir 160 förfrĂ„gningar per sekund, sĂ„ behöver vi ytterligare 2 servrar?
SjÀlvklart behövde vi inga fler servrar. Lösningen lÄg i sjÀlva koden och var ganska uppenbar:
var currentClass = classes.getCurrentClass();
return currentClass; Det fanns en funktion getCurrentClass(), eftersom allt pĂ„ sidan fungerar i kontexten av en klass â det Ă€r sant. Och just denna funktion hade pĂ„ varje sida 200+ förfrĂ„gningar.
Lösningen var dÀrmed vÀldigt enkel, man behövde inte ens skriva om nÄgot: man behövde bara undvika att begÀra samma information flera gÄnger.
if ( !isDefined("REQUEST.currentClass") ) {
var classes = new api.private.classes.base();
REQUEST.currentClass = classes.getCurrentClass();
}
return REQUEST.currentClass;Jag blev mycket glad eftersom jag trodde att jag hade hittat det största problemet redan den tredje dagen. Hur naiv jag var, det var bara ett av mÄnga problem.

Men lösningen av det första problemet sÀnkte tidsplanen betydligt.
Samtidigt jobbade vi med andra optimeringar. Det fanns mĂ„nga uppenbara saker som kunde Ă„tgĂ€rdas. Till exempel, den tredje dagen upptĂ€ckte jag att det faktiskt fanns en cache i systemet (först trodde jag att alla förfrĂ„gningar gick direkt frĂ„n databasen). NĂ€r jag tĂ€nker pĂ„ cache, förestĂ€ller jag mig standard Redis eller Memcached. Men bara jag tĂ€nkte sĂ„, eftersom MongoDB och SQL Server anvĂ€ndes för caching i det systemet â samma databas som vi just hade lĂ€st data frĂ„n.
Dag tio
Den första veckan sysslade jag med problem som behövde ÄtgÀrdas omedelbart. NÄgonstans under andra veckan deltog jag för första gÄngen i en standup för att prata med teamet, se vad som hÀnde och hur hela processen fortskred.
à terigen upptÀcktes nÄgot intressant. Teamet bestod av: 18 utvecklare; 8 testare; 3 managare; 2 arkitekter. Och alla deltog i de gemensamma ritualerna, vilket innebar att fler Àn 30 personer kom till standup varje morgon och berÀttade vad de hade gjort. Det var uppenbart att mötet inte tog 5 eller 15 minuter. Ingen lyssnade pÄ varandra eftersom alla arbetade pÄ olika system. I sÄdant format var 2-3 biljetter per timme under grooming sessionen redan ett bra resultat.
Det första vi gjorde var att dela upp teamet i flera linjer baserat pÄ produkter. För olika sektioner och system utsÄg vi separata team som inkluderade utvecklare, testare, produktchefer och affÀrsanalytiker.
Resultatet blev:
- Kortsade ner pÄ standups och möten.
- Ămneskunskap om produkten.
- KÀnsla av Àgande. NÀr mÀnniskor tidigare ofta roterade mellan systemen visste de att nÄgon annan troligtvis skulle behöva jobba med deras buggar, men inte de sjÀlva.
- Samarbete mellan grupper. Det behöver inte sÀgas att QA inte kommunicerade mycket med programmerarna tidigare, produktchefen gjorde sitt eget och sÄ vidare. Nu hade de en gemensam ansvarspunkt.
Vi fokuserade frĂ€mst pĂ„ effektivitet, prestanda och kvalitet â dessa var de problem vi försökte lösa genom att omvandla teamet.
Dag elva
I processen av att Àndra teamstrukturen upptÀckte jag hur man berÀknar BerÀttelsePoÀng. 1 SP motsvarade en dag, och varje ticket innehöll SP för bÄde utveckling och QA, vilket betyder minst 2 SP.
Hur upptÀckte jag detta?

Vi hittade en bugg: i en av rapporterna, dÀr start- och slutdatum för den önskade rapporten anges, beaktas inte den sista dagen. Det vill sÀga i nÄgonstans i frÄgan fanns det inte <=, utan bara <. Jag fick höra att detta var tre Story Points, vilket betyder 3 dagar.
Efter detta gjorde vi:
- Vi granskade systemet för att bedöma Story Points. Nu nÄr upptÀckten av smÄ buggar, som snabbt kan köras genom systemet, snabbare ut till anvÀndaren.
- Vi började sammanföra relaterade tickets för utveckling och testning. Tidigare var varje ticket, varje bugg en isolerad ekosystem, obunden till nÄgot annat. Att Àndra tre knappar pÄ en sida kunde ha varit tre olika tickets med tre olika QA-processer istÀllet för ett automatiserat test pÄ sidan.
- Vi började arbeta med utvecklarna kring tillvĂ€gagĂ„ngssĂ€ttet för att uppskatta arbetsinsatsen. Tre dagar för att byta en knapp â det Ă€r inte roligt.
Dag tjugo
NÄgonstans vid mitten av den första mÄnaden stabiliserades situationen nÄgot, jag hade fÄtt grepp om vad som huvudsakligen pÄgick och började redan se mot framtiden och tÀnka pÄ lÄngsiktiga lösningar.
Bevara kompatibilitet med git-repositoriets diskformat (utan att bevara kompatibilitet med verktyg);
- En hanterad plattform. Hundratals förfrĂ„gningar pĂ„ varje sida â det Ă€r orealistiskt.
- FörutsĂ€gbara trender. Det fanns periodiska trafiktoppar som vid första anblicken inte korrelerade med andra mĂ€tvĂ€rden â vi behövde förstĂ„ varför detta intrĂ€ffar och lĂ€ra oss att förutsĂ€ga.
- Utvidgning av plattformen. Företaget vÀxer stÀndigt, fler och fler anvÀndare kommer, trafiken ökar.
Tidigare brukade vi ofta sĂ€ga: âLĂ„t oss skriva om allt i [sprĂ„k/ramverk], allt kommer att fungera bĂ€ttre!â
I de flesta fall fungerar det inte, det Ă€r bra om det som skrivs om ens fungerar alls. SĂ„ vi behövde skapa en roadmap â en konkret strategi som illustrerar steg för steg hur affĂ€rsmĂ„len kommer att uppnĂ„s (vad vi kommer att göra och varför), som:
- reflekterar projektets mission och mÄl;
- prioriterar kÀrnmÄl;
- innehÄller en tidslinje för deras uppnÄelse.
Inga tidigare samtal hade förts med teamet om syftet bakom nÄgra förÀndringar. RÀtta framgÄngsmÄtt behövs för detta. För första gÄngen i företagets historia har vi satt KPI:er för den tekniska gruppen, och dessa mÄtt kopplades till organisationen.

Det vill sÀga att organisatoriska KPI:er stöds av teamen, och teamets KPI:er stöds sedan av individer. Annars, om de tekniska KPI:erna inte stÀmmer överens med de organisatoriska, drar varje person Ät sitt hÄll.
Till exempel, en av de organisatoriska KPI:erna Àr att öka marknadsandelen genom nya produkter.
Vad kan stödja mÄlet att ha fler nya produkter?
- För det första vill vi Àgna mer tid Ät att utveckla nya produkter istÀllet för att ÄtgÀrda fel. Detta Àr en logisk lösning som Àr lÀtt att mÀta.
- För det andra vill vi stödja en ökning av transaktionsvolymen, för ju större marknadsandel, desto fler anvÀndare och dÀrmed mer trafik.

DÄ kan individuella KPI:er, som kan utföras inom gruppen, till exempel handla om den plats varifrÄn de största felen kommer. Om vi fokuserar just pÄ den sektionen kan vi minska antalet fel mycket, vilket i sin tur ökar tiden för att utveckla nya produkter och Äterigen stödja de organisatoriska KPI:erna.
DÀrmed ska varje beslut, inklusive att skriva om koden, stödja specifika mÄl som företaget har stÀllt upp för oss (organisationsvÀxt, nya funktioner, rekrytering av personal).
Under denna process framkom en intressant sak, som blev en nyhet inte bara för de tekniska, utan för hela företaget: alla ticketar mÄste vara inriktade pÄ minst en KPI. Det vill sÀga, om produktÀgaren sÀger att de vill skapa en ny funktion, ska den första frÄgan stÀllas: 'Vilken KPI stöder den hÀr funktionen?' Om ingen, sÄ Àr det tyvÀrr en onödig funktion.
Tredje dagen
I slutet av mÄnaden upptÀckte jag en annan detalj, att ingen i mitt Ops-team nÄgonsin hade sett avtalen vi gör med kunderna. Du kan frÄga dig varför man ska se avtalen.
- För det första, eftersom SLA:erna Àr skrivna i avtalen.
- För det andra Àr SLA olika. Varje kund kom med sina egna krav, och försÀljningsavdelningen skrev under utan att titta.
En annan intressant detalj â i kontraktet med en av de största kunderna stĂ„r det att alla versioner av programvaran som plattformen stöder mĂ„ste vara n-1, det vill sĂ€ga inte den senaste versionen, utan nĂ€st senaste.
Det Àr tydligt hur lÄngt borta vi var frÄn n-1, nÀr plattformen var pÄ ColdFusion och SQL Server frÄn 2008, som man slutade stödja helt i juli.
Dag fyrtiofem
NÄgonstans vid mitten av andra mÄnaden hade jag tillrÀckligt med tid för att sÀtta mig ner och göra valuestreammapping helt över hela processen. Det Àr nödvÀndiga steg som mÄste vidtas, frÄn att skapa produkten till att leverera den till konsumenten, och de mÄste beskrivas sÄ detaljerat som möjligt.
Du delar upp processen i smÄ bitar och ser vad som tar för lÄng tid, vad som kan optimeras, förbÀttras, osv. Till exempel, hur lÄng tid tar en förfrÄgan frÄn produkten, genom grooming, hur lÀnge det tar innan den nÄr en biljett som utvecklaren kan ta, QA osv. SÄ detaljerat ser du pÄ varje steg och tÀnker pÄ vad som kan optimeras.
NÀr jag gjorde detta, blev tvÄ saker tydliga:
- en hög procentandel av biljetter som returnerades frÄn QA tillbaka till utvecklarna;
- pull request-granskningar tog för lÄng tid.
Problemet var att detta var slutsatser som: det verkar ta mycket tid, men vi Àr inte sÀkra pÄ hur mycket.
»Man kan inte förbÀttra det man inte kan mÀta.«
Hur rÀttfÀrdigar man hur allvarligt problemet Àr? Förloras dagar eller timmar pÄ grund av det?
För att mÀta detta lade vi till nÄgra steg i Jira-processen: «redo för utvecklare» och «redo för QA», för att mÀta hur lÄng tid varje biljett vÀntar och hur mÄnga gÄnger den returneras till ett visst steg.

Vi lade ocksÄ till «under granskning», för att veta hur lÀnge biljetterna i genomsnitt befinner sig under granskning, och utifrÄn det bygga vidare. Vi hade systemmetrik, nu har vi lagt till nya metrik och började mÀta:
- Effektiviteten i processen: produktivitet och planerat/lÀmnat.
- Kvaliteten pÄ processen: antal defekter, defekter frÄn QA.
Detta hjÀlper verkligen att förstÄ vad som fungerar bra och vad som fungerar dÄligt.
Dag femtiotvÄ
Det Àr förstÄs allt bra och intressant, men mot slutet av den andra mÄnaden intrÀffade nÄgot som i princip var förutsÀgbart, Àven om jag inte hade förvÀntat mig en sÄ stor omfattning. MÀnniskor började lÀmna, eftersom ledningen förÀndrades. Nya personer kom in i ledningen som började förÀndra allt, och de gamla sades upp. Och vanligtvis i ett företag som har funnits i flera Är kÀnner alla varandra.
Det var förvÀntat, men omfattningen av uppsÀttningarna var ovÀntad. Till exempel, under en vecka lÀmnade tvÄ teamledare samtidigt in sin uppsÀgning av eget val. DÀrför var jag tvungen att inte bara glömma andra problem, utan fokusera pÄ att skapa ett team. Det Àr ett lÄngsiktigt och svÄrt problem att lösa, men det var nÄgot vi var tvungna att ta itu med, eftersom vi ville behÄlla de som var kvar (eller Ätminstone de flesta av dem). Vi behövde pÄ nÄgot sÀtt reagera pÄ att folk hade gÄtt för att upprÀtthÄlla moralen i teamet.
I teorin Àr det bra: en ny person kommer in, som har en helt fri hand, kan utvÀrdera teamets fÀrdigheter och byta ut personal. I verkligheten kan man inte bara fÄ in nya mÀnniskor av mÄnga olika skÀl. Det behövs alltid balans.
- Mellan gammalt och nytt. Vi behöver behÄlla de gamla som kan förÀndras och stödja missionen. Men samtidigt mÄste vi föra in nya idéer, vilket vi kommer att diskutera lite senare.
- Erfarenhet. Jag har pratat mycket med bra juniorer som brann för att arbeta hos oss. Men jag kunde inte anstÀlla dem eftersom det fanns för fÄ seniorkar som skulle stödja juniorerna och vara deras mentorer. Först behövde vi samla ledningen och bara sedan lÀsa in ungdomarna.
- Piskor och morötter.
Jag har inget bra svar pÄ frÄgan om vilken balans som Àr rÀtt, hur man upprÀtthÄller den, hur mÄnga mÀnniskor man ska behÄlla och hur mycket man ska pressa. Det Àr en rent individuell process.
Dag femtioetthundra
Jag började observera teamet för att förstÄ vem jag har, och kom Äterigen ihÄg:
âDe flesta problem Ă€r problem med mĂ€nniskor.â
Jag upptÀckte att teamet, bÄde utvecklarna och Ops, har tre stora problem:
- TillfredsstÀllelse med det rÄdande tillstÄndet.
- Brist pĂ„ ansvar â för ingen har nĂ„gonsin kopplat resultat frĂ„n anstĂ€llda till pĂ„verkan pĂ„ affĂ€rerna.
- RÀdsla för förÀndringar.

FörÀndringar tar alltid oss ur vÄr komfortzon, och ju yngre mÀnniskor Àr, desto mer ogillar de förÀndringar eftersom de inte förstÄr varför och inte vet hur. Det vanligaste svaret jag har hört Àr: "Vi har aldrig gjort sÄ hÀr förut." Det gick sÄ lÄngt att Àven de minsta förÀndringarna inte gick obemÀrkt förbi utan att nÄgon blev upprörd. Det spelade ingen roll hur mycket förÀndringarna berörde deras arbete, folk sa: "Nej, varför? Det kommer inte att fungera."
Men man kan inte bli bÀttre utan att förÀndra nÄgot.
Jag hade ett helt absurt samtal med en anstÀlld, jag berÀttade mina idéer om optimering, och han sa till mig:
â Ă
h, du har inte sett vad vi hade förra Äret!
â SĂ„ vad?
â Just nu Ă€r det mycket bĂ€ttre Ă€n det var.
â SĂ„ det kan inte bli Ă€nnu bĂ€ttre?
â Varför ska det?
Bra frĂ„ga â varför? Som om det Ă€r tillrĂ€ckligt bra om det Ă€r bĂ€ttre Ă€n tidigare. Detta leder till avsaknad av ansvar, vilket i grunden Ă€r helt normalt. Som jag sa, var teknikgruppen nĂ„got avsides. Företaget trodde att de borde vara med, men ingen har nĂ„gonsin satt upp standarder. I supporten hade ingen sett SLA, sĂ„ för gruppen var det helt "acceptabelt" (och detta överraskade mig mest):
- 12 sekunder laddning;
- 5-10 minuter driftstopp varje release;
- att ÄtgÀrda kritiska problem tar dagar och veckor;
- brist pÄ jour 24x7 / on-call.
Ingen har nÄgonsin försökt frÄga, varför inte göra detta bÀttre, och ingen har nÄgonsin förstÄtt att det inte ska vara sÄ.
Som bonus fanns det ocksÄ ett annat problem: brist pÄ erfarenhet. Seniorerna lÀmnade, och det kvarstÄende unga teamet vÀxte under den gamla regimen och blev förgiftat av den.
Till allt detta var folk ocksÄ rÀdda för att misslyckas, att verka inkompetenta. Detta uttrycker sig genom att de, för det första, aldrig under nÄgra omstÀndigheter bad om hjÀlp. Hur mÄnga gÄnger har vi pratat i grupp och individuellt, och jag har sagt: "StÀll en frÄga om du inte vet hur man gör nÄgot." Jag Àr sÀker pÄ mig sjÀlv och vet att jag kan lösa vilket problem som helst, men det kommer att ta tid. SÄ om jag kan frÄga nÄgon som vet hur man löser det pÄ 10 minuter, sÄ frÄgar jag. Ju mindre erfarenhet du har, desto mer rÀdd Àr du för att frÄga eftersom du tÀnker att de kommer att anse att du Àr inkompetent.
Denna rĂ€dsla för att stĂ€lla frĂ„gor tar sig intressanta former. Till exempel, man frĂ„gar: "Hur gĂ„r det med denna uppgift?" â "Det Ă€r bara nĂ„gra timmar kvar, jag Ă€r nĂ€stan klar." NĂ€sta dag frĂ„gar man igen och fĂ„r svaret att allt Ă€r bra, men det har dykt upp ett litet problem; det kommer definitivt att vara klart innan dagen Ă€r över. En ytterligare dag gĂ„r, och sĂ„ fort man inte pressar mot vĂ€ggen och tvingar dem att prata med nĂ„gon, sĂ„ fortsĂ€tter allt sĂ„. MĂ€nniskor vill lösa uppgiften sjĂ€lva; de anser att om de inte lyckas sjĂ€lva, sĂ„ Ă€r det ett stort misslyckande.
Det Ă€r dĂ€rför utvecklarna överdrev sina uppskattningar. Det var verkligen ett skĂ€mt nĂ€r vi diskuterade en specifik uppgift, jag fick en siffra som jag blev mycket förvĂ„nad över. Till det fick jag höra att utvecklaren inkluderar Ă€ven tiden för att biljetten kommer tillbaka frĂ„n QA, eftersom de kommer att hitta fel dĂ€r, och tiden som PR kommer att ta, samt tiden medan de som ska granska den Ă€r upptagna â det vill sĂ€ga allt som Ă€r möjligt.
För det andra, mÀnniskor som Àr rÀdda för att verka okunniga, analyserar överdrivet. NÀr man sÀger vad som konkret behöver göras, börjar det: "Nej, men vad hÀnder om vi tÀnker hÀr?" I detta avseende Àr vÄrt företag inte unikt, det Àr ett standardproblem för yngre generationer.
Till svar införde jag följande metoder:
- Regeln om 30 minuter. Om du inte kan lösa problemet pÄ 30 minuter, be nÄgon annan om hjÀlp. Detta fungerar med varierande framgÄng eftersom folk ÀndÄ inte ber om hjÀlp, men Ätminstone har processen börjat.
- Exkludera allt utom kÀrnan, vid uppskattningen av tidsÄtgÄngen för uppgiften, det vill sÀga att endast rÀkna med tiden det tar att skriva koden.
- Kontinuerligt lÀrande för dem som analyserar för mycket. Det handlar helt enkelt om att kontinuerligt arbeta med mÀnniskor.
Den sextionde dagen
Medan jag höll pÄ med allt detta, var det dags att ta itu med budgeten. SjÀlvklart hittade jag mycket intressant kring vart vi spenderade pengar. Till exempel hade vi en helt rack i ett separat datacenter, dÀr en FTP-server stod, som anvÀndes av en enda kund. Det visade sig att "... vi flyttade, men den blev sÄ kvar; vi bytte aldrig ut den." Det var för tvÄ Är sedan.
RĂ€kningen för molntjĂ€nster vĂ€ckte sĂ€rskilt intresse. Jag Ă€r sĂ€ker pĂ„ att den huvudsakliga orsaken till den stora rĂ€kningen för molntjĂ€nster Ă€r utvecklarna, som för första gĂ„ngen i sina liv har obegrĂ€nsad tillgĂ„ng till servrar. De behöver inte be: "Ge mig en testserver, tack" â de kan ta en sjĂ€lva. Dessutom vill utvecklarna alltid bygga ett sĂ„ hĂ€ftigt system att Facebook och Netflix skulle bli avundsjuka.
Men utvecklarna har ingen erfarenhet av att köpa servrar och saknar fÀrdighet i att avgöra rÀtt serverstorlek, eftersom de tidigare inte har behövt det. Och vanligtvis förstÄr de inte helt skillnaden mellan skalbarhet och prestanda.
Resultatet av inventeringen:
- Vi har lÀmnat en datacenter.
- Vi har sagt upp kontrakt med 3 loggtjĂ€nster. Eftersom vi hade 5 â varje utvecklare som började experimentera tog en ny.
- Vi stÀngde av 7 AWS-system. à terigen, döda projekt stÀngdes aldrig av, de fortsatte att fungera.
- Vi minskade mjukvarukostnaderna med 6 gÄnger.
Dag sjuttiofem
Tiden gick, och efter tvÄ och en halv mÄnad skulle jag trÀffa styrelsen. VÄr styrelse Àr varken bÀttre eller sÀmre Àn andra, de vill veta allt precis som alla andra styrelser. Folk investerar pengar och vill förstÄ hur det vi gör stÀmmer överens med de uppsatta KPI:erna.
Styrelsen fÄr mycket information varje mÄnad: antal anvÀndare, deras tillvÀxt, vilka tjÀnster de anvÀnder och hur, samt prestanda och produktivitet, och slutligen den genomsnittliga sidladdningstiden.
Problemet Àr bara att jag anser att genomsnittet Àr ett rent ont. Men det Àr mycket svÄrt att förklara detta för styrelsen. De Àr vana vid att arbeta med aggregerade siffror, inte till exempel spridningen av laddningstider i sekunder.
I samband med detta fanns det intressanta ögonblick. Till exempel sa jag att trafiken mÄste delas mellan separata webbservrar beroende pÄ typ av innehÄll.

Det vill sÀga ColdFusion gÄr genom Jetty och nginx och laddar sidor. Bilder, JS och CSS gÄr igenom en separat nginx med sina egna konfigurationer. Det Àr en ganska standardpraxis, om jag tÀnker tillbaka pÄ för ett par Är sedan. Resultatet Àr att bilderna laddas mycket snabbare, och ⊠den genomsnittliga laddningstiden har ökat med 200 ms.

Det hĂ€r hĂ€nde eftersom grafiken baseras pĂ„ data som kommer frĂ„n Jetty. Det vill sĂ€ga snabb innehĂ„ll rĂ€knas inte â medelvĂ€rdet har skjutit i höjden. Vi förstod det, vi skrattade, men hur ska vi förklara styrelsen varför vi gjorde nĂ„got som blev 12% sĂ€mre?
Dag Ättiofem
I slutet av den tredje mĂ„naden insĂ„g jag att det fanns en sak jag verkligen inte hade rĂ€knat med â tid. Allt jag talade om tar tid.

Detta Ă€r min verkliga kalender för veckan â bara en arbetsvecka, inte sĂ„ överbelastad. Det finns inte tillrĂ€ckligt med tid för allt. DĂ€rför behöver vi Ă„terigen rekrytera folk som kan hjĂ€lpa till med problemen.
Slutsats
Detta Àr lÄngt ifrÄn allt. I den hÀr berÀttelsen har jag inte ens kommit till hur vi arbetade med produkten och försökte anpassa oss till den gemensamma vÄgen, eller hur vi integrerade supporten, eller hur vi löste andra tekniska problem. Till exempel rÄkade jag helt av en slump fÄ veta att vi inte anvÀnde SEQUENCE. Vi har en egen skriven funktion nextID, och den anvÀnds inte i en transaktion.
Det fanns en miljon liknande saker som man lÀtt kan prata lÀnge om. Men det viktigaste som fortfarande bör nÀmnas Àr kulturen.

Det Àr just kulturen eller bristen pÄ den som leder till alla andra problem. Vi försöker bygga en kultur dÀr folk:
- inte Àr rÀdda för misslyckanden;
- lÀr sig av misstagen;
- samarbetar med andra team;
- visar initiativ;
- tar ansvar;
- vÀlkomnar resultat som ett mÄl;
- fira framgÄngen.
Med detta kommer allt annat.
Leon Fire , och pÄ .
NÀr det gÀller arvet finns det tvÄ strategier: att undvika att arbeta med det till varje pris, eller att modigt övervinna de medföljande svÄrigheterna. Vi gÄr den andra vÀgen, Àndrar processer och tillvÀgagÄngssÀtt. Följ med oss pÄ , och , och lÄt oss tillsammans implementera en DevOps-kultur.
KĂ€lla: habr.com
