Airport Taxes
Price Commander is the internal tool Lyft uses to set the taxes and fees charged on trips. The Airports team uses it to configure airport trip fees, which come from signed, audited airport agreements. A wrong value either overcharges riders or breaches a contract.
The brief: redesign how the Airports team sets, schedules and tracks airport trip fees, so a fee change is correct the first time, without asking engineering. I led design from research through engineering handoff, working with engineering and the project’s DRI. The users are Airports BDMs, Tax Ops and approvers.
Confusing dates cost real money
The old flow had three similar-sounding date fields. One of them, Change will be processed at, was mistaken for the date riders start paying. The result was SEV 18005: roughly $40K overcollected at MEM and other airports.
Four more problems came with it. Manual timezone math: times were entered in the user’s own time zone, not the airport’s, so a BDM in Denver had to convert to Memphis time by hand. No status, no history: after submitting, there was no clear way to tell if a change was waiting, approved or live, so teams tracked fee history in Jira and email instead. Engineering vocabulary: config names, layers and UUIDs, not how a BDM thinks, which is raise the MEM pick-up fee. Fields with no real choice: reason was always “Business Requirement”, priority always P0, and one date field didn’t control anything at all.
Process
Research: interviews with the Airports team and Tax Ops, and a review of the user doc, the issues doc, SEV 18005 and real failure emails. Design: a competitive scan of change-and-approval tools, iteration in Figma with Price Commander’s existing components, and interactive prototypes for date and time and for ending the fee. Validation: usability sessions with the Airports team on the new UI.
Before and after: tracking a change
The old change request view showed config names, layers, a UUID and three timestamps: requested, scheduled to be processed, actually processed. It gave no plain answer to when do riders start paying?
The redesigned view leads with one plain-language sentence about what riders will pay and when, in the airport’s local time. A stepper shows where the change is: Submitted, Waiting Approval, Scheduled, Live.
The airport page is the hub
Users search for an airport and land on one page that shows the live fee by leg, its status, and exactly three actions: change the fee, schedule future changes, or end the fee.
Changing a fee
Pick-up and drop-off are separate toggles with their own amounts, each showing the current value. One start date and time replaces the three old date fields, and it is always in the airport’s local time. Exceptions by ride type go underneath.
Also designed
Outcome
Engineering received a full Figma handoff, built on Price Commander’s existing components, with edge cases and open questions documented. The new UI is in use by the Airports team.
What’s next: fold the usability findings from the Airports team into the next iteration, extend the same patterns to non-airport taxes with Tax Ops, and support finance’s tax-type field (airport fee, city fee, sales tax) once Price Commander is queryable.