Turning License Management into Infrastructure, Not Overhead
A multi-tenant platform that issues, tracks, and retires software licenses on its own
The situation
The client sells software licenses to a network of distributors, who in turn provision them down to individual devices and end users. That chain — vendor to distributor to device — had outgrown what manual tracking could safely handle. Licenses were being issued, renewed, and revoked by hand, with pricing rules and expiry dates living in scattered records rather than a system of record. As the distributor network grew, so did the risk: a license that should have expired but didn't, a device entitled to software it never paid for, a purchase that couldn't be reconciled after the fact. The brief was to replace that process with a real platform — one that could stand behind every license it issued, self-service purchasing included, without adding headcount to keep it running.
What we built
A cloud-native license manager that treats a license as a first-class object with a full lifecycle — created, purchased, activated, reviewed, expired — rather than a row in a spreadsheet. It models the client's actual org structure, so permissions and pricing follow the same hierarchy the business already runs on.
Distributors, sub-tenants, devices, and users are modeled as a real hierarchy, so a license request is evaluated in the context of who's actually asking.
Distributors can request, price, and buy licenses directly, with PayPal handling payment capture and the platform handling everything downstream of it.
Expiry, renewal, and status changes run as background workflows instead of a person remembering to check a date.
An analytics layer gives the client a live view of what's licensed, to whom, and for how long — the audit trail the old process never had.
How it's put together
We kept the architecture serverless end to end, so the platform scales with usage rather than with provisioned capacity — a good fit for a licensing system where load tracks business activity, not a fixed baseline.
A modern React/Next.js console for distributors and internal teams, deployed through AWS Amplify.
Domain logic split into focused AWS Lambda functions — licensing, users, devices, distributors, pricing — behind an API Gateway.
DynamoDB as the system of record, chosen for predictable performance as tenants and license volume grow.
Cognito-backed authentication with a custom authorizer layer, so access follows the org hierarchy rather than a flat role list.
The entire stack is defined as AWS CDK, so a new tenant environment is a deployment, not a project.
Outcome
The platform now runs the client's licensing operation directly — distributors purchase and manage licenses themselves, entitlements stay in sync with what was actually paid for, and the manual reconciliation work that used to eat internal hours has largely gone away.
“A licensing process that used to depend on someone remembering to check a date now runs itself — and the client can see, at any moment, exactly what’s licensed and to whom.”
Client identity withheld at their request. Details reflect the platform's architecture and scope as delivered.