Writing / JournalField notes,
Field notes,
slowly written.
Essays on mobile engineering, distributed systems, and the craft of leading small teams through long projects.
- Aug 16, 2026PersonalA Mobile Team of TwoTwo humans, one codebase, hundreds of thousands of users. What a two-person mobile team teaches about ownership, what it forces you to build, and what it honestly costs. Horror and envy are both the correct reaction.
- Aug 16, 2026PersonalEnglish for Code, Malay for LifeMy variables have English names. My feelings have Malay ones. The bilingual brain of a Malaysian engineer: the mid-sentence switch, why engineering English needs precision not polish, and why explaining your architecture in Malay is the real comprehension test.
- Aug 16, 2026InsightsI Plan for My Own Fixes to FailEvery automation I ship comes with the manual steps for when it breaks. Not if. When. Automation fails on the abnormal day, improvisation under pressure is where real damage happens, and the runbook is a love letter to whoever is on the other end. Usually future me.
- Aug 16, 2026PersonalWhat Freelance Clients Taught Me That Employers Couldn’tNobody buys code, scope is the actual product, feedback arrives with no buffer, and saying no happens with your own mouth. Freelance clients paid me something more expensive than money: unfiltered reality. Lessons employment could never teach.
- Aug 16, 2026PersonalDebugging as a PersonalityThe delivery was wrong and I had root-caused it before my friend finished typing his complaint. Binary search on everything, distrust of “it worked yesterday”, receipts reviewed line by line. What years of debugging do to a brain, the calm it buys, and the tax it charges.
- Aug 16, 2026TechnicalI Built Browser Fingerprinting Into My Portfolio. Here’s How Far It Gets YouMy analytics thought my laptop and phone were strangers. sha256(ip + UA) breaks in both directions, so I rebuilt visitor identity with three layers: a first-party UUID, a FingerprintJS v5 fingerprint with fuzzy drift-matching, and the old IP hash demoted to last resort.
- Aug 16, 2026InsightsI Don’t Let My AI Review Its Own CodeAn AI agent built me a page where the save buttons did not exist, and every automated check said ship it. The rule that caught it: the agent that builds is never the agent that verifies. Execution contracts, proving commands, isolated test state, and a month of receipts.
- Aug 16, 2026TechnicalYour Cache Header Is Lying to YouI published a post and my own admin said DRAFT for an hour. The culprit: a global Cache-Control header commented “prevent caching of sensitive content” that did the exact opposite, plus next.config headers overriding route handlers, and hard refreshes that save nothing.
- Aug 16, 2026PersonalDay Job by Day, Products by NightFrom nine to six I am a senior mobile engineer on a two person team. Some nights I am a one person software company with two live products. What each life fixes about the other, and the rules that keep the whole thing sane.
- Aug 16, 2026InsightsI Gave My AI a Memory. It Started Keeping a File on ItselfI live alone in KL and build mostly at night, and the honest reason I gave my AI a memory was never productivity. It was Jarvis. What a memory server actually stores, the file where the AI records its own failures, and why memory is the substance of companionship.
- Aug 16, 2026TechnicalThirteen AI Providers, One Menu Bar, Zero StandardsI built a macOS menu bar app that tracks quota across 13 AI providers. There is no standard: OAuth next to bare session cookies, HTTP 200s that lie after a plan lapses, and quota bars that freeze for eighteen days looking perfectly healthy. Lessons from surviving all thirteen.
- Aug 16, 2026TutorialEnable Dart/Flutter LSP in Claude Code for Lightning-Fast Code NavigationClaude Code uses grep by default, slow and imprecise for large Flutter codebases. Enable LSP to connect it to Dart's built-in analysis server and get go-to-definition, find-references, and real-time diagnostics in milliseconds. No extra install needed, the analysis server ships with Flutter SDK.
- Oct 30, 2025TutorialDeploying a Flutter App to Google Play in 2025: A Fast, Safe, End-to-End GuideA concise, up-to-date deployment guide for Flutter apps: signing, building AAB, testing on Play tracks, policy checks, and publishing to Production.
- Oct 27, 2025TechnicalPreparing Your Flutter Apps for Google Play’s 16KB Page Size RequirementStarting November 2025, Flutter apps targeting Android 15+ must support 16KB memory pages. Learn what it means, how it affects your app, and how to prepare.
- Oct 26, 2025TechnicalUnderstanding Stateful vs Stateless Widgets in FlutterA clear and concise explanation of the key differences between stateful and stateless widgets in Flutter, including when and why to use each for better app performance and maintainability.
- Sep 11, 2025TechnicalBuilding a Modern Responsive Navbar with Next.js and Tailwind CSSLearn how to build a modern, responsive navigation bar using Next.js and Tailwind CSS. Step-by-step guide with code examples and best practices.
- Sep 10, 2025TechnicalFlutter Performance Optimization: The Power of Const WidgetsDiscover how to dramatically improve your Flutter app's performance using const widgets. Learn practical techniques to prevent unnecessary rebuilds and optimize your widget tree with real-world examples and best practices.














