2.7

2.7 Könteori

Översikt och motivation

Könteori är den matematiska studien av väntelinjer. Det låter som en udda passning för en bok om mjukvaruteknikmätetal tills man märker hur mycket av en leveranspipeline faktiskt är en kö: en pull request som väntar på en granskare, en commit som väntar på en CI-körare, ett ärende som väntar på att tas upp, ett kundsupportmeddelande som väntar på ett svar. Ämne 2.4 introducerade redan flödesbelastning och flödestid och visade att att överbelasta ett värdeflöde gör leverans sakta ner kraftigt, och ämnen 2.5 och 2.6 visade att det mesta av leveranstiden är väntetid, inte arbetstid. Könteori är den underliggande matematiken som förklarar varför allt det är sant, inte bara ett observerat mönster.

Det enskilt mest användbara resultatet är Littles lag, en sats bevisad av verksamhetsforskaren John Little 1961: det genomsnittliga antalet objekt i ett stabilt system är lika med den genomsnittliga takten med vilken objekt anländer, multiplicerad med den genomsnittliga tiden varje objekt spenderar i systemet. Ämne 2.4 använde redan det här resultatet under Flow Frameworks egna namn, flödesbelastning är lika med ankomsttakt gånger flödestid. I den här bokens bredare vokabulär läses det också som pågående arbete (ämne 2.5) är lika med ankomsttakten för nytt arbete multiplicerad med cykeltid (ämne 2.6). Det här är inte en tumregel eller en korrelation observerad i några studier. Det är ett bevis som håller för alla stabila köer, oavsett vad kön bearbetar eller hur den bestämmer vad den ska arbeta på härnäst.

För ett stort team är den generaliteten poängen. Littles lag ger er en förnuftskontroll som fungerar identiskt oavsett om kön är en kanban-tavla, en meddelandeförmedlare, eller en delad CI-pipeline. Om er uppmätta pågående arbete, ankomsttakt, och cykeltid inte ungefär uppfyller ekvationen är ett av era tre tal fel, vanligtvis på grund av en inkonsekvent definition av vad som räknas som “pågående” eller “anlänt.” Stora företag och myndigheter driver dussintals sådana köer på en gång, delade kodgranskningspooler, delade testmiljöer, delade godkännandenämnder, och Littles lag är det billigaste tillgängliga verktyget för att fånga en dålig mätetalsdefinition innan den driver ett dåligt bemannings- eller processbeslut.

Nyckelprinciper

  • Littles lag är ett bevis, inte en heuristik. Pågående arbete är lika med ankomsttakt gånger cykeltid, för alla stabila köer, och det är en snabb kontroll på om era leveransmätetal är internt konsekventa.
  • Utnyttjande skalar inte linjärt med väntetid. När en delad resurs närmar sig fullt utnyttjande växer köfördröjning kraftigt, inte gradvis. En resurs som körs vid 95 % upptagen väntar ofta många gånger längre än en vid 80 %, inte bara “lite sämre.”
  • En kös genomsnitt döljer dess värsta fall. Att rapportera bara den genomsnittliga väntetiden döljer den långa, smärtsamma svansen nära kapacitet, exakt vad ämne 1.6 varnar mot när det kommer till att använda percentiler istället för genomsnitt.
  • Hur en kö definieras kan manipuleras lika lätt som alla andra mätetal. Om något räknas som “anlänt,” “pågående,” eller “betjänat” är ett val, och det kan justeras för att smickra en instrumentpanel utan att ändra vad som faktiskt händer med arbetet.
  • En pipeline är vanligtvis en kö av köer. En leveranspipeline kedjar flera steg tillsammans, och det långsammaste steget sätter takten för hela kedjan oavsett hur snabbt de andra körs.

Rekommendationer

Använd Littles lag för att kontrollera era egna tal innan ni litar på dem

Ta ert teams uppmätta genomsnittliga pågående arbete, dess genomsnittliga ankomsttakt för nya objekt per vecka, och dess genomsnittliga cykeltid, och kontrollera om pågående arbete ungefär är lika med ankomsttakt multiplicerad med cykeltid. När det inte gör det, anta inte att teorin är fel. Leta efter den faktiska orsaken: en stegränsgräns räknad inkonsekvent, arbete som sitter “blockerat” men fortfarande räknas som pågående, eller en ankomsttakt mätt över ett annat fönster än cykeltiden. Den här enda kontrollen fångar mer dålig instrumentering än de flesta team finner på något annat sätt.

