Building Post-Issuance Inspection Workflows
PermitFlow's core product managed the permit application process from creation through issuance. But for most construction projects, getting a permit issued is only the beginning. Projects require multiple inspections before permits can be legally closed. Customers were creating workarounds using fake applications and spreadsheets to track post-issuance workflows, creating incomplete data and making reporting impossible.
Problems
Inspections Not Formally Supported
The product ended at permit issuance. Customers created new applications or freeform tasks to track inspections, leading to incorrect data models, incomplete tracking, and poor reporting.
Extreme Workflow Variation
Customer workflows varied dramatically. Some needed PermitFlow to only provide information, others wanted coordination support, and some required full inspection management. Coordination happened through different channels with different parties.
Inspections Required for Permit Close-Out
Most jurisdictions require passing inspections before permits expire. Missed inspections or failure to follow up could result in fines, legal risk, or project delays, but there was no system to track any of this.
No Customer Visibility
Customers like RBA, Service Experts, and PJ Fitzpatrick lacked visibility into post-issuance progress. They couldn't see inspection status, upcoming deadlines, or whether permits were on track to close.
Approach
The core challenge was designing a system flexible enough to support radically different workflows while maintaining structure and data integrity. Customer interviews revealed the spectrum: some just needed visibility into inspection status, others wanted coordination support, and some required full management with scheduling and follow-up. A one-size-fits-all approach wouldn't work.
I worked with engineering to decide on a key architectural choice: treating inspections as first-class entities with their own object model rather than forcing them into the existing application structure. This kept the data model clean and enabled proper reporting. I also pushed for workspace-level configurability so we could serve different customer needs without building separate features for each segment.
Solution
The inspection system extended the application timeline to Created → Issued → Inspections → Closed Out. Once a permit was issued, a dedicated "Inspections" view unlocked, pre-populated with inspections from municipal research or addable on the fly. The view showed expected inspections with status tracking, scheduling dates, contact information, and notes. Users could reorder inspections, upload documentation for passes or failures, and see clear visual indicators for what needed attention.
New tabs in the project overview table ("Not scheduled," "Scheduled," "Failed," "Closed out") made it trivial to see which projects needed attention. A public application view let homeowners and contractors see inspection status and mark inspections as "Ready" without logging in, eliminating constant back-and-forth communication.
A workspace-level inspections view provided a table of all inspections across projects with filtering and grouping, giving operations teams visibility into workload and bottlenecks. The workspace settings system made everything adaptable. Teams could enable inspections selectively, configure scheduling responsibility, and determine whether completion was required for sign-off. This flexibility let us serve wildly different customer needs with a single system.

Impacts
Successful Customer Migrations
Successfully migrated Fitch Electric, RBA NJ, and pilot customers including Service Experts, PJ Fitzpatrick, Rycor, and LB Capital to the new inspection workflow.
Complete Lifecycle Tracking
Enabled accurate reporting on the full project lifecycle from application through close-out, replacing incomplete workarounds with structured data.
Flexible Workflow Support
Single system now supports diverse customer needs, from information-only to full inspection management, through workspace-level configuration.
Proactive Risk Management
Permit expiration tracking and automated task creation prevented missed deadlines, reducing legal risk and potential fines for customers.
Reflections
This project taught me the importance of designing for configurability without creating complexity. The workspace settings system was critical. It let us build one robust feature that served many different use cases rather than building separate features for each customer segment.
The decision to model inspections as first-class objects rather than extending applications paid off. It kept the data model clean, enabled proper reporting, and made the feature understandable to users. The alternative, jamming inspections into the existing application structure, would have created technical debt and confused users.
If I could do it again, I'd involve more customers earlier in the design process. We had strong hypotheses about workflow variation, but actually seeing how different contractors coordinated inspections would have surfaced edge cases sooner. The pilot migrations validated our approach, but earlier customer research would have reduced iteration cycles.