Home

Configurable Budgeting Tool - Procore

Procore’s legacy Budget tool was so slow that customers jokingly called it a “coffee report”: you could click “load” and have time to grab coffee before it rendered. Customers needed a way to see real-time financial health across disparate tools — costs, revenue, contracts, labor, and more — in a single, customizable, and performant view. Our team rebuilt the tool from the ground up, introducing a new API-driven backend and a React frontend that transformed Budget from a static report into a dynamic, configurable powerhouse.

The Procore Standard Budget View - Project Level

Tech Stack: Rails Ruby Postgres SQL React Redux redux-modules redux-sagas
My Role
  • Backend (Rails/SQL) → Designed APIs, schemas, and contracts; built a SQL-construction library leveraging CTEs, materialized views, indices, and serialization to deliver sub-10s queries.
  • Frontend (React/Redux) → Architected state management with Redux + sagas; implemented information architecture and reusable design systems.
  • Collaboration → Worked cross-functionally with PMs, UX, QA, and engineers using Scrum, Confluence, GitHub reviews, and design reviews to deliver a year-long project on time.
Impact
  • Reduced budget load times from 10+ minutes → under 5 seconds (avg), with 99.9th percentile under 10s.
  • Boosted adoption of Procore Financials, helping drive the product line to $1B+ ARR and support Procore’s 2021 IPO.
  • Established a new reporting pipeline that seeded follow-up tools like Advanced Forecasting, Budget Changes, and Resource Management.
  • Inspired the creation of a company-wide Custom Reporting team.
Technical Highlights
  • Built a dynamic SQL constructor library that defined report structures without executing until runtime.
  • Implemented HATEOAS to allow incremental data loading and third-party developer integrations.
  • Designed polymorphism-like data models without native polymorphism, ensuring performance and maintainability.
A Story
At Procore’s first all-company offsite in Ojai (2016), a critical customer couldn’t load their Budget after applying 10,000+ filters. The sticky filter URL exceeded browser length limits, crashing the tool. Huddled in the back of the conference room during the keynote, four engineers (myself included) hotfixed the issue by moving params into a POST body. Within hours, the customer was back online — and our team earned a reputation for scrappy, fast problem-solving.