Created At: Tue Jun 09 2026
Subscription Engine
From Manual Effort to Automated Subscription Lifecycle Management
Industry: B2B Software (On-Premise Licensing)
Company size: Small ISV, international customer base
Engagement type: Process & Software Engineering Project
Deliverable: Subscription & Agreement Management System (SAMS)
The Situation
A software vendor selling on-premise licenses to B2B customers across multiple markets was running its entire commercial backend on manual effort. Agreements were negotiated and sent ad hoc. Subscriptions were tracked in spreadsheets. Invoices were issued by hand, with no systematic process for monitoring payment status or triggering renewals. Licenses were renewed reactively — when someone remembered to act.
The business had a growing customer base. The process did not scale with it.
Every renewal cycle required the customer success manager to manually collect current customer information, coordinate with a third-party billing partner, issue invoices, monitor their status, and follow up on overdue payments. There was no single source of truth. There was no automation. There was no early warning when a subscription was about to lapse.
The risk was not theoretical. Missed renewals, late invoices, and inconsistent agreement handling were costing the business time, credibility, and revenue.
The Problem Diagnosis
Before writing a line of code, the full revenue lifecycle was mapped. The analysis identified five interconnected failure points:
- Agreement fragmentation. Offers and SLAs were created inconsistently, with no standardized format or centralized tracking. No agreed terms meant no clean entry point for the subscription lifecycle.
- Subscription blindness. There was no official system of record for active subscriptions. Status changes — upcoming renewals, plan changes, lapsed licenses — were invisible to the team until they became urgent.
- Invoice dysfunction. Manual invoice creation introduced errors and delays. Payment status was tracked informally. Dunning — the systematic follow-up on unpaid invoices — did not exist as a process.
- License management gaps. License renewals depended entirely on human memory. No triggers. No alerts. No audit trail.
- No customer touchpoint structure. Customers received no systematic communication at key lifecycle events. Status changes were either communicated reactively or under-communicated entirely.
The root cause was the same across all five: the revenue lifecycle had never been engineered. It had simply accumulated — a patchwork of habits and workarounds that worked at low volume with high manual effort and was difficult to scale to a growing customer volume.
The Approach
The project began with process engineering, not software development.
BPMN process models were defined for each lifecycle: agreements, subscriptions, invoices, licenses, and library renewals. Database architecture was designed. Customer touchpoints were mapped. Integration pathways with the existing cloud platform were scoped. Only once the process logic was stable did development begin.
The build was structured as a self-contained, containerized application — deployable across development, staging, and production environments without external dependencies. The stack: TypeScript, Node.js (Fastify), Prisma, PostgreSQL, Redis, Docker. Server architecture was designed for security, extensibility, and a clear migration path toward NestJS for future SOC2 compliance.
The core development took place over six months, in parallel with ongoing customer success, sales, and product management responsibilities.
What Was Built
Agreement Lifecycle Standardized offer and SLA creation with PDF generation. Agreement data automatically populates customer account, company, address, contacts, and subscription plan — no manual re-entry. Finalization of an agreement triggers the subscription lifecycle automatically.
Subscription Lifecycle Automated tracking of subscription status across the full lifecycle. Upcoming invoices triggered automatically at the correct intervals. Status change events generate email notifications to the responsible sales manager. No manual monitoring required.
Invoice Lifecycle Invoices generated automatically from subscription data — for both new subscriptions and recurring cycles. PDF export on demand. Semi-automatic status workflow tracks each invoice through issuance, payment receipt, and archival. Email notifications fire on status changes. Dunning logic built in.
Data Management All customer metadata — addresses, contacts, custom subscription plans — managed centrally. Full CSV export and import for backup, reporting, and migration. No more spreadsheets as the source of truth.
Architecture Containerized Docker bundle with embedded database and Redis queue. Multi-environment support out of the box. Designed to be extended: license server integration interface prepared, reseller portal pathway defined, self-service customer portal scoped as next phase.
The Outcome
The system entered production use immediately upon completion of v0.1. Ongoing refinements have continued as real operational data has shaped further improvements.
The tangible results:
- Subscription and invoice lifecycles now run on automated triggers. Manual tracking eliminated.
- Agreement-to-invoice flow is fully guided. Data integrity enforced by the system, not by individual discipline.
- Standardized PDF output for quotes, invoices, and SLAs. Error rate reduced. Time-per-document reduced.
- Sales manager attention is driven by automated email alerts, not by calendar reminders or luck.
- Full audit trail. Every status change recorded. CSV export available at any point.
- Foundation laid for self-service customer portal, automated license retrieval, and reseller collaboration — each requiring no re-architecture.
The business moved from a revenue lifecycle that depended entirely on human effort to one that runs on a designed process. The risk of missed renewals, late invoices, and inconsistent agreements did not require new people or new strategy. It required engineering.
The Principle Behind the Work
Revenue is not lost because teams lack effort or intent. It leaks because the systems that should protect it were never built. Subscription management, invoicing, and contract renewals are not operational afterthoughts. They are load-bearing stages of the revenue engine.
When they run on process, they protect revenue automatically. When they run on habit, they leak it silently.
This project is a direct application of that principle: diagnose the friction, engineer the fix, deploy the system.
This case study has been anonymised. Client and product names have been removed. All described functionality reflects implemented and production-deployed work.