Reporting that outlived the company that built it
Built for ten franchise locations. Two years later the brand is past thirty, the company that built it is gone, and the reporting still runs every week.
- Client: A franchise brand in outdoor home services, delivered through Franworth, its franchise-services partner
- Role: Lead developer at Franworth — requirements through delivery
- Stack: SQL Server, Azure Data Factory, Power BI with row-level security
- Source system: Smart Service 365
Before
The project started when the client showed our team the spreadsheet he put together every Monday for the franchisees. He'd pull the data out of Smart Service, reshape it in Excel, and send it out.
It took him about half a day, every week, by hand.
The real problem
Every franchise location ran in its own Smart Service tenant. There was no single system that could see all of them at once — which is why the report had to be assembled by hand in the first place.
What I built
Backups from each tenant landed in Azure Blob Storage, restored into SQL Server, and unified into one database through Azure Data Factory. One model, all locations, on a schedule.
Row-level security was in the design from the first conversation rather than added later. Franchisees log in and see their own locations. The home office sees all of them.
What happened next
The Monday spreadsheet stopped being a build and became a check. Export it, confirm it looks right — or hand a franchisee access and let them look themselves.
The brand grew from ten locations to more than thirty.
Franworth, the franchise-services company I built it through, closed.
The reporting system is still running. The brand still uses it every week.
A second brand in the same program. I built the first version of the reporting for another Franworth brand running MindBody Online instead of Smart Service 365 — a different source system, the same approach to definitions and permissions.
Why this was hard
Franchise reporting is not a dashboard problem. It's an integration and permissions problem wearing a dashboard.
Operational systems don't agree with accounting about what a sale is. Exceptions exist for reasons nobody wrote down. And the person opening the report has to see their data and not their neighbor's — which means the security model gets designed before the first visual, not after.
Build it that way and it survives growth. Build it the other way and it breaks the first time someone adds a location.
Afterward
The brand engaged me directly for additional work after Franworth closed.
Client name available on request.