drag to throw · draw to create

Selected Work

Case studies from production work. Most of this is internal software — I've written up the context, decisions, and outcomes instead.

Featured

Production Feature

Reports Feature Rebuild

Technical Lead

Led a ground-up rebuild of Quicken's Reports system to give users a powerful, flexible way to analyze their financial data.

Problem

Two compounding problems drove the rebuild. First, the existing implementation had two sources of truth — a React context and a Redux store — that were meant to stay in sync but would drift, causing the app to loop as it tried to reconcile them. It was brittle and hard to reason about. Second, business users had a real unmet need: the original reports were just a chart with a flat transaction list underneath. For accounting purposes and deep financial analysis, users needed something much closer to Excel pivot table behavior — the ability to change rows, columns, and groupings interactively while the chart updated alongside.

Approach

Eliminated the dual source-of-truth problem by consolidating all report state into Redux, removing the React context layer entirely. Then built an interactive data grid on top of that stable foundation — supporting drill-down into categories, dynamic row and column configuration, and filtering — all while keeping the chart in sync with whatever view the grid was showing. The chart and grid share the same derived state, so they always agree.

Outcome

Delivered a reports experience that genuinely works for power users doing accounting and financial analysis — not just a chart with a table below it, but an interactive pivot-style view. Resolved the state synchronization bugs that had been a persistent source of issues, and established a cleaner architecture for the feature going forward.

TypeScriptReactReduxMaterial UIChart Libraries
Internal product — not publicly available.
Production Feature

Spending Plan Performance Overhaul

Technical Lead

Identified and eliminated the root causes of a 2-second interaction delay in Simplifi's flagship feature, reducing latency to under 50ms.

Problem

Spending Plan, Simplifi's primary monthly budgeting view, had a persistent 2-second lag on common interactions. The page was designed to be highly interactive — users are constantly adjusting values and seeing the effect on their budget — but every interaction was round-tripping to the server for recalculation, making it feel sluggish and unresponsive.

Approach

The key insight was that we didn't need the server for this. Transactions were already loaded client-side as part of our existing client-first architecture, and we had already built optimistic update patterns on the transactions page that we could leverage directly. The fix was moving budget calculations entirely to the client — computing derived state from the transaction data already in Redux rather than waiting on a server response. Added a comprehensive Jest test suite and coordinated a cross-team test plan to validate correctness of the client-side calculations.

Outcome

Interaction latency dropped from 2 seconds to under 50ms — a 40× improvement. Because the approach reused existing optimistic update infrastructure rather than building something new, it was lower risk than it sounds and shipped cleanly. The test suite became the standard for the feature going forward.

TypeScriptReactReduxJest
Internal product — not publicly available.

More

Production Feature

Clients & Projects

Front-End Engineer

Built Quicken for Business's client and project management system, giving freelancers and small business owners a structured way to track work and associate transactions.

Problem

Quicken for Business users — primarily freelancers and small business owners — had no way to organize their financial activity around clients or projects. Transactions existed, but there was no layer for understanding which client a payment came from or which project an expense belonged to. This made it difficult to understand profitability or prepare for billing.

Approach

Designed and built the client and project management screens, including creation, editing, and association of transactions to specific clients and projects. The data model needed to fit cleanly into the existing transaction architecture so that filtering and reporting across client and project dimensions would work without rebuilding those systems.

Outcome

Gave business users a structured way to manage their work and financial relationships within Quicken — a foundational capability that other business features like invoicing could build on top of.

TypeScriptReactReduxMaterial UI
Internal product — not publicly available.
Production Feature

Achievements — Cross-Platform Gamification

Technical Lead (Web & Mobile)

Technical lead on a gamification system that awarded badges for hitting financial goals, shipped simultaneously on web and mobile.

Problem

Simplifi wanted to add a lightweight gamification layer — badges for milestones like staying under budget or hitting a savings goal — to drive engagement. The challenge was shipping it consistently across web and React Native mobile without maintaining two separate implementations, and surfacing badge events in real time rather than on next page load.

Approach

Used bit.dev to share core achievement logic and UI components between the web and React Native codebases, keeping a single source of truth for badge definitions and rendering. Integrated WebSockets to push badge events to the client the moment they were triggered server-side, so the reward felt immediate. Coordinated the rollout across both platforms with a unified QA pass.

Outcome

Shipped on both platforms simultaneously with a shared component layer. The bit.dev setup reduced the surface area for platform divergence and was reused for subsequent cross-platform features.

TypeScriptReactReact NativeWebSocketsbit.dev
Internal product — not publicly available.