A six-week sprint for a commercial real estate firm. A multi-property rent roll consolidated from heterogeneous source systems into a single Azure-based reporting pipeline. Production-ready in six weeks. Documented and handed to the client's internal team to operate and extend.
The problem
Rent rolls existed — per property, per leasing manager, in spreadsheets and isolated systems. None of them lined up. Currency conventions, formatting, lease term math, escalation logic — all different from one building to the next, often for legitimate historical reasons.
The portfolio-level view that the finance function needed for a board-relevant decision did not exist as a clean artefact. Producing it manually each cycle would have required several weeks of senior analyst time and would have remained brittle — every reconciliation rebuilt from scratch, every assumption re-litigated.
They needed a system. And they needed it before the next cycle, not after.
What we did
One fixed-scope sprint. Six weeks. One clear deliverable: a production pipeline that produced a portfolio-level rent roll the finance function could trust without re-checking.
The work moved in three layers.
Source mapping. Every property's data lived somewhere — an export, a spreadsheet, a property-management system, a finance ledger. We documented each source, its quirks, and its conventions. Nothing about a building's data was treated as wrong; it was treated as the source of truth for that building, with the integration responsible for harmonization.
The pipeline. An Azure-based stack with a normalized data model for lease and tenancy. Ingestion for each source, standardization of currency and lease term math, escalation handling consistent across the portfolio. Validation against the manually produced rent rolls of two reference properties before the system went wide.
Production deployment. Monitoring, runbook, and handover. The pipeline runs on the client's own Azure tenancy, not ours. That was a deliberate design choice from the brief — no operational dependency on the vendor that built it.
The result
Three outcomes.
The timeline held. The pipeline went into production in six weeks, in time to support the cycle the work was commissioned for. The decision the finance function needed to bring to the board was supported by data produced from one consolidated source rather than reconciled from many.
The reporting got cleaner. Portfolio-level rent roll is now produced from a single normalized model. Subsequent cycles took a fraction of the manual effort the previous approach demanded — and the underlying data passed the kind of independent checks that a board-relevant report needs to pass.
The handover. The pipeline lives on the client's Azure tenancy and is operated by their internal team. Documentation covers the data model, the ingestion logic per property, and the runbook for onboarding the next building. The work continues without us in the loop, by design.
The brief was a pipeline in time for a cycle. What was delivered was a way to produce that cycle's report — and every cycle after it — that the team can run on their own.