Fabriken
Två delar: en fabrik, och det den bygger
Pharos är två skilda saker. Den ena är lösningen: plattformen med mina agenter, den jag pratar med, ringer och lämnar mitt vardagsarbete till. Den andra är fabriken som bygger den.
Fabriken går med släckt ljus: den går utan mig, och ingen behöver sitta vid den. Den arbetar dygnet runt med ett enda uppdrag: att hålla lösningen aktuell och fri från fel. Den läser vad som är nytt i modellerna och i koden den bygger på, hittar det som är trasigt, lagar det, kontrollerar lagningen på det levande systemet och skriver ner vad den lärde sig. Jag beskriver, jag säger ja och jag läser rapporterna.
Det är ett personligt projekt, ingen produkt och inte till salu. Men det är djupt tekniskt, och den här sidan är där jag låter det synas.
jag: beskriver, säger ja lösningen
En eftermiddag
En sida gick sönder, och ingen öppnade en editor
En eftermiddag gick en sida jag förlitar mig på sönder. Jag skrev en rad om det, med vanliga ord, och gick tillbaka till det jag höll på med.
Fabriken spårade orsaken genom lagren. Det var två fel, inte ett: ett godkännande som aldrig nådde mig, och en bakände som bara tog emot en enda form av innehåll. Varje lager rättades för sig, med egna tester.
Varje ändring lästes av en oberoende granskare, som måste godkänna exakt den version som skulle ut, inte en beskrivning av den. Den godkända versionen gick in i kön och genom grindarna. Den driftsattes automatiskt och prövades mot det levande systemet; hade det provet blivit rött skulle driftsättningen ha rullat tillbaka hela den sammanslagna gruppen och pausat kön.
Jag läste inte en rad av lagningen. Jag läste att den var klar, och att den var kontrollerad. Det är hela eftermiddagen.
Så fungerar den
För den som vill gräva. Det här är idéerna; koden är fabrikens egen sak.
-
En produktionschef som aldrig skriver kod
En roll leder arbetet: läser vad som är trasigt, avgör vad som spelar roll, skriver en brief för varje ändring och läser rapporten tillbaka. Den ändrar aldrig en rad själv, så att ledning och arbete hålls isär.
-
Byggare som bygger från en skriven brief
En ändring görs av en byggare som får en skriven brief och inget annat. Den hittar inte på omfattning. Varje ändring kommer med sina egna tester, och en ändring utan en godkänd körning är inte klar.
-
Oberoende granskare, på exakt den versionen
En andra, fristående granskare läser varje ändring och måste godkänna exakt den version som ska ut. En ny version betyder en ny granskning. Byggaren bedömer aldrig sitt eget arbete.
-
Deterministiska grindar i stället för påminnelser
En regel som upprepats för ofta blir en grind som stoppar: avsökningar efter kundnamn och kundidentiteter i plattformskod, efter filer som växer förbi en storleksgräns, efter tidsstämplar som sparas som text, efter allt som väcker systemet utanför den enda överenskomna vägen. En grind stoppar en ny träff; de gamla den hittade när den kom på plats är listade, var och en med ett tak den inte får växa förbi. En grind som stoppar har rätt tills jag säger något annat.
-
En kö till huvudlinjen, en driftsättning per sammanslagen grupp
Ändringar når huvudlinjen genom en kö, i grupper. Varje sammanslagen grupp följs av exakt en driftsättning. En driftsättning som blir röd rullar tillbaka hela gruppen och pausar kön tills någon har tittat.
-
Levande prov efter varje driftsättning
Enhetstester har varit gröna medan den levande kedjan var trasig, två gånger. Så efter en driftsättning provar fabriken det levande systemet på samma sätt som agenterna faktiskt använder det. En röd driftsättning rullar tillbaka den sammanslagna gruppen. Några få levande hälsoprov kan pausa kön tills någon har tittat; de andra proven rapporterar vad de hittade och pausar aldrig något.
-
Takt mot budgeten
Fabriken går på abonnemang med gränser. Den tar ut sin egen takt mot dem: när ett tak nås pausar den, när taket släpper återupptar den, så att den går dygnet runt inom det jag betalar för.
-
Lärdomar skrivs ner
Efter varje rättelse från mig skrivs en lärdom i fabrikens egna filer. En lärdom som upprepas blir en grind. Så sjunker felfrekvensen utan att jag behöver upprepa mig.
-
Varje handling har ett namn på sig
Inget är tänkt att ske anonymt. Varje ändring, varje driftsättning och varje godkännande hänförs till en person eller till en namngiven del av fabriken, så att jag kan svara på vem som gjorde vad och varför.
Vad det inte är
Det är ingen produkt och det är inte till salu. Det tjänar ingenting. Det är den del av min hobby som är svårast att förklara och mest värd att förklara.