Spåra utnyttjande direkt för varje delad, kapacitetsbegränsad resurs

Identifiera resurserna er leveranspipeline delar över många team, en kodgranskningspool, ett CI-kluster, en staging-miljö, och mät hur upptagen var och en körs som en proportion av sin tillgängliga kapacitet, innan ni planerar att köra den nära sin gräns. En delad granskargrupp som körs nära full kapacitet producerar granskningsköväntetider som växer mycket snabbare än den blygsamma ökningen i efterfrågan som orsakade dem, exakt den dynamik bakom ämne 2.9:s råd att vaka tid-till-första-granskning som en ledande indikator.

Separera ankomsttakt, framgångsfrekvens, misslyckandefrekvens, och avhoppsfrekvens

Motstå att slå samman allt som lämnar en kö till ett enda “genomströmnings”- eller “betjäningstakts”-tal. Spåra fyra saker separat: hur snabbt arbete anländer, hur mycket av det slutförs framgångsrikt, hur mycket misslyckas och behöver omarbete, och hur mycket överges eller tyst släpps innan någon slutför det. En pipeline som ser snabb ut eftersom dess avhoppsfrekvens tyst klättrade levererar inte faktiskt mer, och bara att spåra de här fyra frekvenserna separat visar er det.

Modellera flerstegspipelines som en kö av köer

Behandla en leveranspipeline, eller vilken flerstegsprocess som helst, en incidentlivscykel, en rekryteringspipeline, som en kedja av köer snarare än en odifferentierad massa av “tid.” Den övergripande ankomsttakten sätts av det första steget, den övergripande slutförandetakten av det sista steget, och pipelinens totala fel- och avhoppsantal är summan av varje stegs egna. Den här formuleringen berättar omedelbart vilket steg som är värt att investera i: det med den värsta kombinationen av högt utnyttjande och hög misslyckande- eller avhoppsfrekvens, inte det som råkar vara lättast att instrumentera.

Sätt bemannings- och PÅA-begränsningar med utnyttjande i åtanke, inte bara genomströmning

När ni bestämmer hur många granskare eller CI-körare ett team behöver, dimensionera inte kapacitet för att exakt matcha den genomsnittliga ankomsttakten. En kö som körs vid 100 % utnyttjande i genomsnitt har effektivt oändlig väntetid i praktiken, eftersom verkliga ankomster är ojämna, inte perfekt jämna. Planera medvetet för marginal, och behandla “våra granskare är nästan alltid upptagna” som en varningssignal om kommande väntetider, inte som bevis på effektiv resurssättning.

Avvägningar: fördelar och nackdelar

TillvägagångssättFördelarNackdelar
Ingen formell könmodell, magkänslebemanningSnabb att starta; inget nytt vokabulär för teametUnderskattar konsekvent hur väntetid exploderar nära full kapacitet
Littles lag som en förnuftskontroll på befintliga mätetalBilligt, kräver inget nytt verktyg, fångar dåliga definitioner snabbtKontrollerar bara konsekvens, diagnostiserar inte i sig orsaken
Full könsimulering (ankomstfördelningar, flera servrar)Mest exakta prediktionen av väntetidsbeteende under belastningKräver verklig statistisk kompetens och underhåll de flesta team inte kommer upprätthålla
Utnyttjandespårning på delade resurser utan djupare modelleringEnkel, handlingsbar, fångar den enskilt största orsaken till skenande väntetiderSäger ingenting om varför utnyttjande är högt eller vad man ska göra åt den underliggande orsaken

Den centrala spänningen är rigör kontra adoption. En full könsimulering ger det mest exakta svaret, men nästan inget ingenjörsteam kommer bygga och underhålla en, och en modell ingen litar på eller uppdaterar är värre än ingen modell. Littles lag och grundläggande utnyttjandespårning ger upp en del precision men kräver ingen specialiserad statistisk kompetens och passar direkt in i mätetal ett team redan samlar in för ämnen 2.4 till 2.6. Som standard, använd de billiga, lätt antagbara kontrollerna, och reservera full simulering för det sällsynta fallet där en enda delad resurs, en stor CI-flotta, en specialiserad granskningspool, är dyr nog att motivera investeringen.

