David Christensen

Senior Software Engineer - Procore Technologies

I am the front-end technical lead for the pay/compliance team. We deliver compliance, lien rights, and electronic signatures features for general contractors and subcontractors. I set API contracts before code gets written, I build the shared platform the team ships on, and I own the team's quality and security programs.

1st
Place in internal AI agent hackathon (team)
4
Micro-frontends bootstrapped or migrated

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.

Frontend lead for a new compliance data model

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.

API design Cross-team
Testing federated micro-frontends inside a real host

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.

Playwright CircleCI Module Federation
Security certification and supply-chain hardening

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.

Supply chain GitHub Actions Automation
Compliance documents in the subcontractor invoice submission flow

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.

Feature lead React Customer-facing
Async document generation

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.

React Query Reusable component
Incident command: a stalled production data pipeline

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.

Kafka Incident commander
Shared compliance foundation and a reusable document viewer

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.

Shared code
AI agent skills for the team

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.

Claude Code Developer experience
Scope checks that saved work

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.

Spike Scoping
Moving a payments frontend to micro-frontends

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.

Module Federation Migration

Timeline

Main areas of work at Procore.

Skills

React TypeScript Micro-frontends Module Federation React Query Node.js Playwright Jest CircleCI GitHub Actions LaunchDarkly Dependabot Kafka (operations) Claude Code AI agents API design Incident command Mentoring