How I work
I set the contract before code spreads
- Worked with backend engineers on the API shape for new features, before either side built against it.
- Found missing endpoints during tech analysis, so they were added to scope before coding started.
- Compared competing API versions and led the team to consensus.
I build the platform the team ships on
- Helped move a large frontend from one legacy client to multiple independent micro-frontends.
- Replaced duplicated code in two applications with one shared foundation.
- Built a generic document viewer component that an adjacent product team now uses.
I own quality and reliability
- Took incident command of a stalled production data pipeline and ran the retro.
- When a dependabot change I merged caused a failure, I explained it and built the tests that catch that class of failure.
- Addressed a race condition in a backend service outside my team's stack.
I run required programs to the end
- Owned the security certification and supply-chain programs for my team's services.
- Turned a one-time cleanup into a daily automated alert to facilitate continuous compliance.
I make the team faster
- Wrote AI agent skills that the team runs each day.
- Wrote the on-call runbooks for remediating critical and high vulnerabilities.
- Chairs the frontend and frontend/backend sync meetings.
- Mentored a junior engineer who was later promoted to senior.
I check the scope before we build
- Showed that a new region launch needed much less frontend work than the team assumed.
- Showed that one security scanner did not apply to a requirement, which removed most of a program's scope.
Selected work
Each entry gives the problem, what I did, and the result. Details are general because the work is internal to Procore.
Problem
A new compliance feature needed new statuses and new endpoints. The frontend and backend teams had different views of what the UI must read and write.
What I Did
- Wrote the frontend technical analysis: endpoints, data types, statuses, and a nested feature-flag pattern. Split the work for 2 other engineers.
- Found that endpoints for two required views did not exist. They moved into scope before build started.
- Proposed a simpler data model shape and a clearer URL design. The backend team adopted both.
Result
The final design kept my API contract and component structure. Some details changed in negotiation, which is how a shared contract should work.
Problem
Our micro-frontends load inside other teams' pages through module federation, and nothing tested their integration. A dependabot dependency upgrade that I merged broke a shared viewer in 3 host products, while the synthetic monitors stayed green (they only checked that the remote was reachable).
What I Did
- Explained the failure and the monitor gap. Added a mandatory host check to our dependency-update process.
- Designed a shared Playwright test suite, so a test can load a pull request preview UI branch into a real host.
- Built a CircleCI workflow that runs each service's smoke tests against its UI preview branch and posts the result on the pull request.
Result
That failure class is now caught before pull requests merge.
Problem
Required, audited programs: remove critical and high vulnerabilities, route dependencies through the company's artifact registry, and fix new findings within 14 days.
What I Did
- Scoped the program and ran one-time remediation across 3 applications.
- Pinned GitHub Actions to commit SHAs and routed CI images through the internal registry.
- Built a shared pipeline that runs a daily, least-privilege audit and alerts before a finding passes 14 days. Wrote the design record and the on-call runbook.
- Guided other teams in adopting this into their workflows.
Result
All three programs are complete. The team moved from one-time cleanup to a daily automated check, and other teams asked to adopt the alerting.
Problem
Subcontractors could not submit compliance documents as part of submitting an invoice.
What I Did
- Owned multiple feature epics to completion, starting with an analysis of the existing behavior.
- Built the feature in one micro-frontend (compliance) and the integration in another (invoicing), with an event contract between them.
- Worked with the design team to ensure that error handling was handled in a way that met accessibility requirements.
Result
Shipped to customers in increments.
Problem
Documents generate asynchronously. Two status APIs had different tradeoffs, and a wrong choice would spread an unstable contract to every document surface.
What I Did
Compared the two APIs and led the decision. Then I built one reusable generation-gate component and applied it to every document surface.
Result
One component in place of per-feature polling logic. A future contract/behavior changes touch one file.
Problem
A Kafka sink between two products had stopped. The rest of my team was away and nobody had taken ownership.
What I Did
Took incident command, found the root cause in a configuration edge case, worked with the data platform team to resolve it, and ran the retro.
Result
The pipeline is running again, and the retro produced process changes.
Problem
Compliance logic, types, and tables were copied across two applications, so each change was made twice. Our legacy document viewer was different from the platform's viewer.
What I Did
Moved our applications to the platform document viewer, built a shared foundation and table component, and helped another product team adopt our viewer.
Result
One implementation in place of two, and a component that another team now uses.
Problem
Repeated manual work: dependency-alert triage, deploy notes, and AI coding setup in each repository.
What I Did
Wrote Claude Code skills that fix dependency alerts, analyze each Dependabot pull request for merge safety, and turn deploy alerts into readable summaries. Added AI coding setup to the team's repositories.
Result
The analysis runs each weekday. The team lead chose it as the way to meet the 14-day fix target each sprint, and the on-call guide uses the skills.
Problem
Plans built on assumptions that nobody had checked.
What I Did
- Tested across 3 applications and showed that a new region launch needed much less frontend work than expected.
- Traced an undocumented file-conversion pipeline across 4 systems in a spike and proof of concept, before anyone built a shallow version.
Result
Sprint capacity went to the right work.
Problem
Payments and compliance features lived in one legacy client, so no team could deploy on its own.
What I Did
Helped bootstrap the payments React micro-frontend, helped create the compliance micro-frontend, and migrated the sub-tier experience into the lien-rights micro-frontend.
Result
Each product area deploys on its own.
Timeline
Main areas of work at Procore.
-
2022Payments platform foundation: lien rights, disbursements, payment settings, and payment readiness.
-
2023Payment requirements for subcontractors. Payments micro-frontend bootstrap.
-
2024Compliance micro-frontend. Compliance templates. Lien waiver enforcement during invoice submission. Started chairing team syncs.
-
2025Lien-rights migration. Shared document viewer micro-frontend. Async document generation. CI artifact promotion.
-
2026Shared compliance foundation. Invoice submission compliance. Security programs. In-host testing. AI agent skills. Hackathon win.