Frågor att diskutera med ditt team

  1. Uppfyller vårt uppmätta pågående arbete, ankomsttakt, och cykeltid faktiskt Littles lag, och om inte, varför inte? Det här är den enskilt snabbaste diagnostiken tillgänglig för en dålig mätetalsdefinition. Gå igenom de faktiska talen tillsammans, och om ekvationen inte ungefär håller, spåra missmatchningen till en specifik definitionsinkonsekvens snarare än att avfärda kontrollen.

  2. Vilka delade resurser i vår leveranspipeline körs nära fullt utnyttjande, och vet vi faktiskt deras utnyttjandetal? De flesta team kan namnge en resurs som “alltid känns upptagen” men har aldrig mätt dess utnyttjande direkt. Identifiera de två eller tre mest begränsade delade resurserna och få ett verkligt tal för var och en.

  3. Blandar vi framgång, misslyckande, och avhopp i ett genomströmningstal, och vad skulle vi se om vi delade upp dem? Ett enda “objekt slutförda”-antal kan stiga även när kvalitet faller eller arbete tyst överges. Räkna om en nyligen periods genomströmning som tre separata tal och diskutera vad uppdelningen avslöjar som det blandade talet dolde.

  4. Var i vår pipeline är den verkliga flaskhalsen, det långsammaste steget som sätter takten för allt nedströms det? Team investerar ofta i att snabba upp steget som är lättast att förbättra snarare än det som faktiskt begränsar total genomströmning. Identifiera steget med den värsta kombinationen av högt utnyttjande och hög misslyckande- eller avhoppsfrekvens.

  5. Om vi lade till kapacitet till vår mest begränsade delade resurs, skulle väntetid faktiskt förbättras, eller skulle efterfrågan helt enkelt expandera för att fylla den? Den här frågan separerar en genuin kapacitetsbrist från ett efterfrågeproblem, och svaret ändrar om den rätta fixen är fler anställda, en PÅA-begränsning, eller en ändring av hur arbete prioriteras innan det kommer in i kön.

  6. Har vi någonsin omdefinierat vad som räknas som “pågående” eller “anlänt” på ett sätt som fick en instrumentpanel att se bättre ut utan att ändra vad som faktiskt hände med arbetet? Det här är värt att fråga ärligt och specifikt, med verkliga exempel från det senaste året, snarare än att behandla det som en hypotetisk oro.

Sektorperspektiv

Startup. Med en handfull ingenjörer är de flesta köer kort nog att formell könanalys är överdrivet. Den användbara vanan är mindre: märk när en person, ofta den mest seniora ingenjören, har blivit en de facto delad resurs allt annat väntar på, och behandla det som ett utnyttjandeproblem värt att namnge även utan någon formell modell bakom det.

Litet företag. Ett litet företagsteam behöver sällan något mer sofistikerat än att spåra utnyttjande på sina en eller två genuint delade resurser, ofta en enda granskare eller en enda driftsättningspipeline, och vaka för punkten där “vanligtvis tillgänglig” tyst blir “vanligtvis flaskhalsen.” Ett kalkylblad räcker; dedikerat verktyg är inte nödvändigt på den här skalan.

Stort företag. Delade resurser mångdubblas snabbt i stor företagsskala: ett centralt plattformsteam, en delad säkerhetsgranskningsnämnd, en delad CI-flotta som betjänar dussintals produktteam. De här är exakt resurserna där utnyttjandespårning tjänar sin plats, eftersom en enda överbelastad delad resurs tyst kan försämra leveranstid för varje team som beror på den, och inget enskilt teams egna mätetal kommer avslöja en orsak som lever utanför deras egen pipeline.

