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

100K+

SMBs impacted

Customers using the AR platform whose invoicing and payment workflows were improved or expanded

5+

Major features shipped

End-to-end customer-facing capabilities delivered: Bulk Mark as Paid, Recurring Invoices, Scheduling, Payment Links, Invoice Customization

Engineering velocity

Measurably faster feature delivery cadence as microfrontend patterns and standardized tooling compounded across the team

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.

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. Removed stale flags, documented active ones, 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.

What Shipped

Key capabilities shipped

  • Bulk Mark as Paid: lets AR teams reconcile multiple invoices simultaneously, eliminating a major workflow bottleneck for high-volume customers
  • Recurring Invoices: automated invoicing on configurable schedules, reducing manual overhead for subscription-based billing
  • Scheduling Invoices: deferred send workflows so customers could prepare invoices in advance and dispatch them at the right time
  • Payment Links: shareable payment URLs that let customers collect payments outside the platform, expanding AR reach
  • Invoice Customization: branding and layout controls that let businesses present professional, on-brand invoices to their clients
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