Atlassian has described the engineering behind its Forge billing platform, a system built to support usage-based pricing across its cloud application development ecosystem. Forge is Atlassian’s serverless extensibility platform used to build apps for products such as Jira and Confluence, and the billing system is responsible for translating distributed usage signals into accurate financial records at scale.
The platform emerged as Forge evolved from a simple extension model into a usage-driven ecosystem where billing depends on fine-grained signals such as function invocations, storage consumption, and operational telemetry. This shift required Atlassian to build a system capable of collecting high-volume events from independent services, ensuring they are consistently validated, attributed to the correct tenant context, and transformed into billing-ready records without duplication or loss, while still supporting near real-time visibility for developers.
At a high level, the architecture consists of Forge services emitting usage events, a centralized ingestion and streaming layer, a usage tracking system, and downstream billing and commerce systems. Each Forge service produces structured events using a shared schema, ensuring consistent interpretation across downstream consumers regardless of origin.
Atlassian emphasized,
UTS (Usage Tracking Service), which acts as the nervous system for Forge Billing.
Atlassian describes UTS as the coordination layer for incoming usage data, responsible for validating, normalizing, enriching, and preparing events for billing workflows. UTS also ensures that usage data is consistently attributed to the correct entitlement or subscription context before it is persisted and passed downstream. Events flow through a streaming infrastructure built on Kafka-based systems and internal delivery abstractions. This layer enforces schema validation and ensures reliable delivery to downstream consumers. By decoupling producers from consumers, the platform reduces service dependencies and allows ingestion and processing components to scale independently.
Atlassian highlighted,
Key complexity here is attribution and shape: every event must be attributed to the right entitlement/subscription context, and it must fit the UTS contract so that downstream systems.
Once ingested, usage events are processed by the tracking layer, which performs validation, normalization, enrichment, deduplication, and ordering. This ensures financial correctness even in scenarios where events arrive out of order or are delivered multiple times due to retries.

Ingestion pipeline (Source: Atlassian Blog Post)
The system addresses distributed consistency using idempotent event design and time-based aggregation, ensuring duplicate deliveries do not cause double counting while late-arriving events are incorporated through windowed processing. A stream processing engine converts raw usage events into aggregated metrics for billing and analytics. Data is stored in layered systems, with immutable long-term storage for auditability and a low-latency analytical layer for dashboards and APIs. Usage is mapped to developer spaces for per-app tracking and consolidated billing, enabling scalable, transparent billing with strong correctness and traceability guarantees.