How I think about engineering
Four write-ups, one per discipline, each grounded in software I’ve shipped — including a case where my own metric didn’t hold up.
Write-ups by discipline
Designing resilient frontend architecture
Most frontend bugs I’ve fixed trace back to one of three things: unclear ownership of state, validation in the wrong place, or an abstraction that was shared too early. The architecture work is mostly about preventing those.
Building reliable realtime experiences
Realtime features are easy to demo and hard to keep correct. The work is in what happens when the connection isn’t there — which, on mobile, is often.
Shipping cross-platform mobile software
Writing the screens is the smaller part of mobile work. The larger part is integrations, releases and knowing what happened after a release went out.
Building practical AI features
The useful question is rarely “which model is best?” It is “what is the smallest, cheapest, most predictable thing that solves this task — and how will I know if it works?”
Engineering capabilities
Grouped by discipline, with where each one was used in shipped work.
Frontend
Whistler Web and the SeamHealth blog in Next.js; Whistler Admin and Clientshot Public in React 19; Clientshot in Angular; component libraries used across 3+ internal products.
- React
- Angular
- Next.js
- TypeScript
- JavaScript
- Tailwind CSS
- Redux Toolkit
- TanStack Query
- Zustand
- RxJS
- Component architecture
- Accessibility
- Responsive systems
Backend
The Device Intelligence service in Python and FastAPI; REST API design and integration at SeamHealth; a signed webhook function for Whistler Admin; the Socket.IO realtime client in Whistler.
- Node.js
- Python
- FastAPI
- Express
- REST APIs
- JWT
- RBAC
- PostgreSQL
- MongoDB
- Caching
- Validation
- WebSockets
- SQLAlchemy + Alembic
- Docker
- AWS (ECS, RDS)
Mobile
Whistler: a React Native + Expo app on Google Play with push, deep links, social sign-in and over-the-air releases.
- React Native
- Expo
- Flutter
- Offline-first architecture
- Push notifications
- Deep linking
- Native integrations
- Play Store / App Store deployment
AI / LLM
Two Whistler post classifiers: an on-device fastText model in the app, and sentence embeddings (all-MiniLM-L6-v2, ONNX Runtime Web) in the browser; LLM evaluation and RLHF at SeamHealth — prompt design, rubric-based review, data annotation and human feedback on model responses.
- LLM evaluation
- RLHF
- OpenAI and Anthropic APIs
- Prompt engineering
- Response evaluation
- Data annotation
- RAG fundamentals
- Hallucination detection
- On-device classification (fastText, ONNX Runtime Web)
- AI agents (elizaOS)
- Model behaviour analysis
Engineering practice
GitHub Actions CI, Docker images, Playwright e2e, Vitest, Jest and pytest suites, Sentry, Mixpanel, Firebase Analytics, k6 load tests.
- Git and GitHub
- CI/CD (GitHub Actions)
- Docker
- Testing (Vitest, Jest, Playwright, pytest)
- Cloudflare Workers
- Jira
- Code review
- Documentation
- Agile / Scrum
- Observability
- Product analytics
From requirement to evidence
The same loop on every project, whether it’s a form field or an ML feature.
- 01
Understand
Clarify requirements, constraints, users, data, and the business goal behind the request.
- 02
Architect
Choose boundaries, state ownership, API contracts, data structures and dependencies deliberately.
- 03
Build
Write modular, typed code with abstractions that earn their place.
- 04
Test
Check behaviour with unit, integration and regression tests — including realistic failure cases.
- 05
Ship
Automate builds and releases, and stage them through environments before production.
- 06
Observe
Use crash reporting, logs and analytics to see how the software behaves for real users.
- 07
Improve
Iterate on evidence. Measure before claiming, and say so when something hasn’t been measured.
From code to production
Only tools I’ve used on shipped work are listed.
- 01
Code
Typed code, with pre-commit hooks as the first gate.
TypeScript · Husky + lint-staged
- 02
Pull request
Every change reviewed before merge.
GitHub · Bitbucket
- 03
Tests
Unit and integration tests; end-to-end tests run against a mock API.
Vitest · Jest · Playwright · pytest
- 04
CI
Lint, types, tests, dependency audit and build gate every pull request.
GitHub Actions · Dependabot
- 05
Build
Reproducible web, container and native builds.
Vite · Docker · Gradle · EAS
- 06
Deploy
Staged release channels; JS-only fixes over the air.
Vercel · Cloudflare Workers · EAS Update · Google Play
- 07
Monitor
Crashes, errors and product usage in production.
Sentry · Mixpanel · Firebase Analytics
- 08
Iterate
Load-test risky paths and feed findings into the next change.
k6