---
title: "People don’t tolerate bugs when money is involved"
url: https://gardiner.today/past/nagaris
tense: past
edition: "2026.11.02"
updated: "2026-11-02"
---

# People don’t tolerate bugs when money is involved

Nagaris

Lead frontend engineer, November 2025 to March 2026.

Sole frontend engineer on a practice management and billing platform for accounting firms. Built the invoicing, payments and proposal surfaces from nothing.

## Highlights

- [billing from nothing](https://gardiner.today/past/nagaris#invoices-and-payments): There was no billing UI when I joined. I built invoicing, payment tracking, schedules and the Xero integration.
- [edge cases first](https://gardiner.today/past/nagaris#invoices-and-payments): Payments had to be right first time, so edge cases got more time than whole features.
- [four levels, one view](https://gardiner.today/past/nagaris#engagements-and-proposals): Engagements hold phases, deliverables and line items, and most of the work went into not making that feel overwhelming.
- [AI kept the pace](https://gardiner.today/past/nagaris#working-small): As the only frontend engineer, AI tools kept the pace up and left my energy for design decisions.

## The problem

When I joined, the product had no billing UI at all. Accounting firms needed to invoice, track payments, schedule them, and price their services through proposals with tiered payment options, and none of that existed on the frontend.

My work spanned the whole product, from core billing flows to client-facing proposals to internal tooling. With no other frontend engineers on the team, I had full ownership over architecture, UI patterns and how the product felt to use day to day.

> When I joined, the product had no billing UI at all.

Ask Ardo: [what did nagaris need when he joined?](https://gardiner.today/future?q=what%20did%20nagaris%20need%20when%20he%20joined%3F)

## Invoices and payments

My biggest contribution was the Invoices and Payments experience, built from scratch: the full invoicing surface, payment tracking, payment schedules and the Xero integration, plus the navigation around it. That meant the payment infrastructure on the frontend side too, with card and bank account flows, Direct Debit Service Agreement compliance, and a client onboarding flow with validation checks before payment setup.

A payment has to be right the first time, so I spent more time on edge cases and error states here than on entire features elsewhere.

**the call i made**: Spend the time on more features, or on edge cases?

- Took: Edge cases and error states. A bug in a payment costs someone real money.
- Turned down: More features. Quicker to show, and one bug in a payment would undo them.

Ask Ardo: [what did he build for invoices and payments?](https://gardiner.today/future?q=what%20did%20he%20build%20for%20invoices%20and%20payments%3F)

## Engagements and proposals

The Engagement and Proposal system is how firms price their services, build proposals with tiered payment options and send them to clients for acceptance. The data model is deeply nested (engagements have phases, phases have deliverables, deliverables have line items), so most of the effort went into making that not feel overwhelming in the UI. The components were built to be reused across the client-facing and accountant-facing sides, so the backend team could drop them into their own views without duplicating work.

**4**, levels of nesting in a proposal: engagements, phases, deliverables, line items

Ask Ardo: [how did he keep deeply nested data simple in the ui?](https://gardiner.today/future?q=how%20did%20he%20keep%20deeply%20nested%20data%20simple%20in%20the%20ui%3F)

## Communications and consistency

Later came a unified communications inbox for email and SMS, with compose, threading and per-contact actions, rolled out behind feature flags in PostHog. Beyond individual features, I owned frontend consistency across the product: visual standards, Australian date localisation, interaction patterns, and integration quality across Xero, XPM, Nylas, Monoova, PostHog and SendGrid.

**the call i made**: Ship the new inbox to everyone at once, or behind flags?

- Took: Behind feature flags. In PostHog, so it reached people gradually.
- Turned down: All at once. Email and SMS are too close to clients to switch over in one go.

Ask Ardo: [what did he own beyond single features at nagaris?](https://gardiner.today/future?q=what%20did%20he%20own%20beyond%20single%20features%20at%20nagaris%3F)

## Working small

A smaller company meant speed: less process, less overhead, more time shipping. As the only frontend engineer I leaned on AI tools like Claude Code and Cursor even harder, which kept the pace up and left my energy for design decisions instead of repetitive implementation.

It also showed me I can have real impact on a small product team, as I had at Canva, and take ownership in very different places.

> A smaller company meant speed: less process, less overhead, more time shipping.

Ask Ardo: [what was it like being the only frontend engineer?](https://gardiner.today/future?q=what%20was%20it%20like%20being%20the%20only%20frontend%20engineer%3F)

## Ask about Nagaris

Ardo has read this case study and the rest of the site. Ask it what I didn’t cover, and it shows the pages its answer rests on.

Ask Ardo: [how did he design for the edge cases when money is involved?](https://gardiner.today/future?q=how%20did%20he%20design%20for%20the%20edge%20cases%20when%20money%20is%20involved%3F)

## Read next

- [The biggest piece of tech debt](https://gardiner.today/past/canva) (Canva): A fragile surface used by millions, rebuilt in place.
- [Perhaps the greatest design agency in Brisbane](https://gardiner.today/past/bigfish) (Bigfish): What came next: a new brand on top of years of editors’ content.

[All case studies](https://gardiner.today/past#case-studies)

I live and work in Magandjin, the Jagera name for Brisbane, Australia, on the Country of the Turrbal and Jagera peoples. I pay my respects to their Elders, past, present and emerging. Sovereignty was never ceded.
