Product Strategy & Requirements
Working out what to build
Turning what the business wants into something a developer can build, and saying out loud what is not worth building.
Selected work demonstrating this service.
- Led the software development of a GIS map application, driving revenue growth by 10x and positioning the product as a primary data asset.
- Optimized forecasting and investment strategies for 11 electricity grid operators, driving operational efficiency through data‑driven GIS solutions.
- Presented 200 UI/UX improvements for the GIS map application, boosting revenue by 10x through enhanced software features.
- Developed a Data Analytics reporting system, increasing quarterly software revenue by 400% through Python‑based PDF reports.
- Designed the product's UI and UX end to end — directory grids, dual card/table views, live requirement validators and breadcrumb navigation.
- Built the payments and entitlements layer — Stripe alongside Apple and Google in‑app purchase — gating the directory, search and export through an 11‑table access model checked on the server.
- Built the operator back‑office — around 40 admin routes and 128 components covering claims, moderation, feature flags, cache and diagnostics — so the platform can be run without database access.
- Built company ownership claims end to end — a user claims a company, an administrator adjudicates, and an approval rewrites the authorization graph that decides who is allowed to edit what.
- Built the loyalty and reputation system — 67 functions over a 31‑table ledger, with leagues, badges and a redemption shop — taking a row lock on the balance to close the double‑spend window.
- Built the platform's social layer — posts, feed, groups, mentions, a follower graph and an occasions digest — on the same function‑first data layer as the rest of the product.
- Built the hiring marketplace and the seafarer career workspace — 151 stored functions across 48 tables — covering vacancies, applications, certificates, rank progression and verified sea time.
- Rewrote the application's error messages against a written tone standard after a refused sign‑in blamed the user for mistyping when the provider actually required an app‑specific password, and covered it with a test that names the provider.