Arv av legacy-system och processer eller De första 90 dagarna som CTO

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Ä DevOpsConf, 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.

Spela video

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Ă„.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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?

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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 skrev 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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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.

Arv av legacy-system och processer eller De första 90 dagarna som CTO

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 pÄ twitter, facebook och pÄ medium.

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 DevOpsConf gÄr den andra vÀgen, Àndrar processer och tillvÀgagÄngssÀtt. Följ med oss pÄ YouTube, i ett nyhetsbrev och telegrammet, och lÄt oss tillsammans implementera en DevOps-kultur.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster