Skip to content
BILL

BILL · Software Engineer II

AR Platform Modernization

Jun 2024 to Present

Led modernization of BILL's Accounts Receivable platform. Transformed a legacy monolithic frontend into a scalable microfrontend system serving hundreds of thousands of SMBs.

AngularReactGraphQLMicrofrontendsTypeScriptLaunchDarklyPlaywrightJest
LinkedIn

5

AR workflows shipped

Bulk Mark as Paid, Recurring Invoices, Scheduling, Payment Links, and Invoice Customization, delivered end to end and reaching BILL's AR customer base of 100K+ SMBs

3

Independent deploy surfaces

Invoicing, payments, and customer management each became independently deployable, letting teams ship without coordinating across the full monolith

30%

Bundle size reduction

Cut initial bundle size for AR workflows by roughly 30%, improving load time for time-sensitive invoicing flows

80%+

Test coverage across AR

Raised automated test coverage across AR workflows from the low 50s into the high 80s (percent) through standardized Playwright patterns

Context

BILL is a financial operations platform built for small and medium businesses. Its Accounts Receivable product handles invoicing, payment collection, and cash flow management for a customer base of hundreds of thousands of SMBs, representing billions in annual payment volume. When I joined, the AR frontend was showing its age: a monolithic codebase that was slow to change, hard to test, and increasingly unable to keep pace with the product roadmap.

My Role

I owned the GraphQL migration, feature-flag rationalization, and Playwright automation standardization end to end. Feature delivery such as Bulk Mark as Paid and Recurring Invoices was shipped in collaboration with the broader AR team.

Problem

A platform that couldn't keep up with its own growth

The AR frontend was built for a product at an earlier scale. As BILL grew aggressively, the codebase became a bottleneck. Each feature shipped more slowly than the last, and test coverage gaps meant that changes to core workflows carried real regression risk for customers.

  • Monolithic Angular frontend made isolating and deploying individual features difficult, slowing down release cycles
  • Legacy LaunchDarkly feature flags had accumulated over years. Stale flags scattered across the codebase added cognitive overhead and made the system harder to reason about
  • Frontend-backend coupling through REST APIs led to over-fetching and redundant network calls, degrading performance at scale
  • Test automation was inconsistent. Each team had its own patterns, making coverage spotty and QA maintenance expensive
  • Bundle sizes had grown without systematic management, impacting load time for time-sensitive AR workflows
Approach

Modernize at the seams, not all at once

Rather than a risky big-bang rewrite, the strategy was to modernize incrementally. We migrated high-value workflows into microfrontend experiences while maintaining continuity for existing customers. Each new feature was an opportunity to establish the right patterns.

Microfrontend boundary design

Defined clear ownership boundaries across AR workflows. Invoicing, payments, and customer management each became independently deployable surfaces. This let teams ship without coordinating across the full monolith.

GraphQL for data efficiency

Replaced over-fetching REST calls with GraphQL-driven data fetching within a federated architecture. This reduced redundant API traffic, improved response times for data-heavy AR views, and gave the frontend precise control over what data it requested.

Feature flag rationalization

Audited and cleaned up LaunchDarkly flag sprawl across the AR surface, removing close to 25% of stale flags and simplifying logic on another 10% of active flag paths. Documented what remained and established standards for flag lifecycle management, which reduced the cognitive overhead of working in the codebase.

Standardized Playwright automation

Established shared Playwright patterns and helper utilities adopted across the AR team. Standardizing automation removed the inconsistency between team testing approaches and made it faster to write high-quality tests for new features.

Architecture diagram for AR Platform Modernization
What Shipped

Key capabilities shipped

  • Eliminated a major reconciliation bottleneck for high-volume customers with Bulk Mark as Paid, letting AR teams settle multiple invoices simultaneously
  • Cut manual overhead for subscription-based billing with Recurring Invoices, automating invoicing on configurable schedules
  • Gave customers control over invoice timing with Scheduling Invoices, a deferred send workflow to prepare invoices in advance and dispatch them at the right time
  • Expanded AR reach beyond the platform with Payment Links, shareable payment URLs that let customers collect payments anywhere
  • Let businesses present professional, on-brand invoices to their clients with Invoice Customization, configurable branding and layout controls
Result

Faster shipping, fewer regressions, more capable product

The modernization effort compounded over time. Each workflow migrated and each pattern standardized made the next feature easier to build. Engineering velocity improved measurably, and the AR platform shipped more meaningful customer-facing capability in this period than in comparable timeframes before.

Retrospective
The biggest leverage point in this project wasn't any single feature. It was establishing the right patterns early. Every standardized test helper, every rationalized feature flag, and every GraphQL schema decision made the next sprint faster. Incremental modernization works when each change is an investment in the system, not just a delivery against a ticket.

Hiring for work like this?

Share this case study with your team, or get in touch directly.

ShareLinkedIn