
„Ništa nije puklo. Dokument je tiho postao drugi dokument.“
Ono što je nastalo nije ono što vrijedi
Tri sistema, tri domena, jedna odluka: razdvoji trenutak kad nešto postoji od trenutka kad važi.
Carinskom organu trebale su fakture koje se nakon izdavanja nikad ne mogu promijeniti. Terminalu za uplate trebalo je štampati kupon bez mreže, a bez rizika dvostruke isplate. Platformi za sastanke trebala je bijela tabla koja preživi sastanak kao nešto s čim se još može raditi.
Tri nepovezana proizvoda, tri nepovezane godine — i svaki put isti odgovor. Ono što sistem čuva mora razlikovati „ovo postoji“ od „ovo obavezuje“.
Problem
Ograničenje
Šta smo uradili
Carinske fakture: zamrznute u trenutku izdavanja
Zahtjev je bio apsolutan — izdata faktura se ne smije nikad promijeniti. Zato se dokument u trenutku izdavanja renderuje i čuva kao nepromjenjivi HTML. Kasnije izmjene šablona ne diraju ništa što je već izdato.
Izdato je izdatoDefinicija dokumenta odvojena od izdatog dokumenta
Šablon je slobodan da se razvija; istorija ostaje netaknuta. Druga korist se lahko propusti: zamrznuti izlaz više ne zavisi od buduće ispravnosti koda koji renderuje. Da su se dokumenti renderovali na zahtjev, svaka izmjena tog koda retroaktivno bi izmijenila svaki stari dokument.
Ne zavisi od budućeg kodaKupon se štampa — i ne vrijedi
Primalac diže novac na benzinskoj pumpi pomoću koda kupona. Terminal mora raditi kad mreža ne radi, ali kupon isplaćen dvaput je jedini kvar koji košta stvarne pare. Zato kupon postaje važeći kad sistem to kaže: automatski kad se veza vrati, ili ručno preko operatera, kojem se signalizira da postoji neaktiviran kupon.
Bolje neupotrebljiv nego dvaput isplaćenBijela tabla kao objekti, ne kao slika
Tabla se čuva kao strukturirani objekti umjesto ravne slike — svaka linija, oblik i tekst zadržavaju svoja svojstva. Tabla se može ponovo otvoriti i mijenjati, a ne samo pogledati.
Preživi zatvorenu sesiju
Izdati dokument se renderuje i čuva kao nepromjenjivi HTML. Kasnije izmjene šablona ne diraju ništa izdato — i zamrznuti izlaz ne zavisi od buduće ispravnosti koda koji renderuje.
Rezultat
Šta bismo uradili drugačije
Na carinskom sistemu zamrzavanje izdatog dokumenta bilo je ispravno ali nepotpuno: nikad nismo verzionisali sam šablon. Pa dok se nijedna izdata faktura nije mogla promijeniti, nije postojao zapis o tome koja verzija šablona ju je proizvela, ni ko ga je mijenjao i kada. Snimak je odgovorio na hitno pitanje i ostavio revizijsko otvorenim.
- Node.js
- PostgreSQL
- Kotlin
- Fabric.js