For eight years I shipped production web and mobile software, six of them on a platform with two million users, owning flows end to end from React through GraphQL on NestJS to Kafka. These days the systems I build are agentic ones: tool-using agents allowed to do irreversible things, and the durable execution, approval gates and eval suites that keep that safe. Same engineering, harder failure modes. Alongside the building I kept doing the product work: customer surveys, scope arguments, prioritization, and explaining system behavior to executives who had never written code. That half of it is further down this page.

At VeVe I was never only the person who built things. I was the person who asked why we were building them, whether we were building the right thing, and how to explain the answer to someone who had never written a line of code.
Over six years that stopped being a personality trait and became a standing part of the job. Surveys to find out what users actually wanted. Prioritization sessions where I argued the queue. Scope conversations with leadership, held in their terms rather than mine. PRDs I helped write because the spec needed a technical reality check before anyone committed to a date.
I still want to be the person writing the code. But I'm at my most useful when I also have a say in what gets written, and I read a two-week estimate against a two-month one before anyone has opened an editor. Teams that want both from one hire are the ones I'm looking for.
Shipping was never the whole job. These are five calls I made at VeVe, each with the situation, the reasoning, and what actually happened, including the one that ended badly. Nobody assigned me most of this work. It was the part I kept reaching for, and it is the part I want more of.
The spec called for Crafting to be its own section of the app. Mapped against the store we'd already shipped, the overlap was almost total, and the genuinely new surface came down to two things. I took the architectural argument to leadership as a business one.
Leadership assumed the team was ready for the App Router. One-on-one, most engineers admitted they weren't, and we were days from kickoff. Nobody asked me to fix it. I taught the whole team, PMs and leadership included, because the architecture had product consequences they'd need for scoping.
You could predict how well a team delivered from its communication habits. Nobody owned the problem. I watched quietly for weeks first, then ran working groups picked for willingness to be critical, so the teams felt they'd written it themselves.
Most wallets are built by crypto people for crypto people. Our users arrived for the collectibles and ended up holding a token, so I couldn't assume they knew what a pending state, a rejection or a chain mismatch was. The price of misreading a screen was their own money, permanently.
I found out my role was on a layoff list that was already final. The letter had to do two jobs: argue on the merits that the proposed engineering cuts went further than the strategy required, and make an evidence-based case for six years of my own contributions. Either one alone fails.
"His instincts around product delivery and team health would make him a strong asset in any Product Manager role."
"He always took the time to explain technical things in business language, so everyone could understand and contribute better to discussions."
Before moving into full-time engineering I taught English and core subjects at schools in Taiwan — including one of the country's top-ranked high schools. Math, science, social studies. Often in Mandarin. Gamification and question-driven methods.
I also tutored privately — students from age 6 to working professionals, on everything from English to beginner Python and Raspberry Pi hardware.
The discipline of making complex things genuinely simple for people with no prior context has turned out to be the single most useful thing I do.
I'm looking for remote software engineering roles, ideally ones with agentic or applied-AI work in them, on teams that treat product thinking as part of the job rather than someone else's department. I'm equally open to product or technical PM roles, where eight years of shipping the thing is the background I'd bring to deciding what to ship. UTC+8, flexible overlap with US and EU.