Myndighet. Flermyndighets- och flerleverantörsleveransprogram leder ofta arbete genom delade godkännandenämnder, delade säkerhetsackrediteringsprocesser, och delade testmiljöer som inget enskilt team kontrollerar eller kan storleksändra på egen hand. Könanalys av de här delade grindarna, ankomsttakt, kapacitet, utnyttjande, är frekvent det tydligaste tillgängliga beviset för ett affärsfall att lägga till kapacitet eller att ändra hur arbete satsas innan det når grinden.

Exempel

Stort företag. En molninfrastrukturleverantörs interna plattformsteam märkte att ledtid för ändringar (ämne 2.10) hade krupit uppåt över varje produktteam som berodde på dess delade CI-flotta, även om inget enskilt team hade ändrat hur det arbetade. En utnyttjandeanalys fann flottan köras över 90 % upptagen under kärntimmar, väl bortom punkten där könteori förutsäger väntetid växer kraftigt snarare än gradvis. Plattformsteamet lade till CI-kapacitet och introducerade en rättvis-andel-schemaläggningspolicy så att inget enskilt teams aktivitetsstöt kunde monopolisera kön. Median CI-väntetid föll med mer än hälften inom en månad, bevis att flaskhalsen hela tiden hade varit en delad, osynlig kö.

Myndighet. En nationell tillståndsmyndighets digitala tjänsteteam spårade ansökningsbehandling som ett enda “ärenden stängda per vecka”-genomströmningstal under två år, och talet såg stabilt ut. En närmare analys, som delade upp det talet i ärenden godkända, avslagna, och övergivna av sökande efter långa förseningar, fann att övergivningsfrekvensen nästan hade tredubblats över samma period medan godkännanden hölls platta. Littles lag, tillämpad på handläggarkön, visade att pågående arbete hade vuxit långt bortom vad teamets angivna genomsnittliga behandlingstid antydde, vilket betydde att ärenden tyst hopade sig i en status inte räknad som “väntande.” Myndigheten omstrukturerade sina ärendespårningsdefinitioner för att räkna varje öppet ärende ärligt och lade till handläggarkapacitet dimensionerad för att hålla utnyttjande under 85 %, nu spårad som ett stående operativt mål vid sidan av genomströmningstalet.

Verksamhetsnytta: motiv, ROI och TCO

Avkastningen på att tillämpa grundläggande könanalys är att den förvandlar “pipelinen känns långsam” till ett specifikt, försvarbart beslut, lägg till marginal till den här delade resursen, dela upp det här blandade mätetalet i dess verkliga komponenter, snarare än en vag push att “arbeta snabbare” som missar den faktiska orsaken. Molninfrastrukturexemplet ovan, halverad väntetid från en kapacitets- och schemaläggningsfix snarare än någon ändring av enskilda teams beteende, är mönstret den här analysen tillförlitligt producerar: fixen är nästan alltid billigare än att be varje nedströmsteam flytta snabbare runt en flaskhals de inte kan se.

Den totala kostnaden för adoption är genuint låg. Littles lag och utnyttjandespårning behöver inget nytt verktyg utöver vad ämnen 2.4 till 2.6 redan ber er samla in: ankomsttakt, pågående arbete, och cykeltid. Investeringen är mestadels analytisk disciplin, att kontrollera talen mot varandra och periodiskt granska utnyttjande på delade resurser innan de blir organisationens nästa oförklarade ledtidsregression.

Antimönster och fallgropar

  • Att dimensionera en delad resurs kapacitet för att exakt matcha dess genomsnittliga ankomsttakt: garanterar högt utnyttjande och skenande väntetider närhelst efterfrågan är även kort ojämn.
  • Att bara rapportera medelväntetid, aldrig en percentil: döljer den långa svansen som betyder mest för människorna som väntar i den.
  • Att blanda framgång, misslyckande, och avhopp i ett genomströmningstal: manipuleringsvektorn i hjärtat av det här ämnet. Ett team under press kan få genomströmning att se sund ut genom att tyst låta avhoppsfrekvensen stiga, övergivna ärenden, tyst nedsläppta begäranden, arbete som aldrig räknas som ett misslyckande. Skyddet är att spåra ankomst-, framgångs-, misslyckande-, och avhoppsfrekvens som fyra separata, synliga tal, samma disciplin ämne 1.2 ber om för varje mätetal i den här boken, så att en stigande avhoppsfrekvens inte kan gömma sig bakom ett platt genomströmningsdiagram.
  • Att behandla “vårt folk är alltid upptaget” som en komplimang: det är ett symtom på högt utnyttjande, den ledande orsaken till lång, oförutsägbar väntetid.
  • Att omdefiniera “pågående” för att tyst krympa pågående arbete: flyttar arbete in i ett orekant tillstånd, “blockerat,” “pausat,” utan att ändra hur lång tid det tar att slutföra, och bryter Littles lag-kontrollen som annars skulle ha fångat det.
  • Att anta att en könmodell inte behöver underhåll när den väl byggts: ankomstmönster och kapacitet förändras ständigt, och en inaktuell modell producerar självsäkert felaktiga förutsägelser.

