Skip to content

Architecture Decision Records (ADR Log) ​

This log records all fundamental design and architecture decisions made in 19-usage-billing-engine.


ADR IDDecision TitleChosen OptionAlternatives ConsideredDeciding FactorsTrade-offs AcceptedRevisit When
ADR-01Monetary Unit RepresentationInteger Minor Units (Cents) + DecimalIEEE 754 Floats, String MathElimination of binary floating-point rounding errorsExplicit conversion required when displaying dollars in UIMulti-currency requiring fractional minor units (e.g. crypto/tokens)
ADR-02Primary Database EnginePostgreSQL 16 with Range PartitioningMongoDB, MySQL, DynamoDB, CockroachDBStrict ACID guarantees, row-level locking, and native table partitioningVertical primary node capacity limitsIngestion exceeds 50,000 QPS sustainably
ADR-03Architecture StyleModular MonolithDistributed Microservices, ServerlessSingle atomic database commit across invoices and double-entry ledgerIngestion and invoicing share server resourcesTelemetry ingestion requires independent auto-scaling clusters
ADR-04Ledger Bookkeeping ParadigmAppend-Only Double-Entry JournalSingle-Entry Mutable BalancesComplete auditability; debit-credit conservation guaranteesHigher storage growth; balance calculation requires summing entriesHistorical entries exceed 500 million rows (requires materialized snapshots)
ADR-05Idempotency DeduplicationDatabase Unique Index (ix_tenant_idem)In-Memory Set, Client Session TokensPersistence across server restarts and crashesSynchronous database write latency on every eventIngestion latency requirements drop below 5 milliseconds
ADR-06Invoice Sequence NumberingRow-Level Lock (SELECT ... FOR UPDATE)Distributed UUIDs, Unchecked Auto-IncrementLegal fiscal requirement for gapless sequence numbersSerialized queue under concurrent invoice finalizationsFinalizations exceed 500 invoices per second per tenant
ADR-07Proration Calculation GranularitySecond-Exact Ratio with ROUND_HALF_UPDay-based ratios, Half-month bracketsFair billing for mid-cycle upgrades at any hour of daySlightly higher arithmetic calculation overheadNever; standard financial practice
ADR-08Audit Log Security & PIIRecursive Regex SanitizationStoring Raw Diffs, External KMS field encryptionPrevention of credit card and tax ID leakage into logsRegex scanning overhead on mutation writesHigh-throughput bulk administrative migrations
ADR-09Billing Console FrameworkVanilla ES6+ JavaScript, HTML5 & CSSReact 18, Vue 3, Next.jsZero build step complexity, instant load time (<100ms), 10KB bundle sizeManual DOM manipulation instead of reactive component stateConsole features expand to complex multi-screen enterprise portal
ADR-10Documentation ToolchainVitePress with withMermaid PluginDocusaurus, MkDocs, GitBookFast Vue.js-style static rendering with pure-black dark theme and Mermaid diagramsNode.js toolchain required for documentation buildsNever; VitePress provides superior developer documentation experience