Overvåking er ikke skraping — det er å huske forrige gang
Seks moduler holder øye med tre byer. Den tredje er hele forskjellen.
En automatisering stoppet uten å si fra. Svaret kom tomt tilbake, jobben gikk videre, og ingen så det før etterpå. Om stille feil — og hvor mennesket hører hjemme.
En rapportjobb hos oss — bygget av oss, drevet av AI, overvåket av oss — leverte tomme resultater i lang tid før noen oppdaget det.
Den kjørte som den skulle. Den svarte hver gang. Ingen feilmelding, ingen rød logg, ingen varsling. Rapporten kom, og den var tom, og en tom rapport ser ut som et stille marked.
Da vi til slutt gravde i den, var det ikke én feil, men tre som lå oppå hverandre: den spurte om en periode som var hardkodet inn og hadde løpt fra oss, den rapporterte et tegn-antall som om det var et antall rader, og den pekte på feil domene av to vi eier.
Ingen av de tre er avanserte feil. Alle tre er usynlige.
Det er denne artikkelen: hva som skjer når en automatisering møter en vegg, og hvorfor den som er dårligst på å si fra, gjør mest skade.
Har dere en jobb som «går fint» uten at noen sjekker? Vi ser gjerne over den. Be om en gjennomgang — du får svaret uansett. Vil du høre historiene først, les videre.
Alt som står under er ting vi har gått i selv. Ikke eksempler fra en lærebok, ikke andres havarirapporter.
Vi driver en del automatisering for egen regning — innholdsproduksjon, datainnhenting, verifisering — og det har den fordelen at vi får ta konsekvensene av våre egne snarveier før en kunde gjør det. De fire hendelsene lenger nede er hentet derfra.
Hva du bør vekte dette som:
Det siste punktet er egentlig hele artikkelen.
Metodene endrer seg, og modellene bak dem enda raskere. Artikkelen gjennomgås derfor på nytt når metodene eller modellene endrer seg. Sist gjennomgått 14. august 2026.
Skrevet av Svein Tore Olsen, daglig leder i Ebizapple.
La oss slå fast noe med en gang, for det er lett å lese denne artikkelen som en advarsel mot AI. Det er den ikke.
En automatisering som feiler høylytt er et lite problem. Den stopper, noen får beskjed, noen fikser den. Kostnaden er tiden det tok.
En automatisering som feiler stille er et helt annet dyr. Den fortsetter å levere. En AI blokkert av en kvotegrense, en endret kilde eller en manglende tilgang leverer tomme eller gale svar med nøyaktig samme selvtillit som riktige — i samme format, til samme tid. Og fordi den fortsetter, bygger det seg opp beslutninger på toppen av den.
Skillet er ikke mellom riktig og galt. Skillet går mellom systemer som vet at de er blokkert, og systemer som ikke vet det.
Det er også der de praktiske grenser for kunstig intelligens går. Ikke i hva modellen kan resonnere seg frem til, men i om systemet rundt den oppdager at forutsetningene har røket.
Et system som kan si «jeg vet ikke» er mer verdt enn ett som alltid svarer. Det er en ubehagelig påstand å selge inn, fordi den som alltid svarer demonstrerer bedre.
Den vi startet med. Tre feil på én gang:
Hardkodede datoer. Jobben ba om et tidsrom som var skrevet inn med faste datoer da den ble laget. Den var riktig den dagen. Etter noen uker spurte den om en periode som lå bak oss, og fikk høflig svar om at det ikke var noe der. Ingen feil — bare ingen data. Rettelsen var å regne datoene ut fra dagens dato hver gang jobben kjører, slik at vinduet flytter seg av seg selv.
Et tegn-antall som utga seg for å være et rad-antall. Et sted i kjeden ble radene slått sammen til én tekstblokk. Å måle lengden på den blokken gir antall tegn. Tallet så helt rimelig ut, og det er det verste med det. Et tall som er hundre ganger for stort blir oppdaget. Et tall som er plausibelt, blir stående.
Feil domene. Vi eier to nettsteder med nesten samme navn. Jobben hentet tall fra det ene, mens arbeidet foregikk på det andre. Ett tegn i en adresse.
Ingen av de tre utløste en feilmelding, fordi ingen av dem er feil teknisk sett. Å spørre om en tom periode er et lovlig spørsmål. Å telle tegn er en lovlig operasjon. Å be om data for et domene du faktisk eier er lovlig. Systemet gjorde nøyaktig som det ble bedt om.
Lærdommen: en jobb som kan returnere ingenting, må skille mellom «ingenting skjedde» og «jeg fikk ikke tak i noe». Det er to helt ulike tilstander som ser identiske ut i en tom rapport.
Vi har en verifiseringsport som skal kontrollere innhold før det publiseres. Den ba to uavhengige AI-modeller fra to ulike leverandører vurdere det samme, og krevde at begge var enige før noe gikk gjennom.
Så tok forhåndsbetalingen hos den ene leverandøren slutt. Kallet svarte med [429] Your prepayment credits are depleted.
Det var en høylytt feil, isolert sett. Kjøringene stoppet. Problemet var at ingenting nedstrøms ropte: produksjonen ga null resultater, og null resultater utløste ingen alarm. Det gikk drøye døgnet før noen så at det hadde stått stille.
Verre var det som skjedde da vi bygde en reserveløsning. Første forsøk brukte en feilhåndtering som ganske enkelt ignorerer feilen. Den ble godtatt uten protest — og droppet hele arbeidspakken, slik at alt som skulle skjedd etterpå aldri kjørte. Resultatet var en kjøring som rapporterte suksess og ikke hadde gjort noe som helst.
Vi byttet til en variant som lar kjeden fortsette med tomt svar fra den døde modulen, og lot porten falle tilbake på én dommer i stedet for to — med et spor i loggen som sier at det var det som skjedde.
Lærdommen: en degradert port er ikke det samme som en åpen port, men den blir det hvis ingen får vite at den er degradert. Skriv degraderingen inn i resultatet, ikke bare i loggen.
Denne er den merkeligste, og den er verdt å bruke tid på.
En AI-dommer skulle kontrollere regnestykkene i en artikkel vi hadde skrevet. Ett av dem var en forskjell på 39,75 kroner per ordre, ganget med 1 200 ordrer i året.
Dommeren regnet det ut: 47 700.
Deretter erklærte den at 47 700 var feil.
Den motsa altså sin egen mellomregning, i samme svar, uten å registrere motsetningen. Og den gjorde det med samme rolige tone som når den har rett.
Dette er ikke et argument for at modeller er ubrukelige til kontroll. Vi bruker dem fortsatt til nettopp det. Det er et argument for hvordan man bruker dem:
Den siste er min favoritt, fordi den er så pinlig.
Vi kjørte et revisjonsskript over en samling artikler for å sjekke strukturen deres. Skriptet rapporterte «h1: 4» for hver eneste artikkel — fire hovedoverskrifter i hvert dokument, der det skal være nøyaktig én.
Fire, hver gang, i alle filene. Vi begynte å lure på hva slags mal som hadde produsert det.
Feilen lå i skriptet. Det skilte dokumentets metadata fra brødteksten på en litt for enkel måte, og fanget derfor opp kommentarlinjene i metadataen som om de var overskrifter. Det var nøyaktig fire slike kommentarer i hver fil.
Artiklene var riktige hele veien. Det var måleren som var i stykker.
Lærdommen, og den generaliserer bredt: når et måleresultat er identisk på tvers av alle enheter du måler, er den vanligste forklaringen at du måler måleren. Ekte data varierer. Perfekt konsistens er et varselsignal, ikke et kvalitetstegn.
Vil dere vite om deres egne jobber sier fra når de svikter? Vi går gjennom oppsettet og peker på de stille punktene. Bestill en gjennomgang.
Fire hendelser, ett mønster: ingen av dem brøt noen regel.
Det er dette som gjør stille feil seiglivet. En automatisering er bygget av lovlige operasjoner. Å hente en tom periode, telle tegn, spørre feil domene, ignorere en feil, godta én dommers svar — alt sammen er handlinger systemet er ment å kunne gjøre. Ingenting krasjer, fordi ingenting er ulovlig.
Og så kommer det som forsterker alt: overvåkingen ser som regel etter feil, ikke etter fravær.
En typisk oppfølging spør «har noe feilet?». Den spør sjelden «har det kommet noe?». En jobb som kjører hver natt og produserer null rader hver natt, ser i loggen ut som en jobb som kjører fint.
| Type feil | Hvordan den oppdages | Hvor lenge den lever |
|---|---|---|
| Krasj eller unntak | Automatisk, med en gang | Minutter |
| Feil verdi utenfor rimelig område | Noen reagerer på tallet | Dager |
| Tomt resultat som ser normalt ut | Bare hvis noen leter | Ukevis |
| Plausibel, men gal verdi | Ofte først når noen handler på den | Til skaden er skjedd |
| Ødelagt måleinstrument | Når to uavhengige mål spriker | Til noen sjekker måleren |
De to nederste radene er dyre. Det er der beslutninger tas på feil grunnlag, og det er der ingen leter, fordi ingenting ser galt ut.
En automatisering tegnes som en flyt: dette skjer, så dette, så dette. Det er den tegningen som er problemet. Den har ingen naturlig plass til «og her stopper vi og spør».
Vi bygger derfor stoppunkt inn som en egen del av jobben, ikke som noe man legger på etterpå. Fire varianter dekker det meste:
Terskelen. Et resultat under et visst nivå går ikke videre. Null rader er ikke en gyldig leveranse — det er en hendelse som skal varsles. Det samme gjelder mistenkelig runde tall og resultater som er identiske med gårsdagens.
Konfidensen. Alt maskinen produserer får et nivå festet på seg, og lav konfidens rutes til gjennomgang i stedet for videre i kjeden. Vi gjør det samme i uttrekk fra kataloger og prislister, beskrevet i gjennomgangen av PDF-katalog og bildematching: hvert produkt får et konfidensnivå og lander i en liste merket «til gjennomgang», ikke rett inn i systemet.
Uenigheten. To uavhengige vurderinger av det samme. Er de enige, går det videre. Er de uenige, stopper det og blir sett på av et menneske. Det er den eneste porten vi har som fanger feil begge modellene ikke gjør samtidig.
Det harde svaret. Der det er mulig, skal det uskarpe ende i noe som kan slås opp. Et organisasjonsnummer, et artikkelnummer, en HTTP-status. Å bekrefte at en side svarer 200 er en billigere og bedre sjekk enn å be en modell vurdere om lenken virker.
Og over alle fire, den regelen vi bruker mest: et resultat skal bære med seg hvordan det ble til. Ble den ene dommeren hoppet over? Ble bildekoblingen gjettet? Da skal det stå i raden, ikke i en logg ingen åpner.
Nå til den delen som er lettest å underselge, fordi den ikke ser ut som teknologi.
Vi kartla en gang en produktkatalog og prøvde å fremkalle en bestemt nettverksforespørsel automatisk. Nettstedet blokkerte den automatiske nettleseren vår. Vi kom ikke videre — det er beskrevet i sin helhet i gjennomgangen av de fem veiene og de fire blindveiene.
Kunden åpnet nettverksfanen i sin egen nettleser, bladde på siden, og limte inn forespørselen som faktisk gikk ut. Ett minutt.
Det er ikke en historie om at automatisering er overvurdert. Det er en historie om arbeidsdeling. Maskinen hadde gjort de nittini prosentene som var kjedelige og tok tid. Mennesket gjorde den ene tingen maskinen fysisk ikke kom til.
Problemet er ikke at det finnes slike punkter. Problemet er når systemet ikke vet at det står ved ett. Da lager det et svar i stedet, og et svar laget for å fylle et hull ser akkurat ut som et svar hentet fra en kilde.
Så det vi bygger etter nå:
Det er ikke en nødløsning i påvente av bedre modeller. Det er arbeidsdelingen, og den er verdt å designe med vilje.
Under står regelen vi bruker selv, før vi bygger noe som skal kjøre uten tilsyn. Flere av radene ender i «ikke automatiser det». De er med nettopp derfor.
| Situasjon | Vi ville | Hvorfor |
|---|---|---|
| Jobben kan returnere tomt uten at det er feil | Automatiser, men varsle på null | Ellers kan du ikke skille «ingenting skjedde» fra «jeg fikk ikke tak i noe». |
| Resultatet skal leses av et menneske hver dag | Automatiser | Da har du en innebygd kontroll: noen ser på det. |
| Resultatet går rett inn i et annet system | Legg inn en port først | Ingen ser på det. Da må maskinen selv nekte å slippe gjennom rart. |
| Det handler om penger som flyttes | Ikke uten godkjenning | En feil her er ikke en skrivefeil. Se hvordan vi tenker om betaling og oppgjør. |
| Oppgaven er et regnestykke | Automatiser med kode, ikke med modell | Kode regner likt hver gang. Det gjør ikke en språkmodell. |
| Oppgaven krever skjønn | To uavhengige vurderinger, flagg uenighet | Én vurdering er en mening. To som spriker er et funn. |
| Kilden er utenfor din kontroll | Automatiser, men mål dekningen | Den kan endres uten varsel. Samme grunn til at vi ikke gir ytelsesgaranti. |
| Ingen ville merket det om jobben stoppet i en uke | Ikke bygg den ennå | Hvis ingen savner resultatet, trenger ingen resultatet. |
| Du er usikker på hvilken rad som gjelder deg | Få oppsettet vurdert | En gjennomgang tar timer, ikke uker — ta kontakt. |
Legg merke til den nest siste raden. Den er ikke ment som en spissformulering. Den er den vanligste grunnen til at vi anbefaler folk å la være.
Om du bare skal ta med deg én ting:
Bygg systemer som kan si «jeg vet ikke».
Det er ikke det samme som å bygge systemer som er forsiktige. En forsiktig automatisering gjør lite. En automatisering med stoppunkter gjør mye — og slutter å gjøre det i det øyeblikket forutsetningene ryker, høyt nok til at noen hører det.
Det høres ut som en teknisk detalj. Det er en holdning, og den er gjenkjennelig i alt vi bygger: fra hvordan vi setter opp dynamiske nettsider med en datakilde bak, til hvorfor vi bygger komponenter før sider og hvorfor vi ikke lover en ytelsesscore vi ikke kontrollerer.
Den dyreste feilen er sjelden den som stopper alt. Det er den som fortsetter.
Fordi overvåking som regel ser etter feil, ikke etter fravær. En jobb som kjører hver natt og produserer null rader, ser i loggen ut som en jobb som kjører fint. Løsningen er å varsle på et tomt resultat, ikke bare på en feilmelding.
Nei, ikke alene. En AI blokkert av noe utenfor seg selv merker det sjelden. Vi har sett en dommer regne ut et riktig svar og deretter erklære at det var feil, i samme svar. Vi har også sett samme spørsmål gi ulikt utfall på gjentatte forsøk. Bruk to uavhengige modeller, flagg uenighet i stedet for å midle den, og legg regnestykker til kode.
Et sted der jobben med vilje nekter å gå videre: for få resultater, for lav konfidens, uenighet mellom to kontroller, eller en verdi som ikke lar seg slå opp. Poenget er at det er bygget inn på forhånd, ikke lagt til etter at noe gikk galt.
Ikke alt — det ville fjerne gevinsten. Men grensetilfellene, ja. En fagperson som får seksti flaggede rader i stedet for tusen sider, bruker oppmerksomheten der den betyr noe. Det er arbeidsdeling, ikke mistillit.
Litt tregere, ja. Sammenlign likevel med alternativet: en jobb som leverte tomt i ukevis før noen så det. Tiden du sparer på å droppe kontrollpunkter, betaler du tilbake med renter den dagen noe har vært galt lenge.
Se etter mistenkelig perfekt konsistens. Får alle enhetene nøyaktig samme resultat, er den vanligste forklaringen at du måler måleren og ikke enhetene. Ekte data varierer alltid litt.
Har dere jobber som kjører uten at noen egentlig sjekker dem? Vi går gjerne gjennom oppsettet og peker på de stille punktene — ta kontakt, eller les om automatisering og dynamiske nettsider.
Seks moduler holder øye med tre byer. Den tredje er hele forskjellen.
Vi ville doble farten ved å kjøre to løp i parallell. Plattformen sa nei, og den hadde rett.
Vi leste av vår egen plattform. Feil fordeler seg ikke jevnt — og det avgjør hvor stoppunktene skal stå.
Vi lot systemet ta femti reelle beslutninger uten å få lov til å gjennomføre noen av dem. Det var derfor vi fant de tre.
Denne artikkelen hører til automatisering. Skal noen gjøre jobben for deg, er det dette vi tilbyr: automatisering som sier fra når den knekker.