Mognadsmodell

  • Nivå 1, Initiera: Ingen kö mäts explicit; väntetid diskuteras anekdotiskt som “saker känns långsamma.”
  • Nivå 2, Utveckla: Ankomsttakt, pågående arbete, och cykeltid spåras för minst en pipeline, men kontrolleras aldrig mot Littles lag eller mot utnyttjande på delade resurser.
  • Nivå 3, Standardisera: Littles lag är en rutinmässig konsekvenskontroll över leveranspipelines, och utnyttjande spåras explicit för de mest betydande delade resurserna.
  • Nivå 4, Hantera: Framgångs-, misslyckande-, och avhoppsfrekvens spåras separat för varje betydande kö, och kapacitetsbeslut använder utnyttjandemål, inte bara genomsnittlig efterfrågan.
  • Nivå 5, Orkestrera: Organisationen modellerar sina större pipelines som köer av köer, identifierar verkliga flaskhalsar systematiskt, och kan peka på specifika kapacitets- eller processändringar gjorda på grund av könanalys, med uppmätt väntetidsförbättring att visa för det.

Diskussionsidéer

  1. Välj en av våra leveranspipelines och kontrollera om dess tal uppfyller Littles lag idag.
  2. Namnge den enda delade resursen i vår organisation som de flesta skulle enas om är “alltid upptagen,” och hitta dess faktiska utnyttjandetal.
  3. Hur skulle vårt genomströmningsdiagram se ut om vi delade upp det i framgångs-, misslyckande-, och avhoppsfrekvens för det senaste kvartalet?
  4. Om vi måste lägga till kapacitet till exakt en delad resurs det här året, vilken, och vilket bevis skulle motivera det?

Viktiga slutsatser

  • Littles lag, pågående arbete är lika med ankomsttakt gånger cykeltid, är ett bevis, inte en heuristik, och det är den billigaste tillgängliga kontrollen på om era leveransmätetal är internt konsekventa.
  • Väntetid växer kraftigt, inte gradvis, när utnyttjande närmar sig full kapacitet. Behandla “alltid upptagen” som en varningssignal, inte en komplimang.
  • Spåra ankomsttakt, framgångsfrekvens, misslyckandefrekvens, och avhoppsfrekvens separat; att blanda dem i ett genomströmningstal är det här ämnets centrala manipuleringsvektor.
  • Modellera en flerstegspipeline som en kö av köer, och investera i steget med den värsta kombinationen av högt utnyttjande och hög misslyckande- eller avhoppsfrekvens, inte steget som är lättast att förbättra.
  • Föredra billiga, lätt antagbara kontroller, Littles lag och utnyttjandespårning, framför en full könsimulering få team kommer upprätthålla.

Källor och vidare läsning

  • Little, John D. C. “A Proof for the Queuing Formula: L = λW.” Operations Research, 1961.
  • Kleinrock, Leonard. Queueing Systems, Volume 1: Theory. Wiley-Interscience, 1975.
  • Wescott, Bob. The Every Computer Performance Book: How to Avoid and Solve Performance Problems on the Computer Systems You Work With. CreateSpace Independent Publishing Platform, 2013.
  • Reinertsen, Donald G. The Principles of Product Development Flow: Second Generation Lean Product Development. Celeritas Publishing, 2009.
  • Vacanti, Daniel S. Actionable Agile Metrics for Predictability. Actionable Agile Press, 2015.