Software engineer in Bangkok, currently at CJ Express. Long background in mobile, now working across backend, infrastructure, and data engineering as well — breadth on purpose, since the interesting problems rarely stay on one side of a boundary.
Most of my work comes back to the same few fundamentals:
Design. Decide what a piece of software is responsible for before deciding how it's built.
Boundaries. Explicit contracts at the edges, dependencies pointing inward. The test of a good boundary is whether you can replace what's behind it without a rewrite.
Correctness. Tests as design feedback, not a coverage number. If something is hard to test, that's information about the design.
Simplicity. Fewer moving parts, boring failure modes, code that reads the way it runs. Cheap to change in year two beats clever in week one.




