I’m a front-end developer who specializes in React and Typescript.

I advocate writing quality code (documentation, automation, and testing), and striving to increase the team’s bus factor.

I am most happy when CI/CD reports failing tests. That means we caught problems before they are deployed. That leads to less user complaints and less man-hours in fixing bugs.

When I slack during work, I like to watch or read about programming principles, or experiment with new technologies or techniques. I believe the leeway to slack in a job allows us to avoid burn-out, and invest in self-improvement.


  • English (native, Malaysian)
  • Japanese (JLPT N2)
  • Mandarin Chinese (basic, conversational)
  • Malay (basic, conversational)

Tech Stack

Front end

  • ReactJS
  • NextJS
  • Typescript
  • Jest, React Testing Library
  • Playwright
  • Webpack
  • Styled-components, SASS, SCSS
  • Ant Design, Material Design, Bootstrap
  • Axios, Apollo GraphQL
  • Auth0, JWT

Back end

  • NestJS
  • Rust
  • Tokio
  • Protobuf (Protocol Buffers)
  • Apollo GraphQL
  • Kotlin, SpringBoot
  • PostgreSQL


  • Docker
  • Github Actions
  • Google Cloud Platform
  • DataDog
  • ArgoCD
  • Lerna monorepo


I worked with these in the past, or recently in hobby projects.

  • C#, .NET / Monogame / Unity3D
  • Haxe
  • Actionscript 2, 3
  • PHP, CodeIgniter
  • VueJS
  • SvelteJS

Career History

CADDi Inc.

2022-04 - Present

Joined as a front-end developer. It was my first time working with fully Japanese-speaking teams. Team members change occasionally due to evolving project milestones. CADDi is still in the “startup” phase (as of writing), as a lot of the front-end code and tooling in their recent project was still premature. The original focus was more on pushing out new features and less about code quality.

I started by removing snapshot tests and replaced them with unit, component, integration and end-to-end tests. I also added Github workflow actions to run the e2e tests which prevents failed builds from being deployed during CI/CD.

Most of my time now involves improving the front-end code base (splitting code smaller files, converting code into pure functions, etc.), as well as meeting the project milestones by adding new features. Occasionally, I contribute to the backend (Rust, NestJS).

I co-founded an internal English podcast in October 2022, as an effort to reach out to non-Japanese developers across teams, and supplement Japanese speakers with their English-learning.

UNIVA Paycast

2019-10 - 2022-03

I joined as a front-end developer. I arrived in Japan right before the Covid-19 outbreak, so I worked remotely for most of the time. Despite being a Japanese company, my department was almost entirely English-speaking foreigners.

The front-end team had full reign of the front-end project, which allowed me to contribute code without much red tape. I was able to introduce React Testing Library and integration tests for most of our app’s pages as an alternative for slower e2e tests written in TestCafe.

I moved to another project in my 2nd year, which allowed me to write Kotlin (SpringBoot framework) for the backend, while still working on the front-end in ReactJS.

Pulse iD

2018-04 - 2019-09

I joined as a front-end developer, using ReactJS. I learned about monorepos, React-related tools and techniques, testing, and programming principles during my time here, from my co-workers who were Wix alumnis.

This was the first international team I worked in. I worked remotely with developers and designers from India, Australia, Israel and Hong Kong. I had planned to work at the company for longer, and expressed my interest in working remotely from Japan. Unfortunately, the cost of living in Japan was too high because I was still paid a Malaysian salary. I decided to seek employment within Japan and migrate officially.

Experian Malaysia

2016-09 - 2018-04

I joined as a C## software engineer. I’m going to be honest here, it was a rather miserable experience.

Some of the seniors were difficult to work with. There was a lot of red tape. The documentations were lacking. There was no proper on-boarding or peer learning. There were team and knowledge silos across the department. I was unable to contribute effectively. I figured to do something about my situation since I was obviously a deadweight in the team.

Fortunately, my manager moved me into a team which tried to pioneer using open-source frameworks, which resulted in me picking up ReactJS, and ultimately excelling in it. However, the project was short-lived. I was moved to another team where I worked on tasks I was not interested in. I managed to find a new company shortly after that.

Self Employed / Freelance

2014-03 - 2016-08

Partly inspired by Piktochart’s co-founders, I left the company and tried to start my own company. I started doing freelance and developed my own games using Unity3D and Haxe. I applied for government grants while I worked without a steady income.

I made a few mobile and web games, but couldn’t monetize them. I realized that I was better off as a developer rather than a business person. I decided to seek employment as my savings were running out.


2010-11 - 2014-02

I joined as a front-end developer when the company was a startup. I wrote in Actionscript 3 originally, then quickly transitioned to HTML5 as the technology was starting to gain exposure.

I used jQuery, and at one time, wrote my own internal framework using my own name as the framework’s namespace.

The last I remember of a conversation I had with my ex-coworkers, they joked about how some of the legacy code with my name in it was unprofessional. It was funny! I was young and foolish. Hindsight is always 20/20.

Syabas Technology (Penang)

2009-11 - 2010-11

I joined as an Actionscript 2 developer. I wrote apps for our in-house media boxes, somewhat similar to Apple TVs.

The company had a bad financial situation one year after I was hired. I was one of the 50% of employees they had to retrench.