Leer een praktisch stappenplan om een webapp te bouwen die SLA‑timers bijhoudt, overtredingen direct detecteert, teams waarschuwt en compliance realtime visualiseert.

Voordat je schermen ontwerpt of detectielogica schrijft, wees helder over wat je app probeert te voorkomen. “SLA‑monitoring” kan alles betekenen van een dagelijks rapport tot seconde‑per‑seconde voorspelling van overtredingen—dat zijn zeer verschillende producten met heel verschillende architectuurbehoeften.
Begin met overeenstemming over het reactievenster dat je team realistisch kan uitvoeren.
Als je support‑organisatie in cycli van 5–10 minuten werkt (triage‑queues, paging‑rotaties), dan kan “realtime” betekenen: dashboardupdates elke minuut met alerts binnen 2 minuten. Als je hoge‑impact incidenten afhandelt waarbij minuten tellen, heb je misschien een detect‑en‑alert lus van 10–30 seconden nodig.
Schrijf dit op als een meetbaar doel, bijvoorbeeld: “Detecteer potentiële overtredingen binnen 60 seconden en waarschuw de on‑call binnen 2 minuten.” Dit wordt een leidraad voor latere afwegingen in architectuur en kosten.
Maak een lijst van de specifieke beloften die je volgt en definieer elk in eenvoudige taal:
Noteer ook hoe deze zich verhouden tot SLO en SLA definities in je organisatie. Als je interne SLO anders is dan de klantgerichte SLA, moet je app mogelijk beide bijhouden: één voor operationele verbetering, één voor contractueel risico.
Noem de groepen die het systeem gebruiken of ervan afhankelijk zijn: support, engineering, customer success, teamleads/managers en incident response/on‑call.
Voor elke groep leg vast welke beslissingen ze in het moment moeten nemen: “Is dit ticket risicovol?”, “Wie is eigenaar?”, “Is escalatie nodig?” Dit vormt je dashboard, alert‑routing en permissies.
Je doel is niet alleen zichtbaarheid—het is tijdig handelen. Bepaal wat er moet gebeuren wanneer risico stijgt of een breach optreedt:
Een goed uitkomststatement: “Verminder SLA‑overtredingen door breach‑detectie en incidentrespons binnen ons afgesproken reactievenster mogelijk te maken.”
Voordat je detectielogica bouwt, schrijf precies op wat “goed” en “slecht” is voor je service. De meeste SLA‑monitoringproblemen zijn geen technische problemen—het zijn definitieproblemen.
Een SLA (Service Level Agreement) is een belofte aan klanten, vaak met consequenties (credits, boetes, contractvoorwaarden). Een SLO (Service Level Objective) is een intern doel waar je naar streeft om ruim boven de SLA te blijven. Een KPI (Key Performance Indicator) is elke metriek die je volgt (handig, maar niet altijd aan een belofte gekoppeld).
Voorbeeld: SLA = “reageren binnen 1 uur.” SLO = “reageren binnen 30 minuten.” KPI = “gemiddelde first response‑tijd.”
Maak een lijst van elk breach‑type dat je moet detecteren en van het event dat de timer start.
Veelvoorkomende categorieën:
Wees expliciet over wat telt als “reactie” (publieke reply vs interne notitie) en “resolutie” (resolved vs closed), en of heropening de timer reset.
Veel SLA’s tellen alleen tijd tijdens bedrijfstijden. Definieer de kalender: werkdagen, feestdagen, begin‑/eindtijden en de tijdzone die voor berekening wordt gebruikt (van de klant, contract of team). Bepaal ook wat er gebeurt als werk de grens overschrijdt (bijv. ticket om 16:55 met een 30‑minuten response‑SLA).
Documenteer wanneer de SLA‑klok stopt, zoals:
Schrijf deze als regels die je app consequent kan toepassen en houd voorbeelden van lastige gevallen voor latere tests.
Je SLA‑monitor is zo goed als de data die het voedt. Begin met het identificeren van de “systems of record” voor elke SLA‑klok. Voor veel teams is het ticketing‑tool de bron van waarheid voor lifecycle‑timestamps, terwijl monitoring en logging tools uitleggen waarom iets gebeurde.
De meeste realtime SLA‑opstellingen halen data uit een kleine set kernsystemen:
Als twee systemen het oneens zijn, beslis vooraf welk systeem per veld wint (bijv. “ticketstatus uit ServiceNow, klanttier uit CRM”).
Minimaal: track events die de SLA‑timer starten, stoppen of wijzigen:
Denk ook aan operationele events: wijzigingen in de bedrijfsagenda, klant‑tijdzone updates en feestdagenschema‑wijzigingen.
Geef de voorkeur aan webhooks voor bijna‑realtime updates. Gebruik polling wanneer webhooks niet beschikbaar of onbetrouwbaar zijn. Houd API‑exports/backfills voor reconciliatie (bijv. nachtelijke jobs die gaten vullen). Veel teams eindigen met een hybride: webhook voor snelheid, periodieke polling voor zekerheid.
Reële systemen zijn rommelig. Verwacht:
Behandel dit als productvereisten, geen “randgevallen”—je breach‑detectie hangt van een correcte afhandeling af.
Een goede SLA‑monitor app is makkelijker te bouwen (en te onderhouden) wanneer de architectuur helder en doelbewust eenvoudig is. Globaal bouw je een pijplijn die ruwe operationele signalen omzet in “SLA‑state”, en die state gebruikt om mensen te waarschuwen en een dashboard van aan te drijven.
Denk in vijf blokken:
Deze scheiding houdt verantwoordelijkheden schoon: ingest mag geen SLA‑logica bevatten, en dashboards mogen geen zware berekeningen doen.
Bepaal vroeg hoe “realtime” je echt moet zijn.
Een pragmatische aanpak: start met frequente herberekening voor één of twee SLA‑regels en verplaats high‑impact regels naar streaming zodra nodig.
Vermijd multi‑regio en multi‑omgeving complexiteit als je start. Eén regio, één productieomgeving en een minimale staging‑setup zijn meestal genoeg totdat je datakwaliteit en alert‑nut toetst. Maak “later opschalen” een ontwerpprincipe, geen bouwvereiste.
Als je de eerste werkende versie van dashboard en workflows wilt versnellen, kan een vibe‑coding platform zoals Koder.ai helpen om snel een React‑UI en een Go + PostgreSQL backend te scafolden vanuit een chat‑gedreven specificatie, en daarna itereren op schermen en filters terwijl je valideert wat responders echt nodig hebben.
Schrijf deze op voordat je implementeert:
Event‑ingestie is waar je SLA‑monitor ofwel betrouwbaar wordt—of rumoerig en verwarrend. Het doel is simpel: accepteer events van veel tools, converteer ze naar een enkele “waarheidsgetrouwe” vorm en sla genoeg context op om elke SLA‑beslissing later uit te leggen.
Standaardiseer wat een “SLA‑relevant event” is, ook al verschillen upstream systemen. Een praktisch basisschema bevat:
ticket_id (of case/work item ID)timestamp (wanneer de wijziging gebeurde, niet wanneer je het ontving)status (opened, assigned, waiting_on_customer, resolved, etc.)priority (P1–P4 of equivalent)customer (account/tenant identifier)sla_plan (welke SLA‑regels van toepassing zijn)Versieer het schema (bijv. schema_version) zodat je velden kunt evolueren zonder oudere producers te breken.
Verschillende systemen noemen hetzelfde anders: “Solved” vs “Resolved”, “Urgent” vs “P1”, tijdzoneverschillen of ontbrekende prioriteiten. Bouw een kleine normalisatielaag die:
is_customer_wait of is_pause) die de breach‑logica later vereenvoudigenIntegraties retryen. Je ingestie moet idempotent zijn zodat herhaalde events geen duplicaten maken. Gebruikgangbare aanpakken:
event_id en verwerp duplicatenticket_id + timestamp + status) en upsertAls iemand vraagt “Waarom waarschuwden we?”, heb je een papierspoor nodig. Sla elk geaccepteerd raw event en elk genormaliseerd event op, plus wie/wat het veranderde. Deze auditgeschiedenis is essentieel voor klantgesprekken en interne reviews.
Sommige events falen bij parsing of validatie. Gooi ze niet stilletjes weg. Routeer ze naar een dead‑letter queue/tabel met foutreden, origineel payload en retry‑count, zodat je mappings kunt repareren en veilig kunt replayen.
Je SLA‑app heeft twee verschillende “geheugens” nodig: wat nu waar is (om alerts te triggeren) en wat er door de tijd gebeurde (om uit te leggen en te bewijzen waarom er gealarmed is).
Actuele state is de laatste bekende status van elk werkitem (ticket/incident/order) plus actieve SLA‑timers (starttijd, gepauzeerde tijd, due‑time, resterende minuten, huidige eigenaar).
Kies een opslag die geoptimaliseerd is voor snelle reads/writes per ID en eenvoudige filtering. Gebruikelijke opties zijn een relationele database (Postgres/MySQL) of een key‑value store (Redis/DynamoDB). Voor veel teams is Postgres voldoende en houdt reporting eenvoudig.
Houd het state‑model klein en query‑vriendelijk. Je leest het constant voor views zoals “breaching soon”.
Historie moet elke wijziging als een onveranderbaar record vastleggen: created, assigned, priority changed, status updated, customer replied, on‑hold started/ended, etc.
Een append‑only eventtabel (of eventstore) maakt audits en replay mogelijk. Als je later een bug in breach‑logica ontdekt, kun je events reprocessen om state te herbouwen en resultaten te vergelijken.
Praktisch patroon: state table + events table in dezelfde database eerst; schaal later naar aparte analytics‑opslag als volume stijgt.
Definieer retentie op doel:
Gebruik partities (per maand/kwartaal) om archivering en deletes voorspelbaar te maken.
Plan voor de vragen die je dashboard het meest stelt:
due_at en status (en mogelijk queue/team).breached_at (of een berekende breach‑flag) en datum.(customer_id, due_at).Prestaties win je hier: structureer opslag rondom je top 3–5 views, niet elke mogelijke rapportage.
Realtime breach‑detectie draait vooral om één ding: rommelige, menselijke workflows (assignen, waiting on customer, reopened, transferred) omzetten in heldere SLA‑timers waarop je kunt vertrouwen.
Begin met bepalen welke events de SLA‑klok voor elk ticket of requesttype sturen. Veelvoorkomende patronen:
Bereken vanuit deze events een due time. Voor strikte SLA’s kan dat zijn “created_at + 2 uur”. Voor bedrijfstijden‑SLA’s is het “2 zakelijke uren”, wat een kalender vereist.
Maak een kleine calendar‑module die consequent twee vragen kan beantwoorden:
Houd feestdagen, werktijden en tijdzones op één plek zodat elke SLA‑regel dezelfde logica gebruikt.
Zodra je een due‑time hebt, is het berekenen van resterende tijd eenvoudig: due_time - now (in zakelijke minuten indien van toepassing). Definieer vervolgens breach‑risico‑drempels zoals “due binnen 15 minuten” of “minder dan 10% van SLA over”. Dit voedt urgentiebadges en alert‑routing.
Je kunt:
Een praktisch hybride: event‑gedreven updates voor nauwkeurigheid, plus een minuut‑tick om tijd‑gebaseerde drempelovergangen te vangen, ook als geen nieuw event binnenkomt.
Alerts zijn waar je SLA‑monitoring operationeel wordt. Het doel is niet “meer notificaties”—het is de juiste persoon de juiste actie laten ondernemen voordat een deadline gemist wordt.
Gebruik een kleine set alerttypes met duidelijke intentie:
Koppel elk type aan een ander urgentieniveau en afleverkanaal (chat voor warnings, paging voor bevestigde breaches, etc.).
Routing moet data‑gedreven zijn, niet hardgecodeerd. Gebruik een eenvoudige regels‑tabel zoals: service → verantwoordelijke team, en pas modifiers toe:
Dit voorkomt “broadcast naar iedereen” en maakt eigenaarschap zichtbaar.
SLA‑status kan snel flippen tijdens incidentresponse. Deduplicate op een stabiele sleutel zoals (ticket_id, sla_rule_id, alert_type) en pas toe:
Overweeg ook het bundelen van meerdere warnings in één periodieke samenvatting.
Elke notificatie moet antwoord geven op “wat, wanneer, wie, nu wat”:
Als iemand niet binnen 30 seconden kan handelen na het lezen, heeft de alert betere context nodig.
Een goed SLA‑dashboard gaat minder over grafieken en meer over iemand in minder dan een minuut laten besluiten wat te doen. Ontwerp de UI rond drie vragen: Wat loopt risico? Waarom? Welke actie moet ik nemen?
Begin met vier eenvoudige views, elk met een duidelijk doel:
Houd de standaardview gefocust op breaching soon, want daar gebeurt preventie.
Geef gebruikers een kleine set filters die passen bij echte eigenaarschap‑ en triagebeslissingen:
Maak filters sticky per gebruiker zodat ze het niet elke keer moeten herconfigureren.
Elke rij in “breaching soon” moet een korte, eenvoudige verklaring bevatten, bijvoorbeeld:
Voeg een “Details” drawer toe met de timeline van SLA‑state wijzigingen (gestart, gepauzeerd, hervat, breached), zodat de gebruiker de berekening vertrouwt zonder zelf te rekenen.
Ontwerp de standaardworkflow als: review → open → act → confirm.
Elk item moet actieknoppen hebben die naar de bron van waarheid springen:
Als je snelle acties ondersteunt (assign, change priority, add note), toon ze alleen waar je ze consistent kunt toepassen en audit de wijziging.
Een realtime SLA‑monitoringapp wordt snel een system of record voor performance, incidenten en klantimpact. Behandel het vanaf dag één als productiekwaliteit: beperk wie wat kan doen, bescherm klantdata en documenteer hoe data wordt opgeslagen en verwijderd.
Begin met een klein, duidelijk permissiemodel en breid alleen uit wanneer nodig. Een gebruikelijke opzet is:
Houd permissies in lijn met workflows. Bijvoorbeeld: een operator kan incidentstatus updaten, maar alleen een admin mag SLA‑timers of escalatieregels wijzigen.
SLA‑monitoring bevat vaak klantidentificatie, contracttiers en ticketinhoud. Minimaliseer blootstelling:
Integraties zijn een frequente zwakke schakel:
Definieer beleidsregels voordat je maanden aan historie hebt opgestapeld:
Schrijf deze regels op en reflecteer ze in de UI zodat het team weet wat het systeem bewaart—en hoe lang.
Testen van een SLA‑monitoringapp draait minder om “laadt de UI” en meer om “worden timers, pauzes en drempels exact berekend zoals het contract vereist—elke keer”. Een kleine fout (tijdzones, bedrijfstijden, ontbrekende events) kan luidruchtige alerts of, erger, gemiste breaches veroorzaken.
Zet je SLA‑regels om in concrete scenario’s die je end‑to‑end kunt simuleren. Neem normale flows en lastige randgevallen op:
Bewijs dat je breach‑detectielogica stabiel is onder echte operationele rommel, niet alleen schone demo‑data.
Maak herbruikbare event‑fixtures: een kleine bibliotheek van “incident timelines” die je door ingestie en berekening kunt afspelen wanneer je logica wijzigt. Dit helpt berekeningen door de tijd te verifiëren en regressies te voorkomen.
Houd fixtures versie‑beheer (in Git) en voeg verwachte outputs toe: berekende resterende tijd, breach‑moment, pauzewindows en alert‑triggers.
Behandel de SLA‑monitor als elk productie‑systeem en voeg eigen health signals toe:
Als je dashboard “groen” toont terwijl events vastzitten, verlies je snel vertrouwen.
Schrijf een korte, duidelijke runbook voor veelvoorkomende foutmodi: vastgelopen consumers, schemawijzigingen, upstream outages en backfills. Voeg stappen toe om veilig events te replayen en timers te herberekenen (welke periode, welke tenants en hoe dubbele alerts te vermijden). Link het vanaf je interne docs hub of een eenvoudige pagina zoals /runbooks/sla-monitoring.
Het uitrollen van een SLA‑monitoringapp is het makkelijkst als je het als product behandelt, niet als een eenmalig project. Begin met een minimum levensvatbare release die de end‑to‑end lus bewijst: ingest → evaluatie → alert → bevestiging dat het iemand hielp handelen.
Kies één datavoorziening, één SLA‑type en basisalerts. Bijvoorbeeld: monitor “first response time” met één ticketing‑feed en stuur een waarschuwing wanneer de klok bijna verloopt (niet pas na breach). Dit houdt scope klein terwijl je de lastige delen valideert: timestamps, tijdvensters en eigenaarschap.
Zodra het MVP stabiel is, breid voorzichtig uit: voeg een tweede SLA‑type toe (bv. resolution), dan een tweede datavoorziening, daarna rijkere workflows.
Zet vroeg dev, staging en productie op. Staging moet productieconfiguraties nabootsen (integraties, schema’s, escalatiepaden) zonder echte responders te notificeren.
Gebruik feature flags om uit te rollen:
Als je snel bouwt met een platform zoals Koder.ai, zijn snapshots en rollback handig: je kunt UI‑ en regelwijzigingen naar een pilot sturen en snel terugdraaien als alerts te luidruchtig worden.
Schrijf korte, praktische setupdocs: “Koppel datavoorziening”, “Maak een SLA”, “Test een alert”, “Wat te doen bij een notificatie”. Zet ze dichtbij het product, zoals een interne pagina op /docs/sla-monitoring.
Na initiële adoptie, prioriteer verbeteringen die vertrouwen vergroten en ruis verminderen:
Itereer op basis van echte incidenten: elke alert zou je moeten leren wat te automatiseren, verduidelijken of verwijderen.
Een SLA‑monitoringdoel is een meetbare uitspraak die bepaalt:
Schrijf het als een toetsbaar doel: “Detecteer potentiële overtredingen binnen X seconden en waarschuw on‑call binnen Y minuten.”
Definieer “real time” op basis van het reactievermogen van je team, niet alleen wat technisch mogelijk is.
Het belangrijkste is om een vast te leggen (event → berekening → alert/dashboard) en de architectuur daaromheen te ontwerpen.
Begin met de klantgerichte beloften die je daadwerkelijk kunt schenden (en waar je mogelijk credits voor moet uitkeren). Veelvoorkomende keuzes:
Veel teams volgen ook een interne die strenger is dan de SLA. Als je beide hebt, sla en toon ze beide op zodat operators vroeg kunnen handelen terwijl je contractuele compliance nauwkeurig rapporteert.
SLA‑fouten zijn vaak fouten in de definitie. Maak duidelijk:
Encodeer deze vervolgens als deterministische regels en houd een bibliotheek met voorbeeldtimelines om ze te testen.
Stel één consistente kalenderregelset op:
Implementeer een herbruikbare calendar‑module die vragen kan beantwoorden zoals:
Kies per veld een “system of record” en documenteer wat wint als systemen het oneens zijn.
Typische bronnen:
Voor near‑realtime gedrag heeft voorkeur voor ; voeg toe voor reconciliatie en gemiste events.
Minimaal vastleggen wat de SLA‑klok start, stopt of wijzigt:
Plan ook voor “men vergeet”-events zoals updates van de bedrijfsagenda, tijdzonewijzigingen en feestdagroosters—die kunnen due‑tijden wijzigen zonder ticketactiviteit.
Gebruik een eenvoudige vijf‑blok pijplijn:
Gebruik beide, afhankelijk van urgentie:
Een sterke hybride is: event‑driven updates voor correctheid plus een minuut‑niveau tick om drempelovergangen te vangen als er geen nieuwe events binnenkomen (bijv. “binnen 15 minuten due”).
Behandel alerting als een workflow, niet als een informatiestroom:
Houd SLA‑logica buiten ingest en zware berekeningen uit dashboards. Begin met een eenvoudige deployment (enkele regio, minimale omgevingen) tot je de datakwaliteit en alert‑waarde vertrouwt.
(work_item_id, sla_rule_id, alert_type) en stuur alleen bij statusovergangen met een cooldown.Elke alert moet bevatten: eigenaar/on‑call target, due‑tijd en resterende tijd, de volgende actie en verwijzingen zoals /tickets/{id} en /sla/tickets/{id}.