Painting of a beach in late morning light

I build the plumbing enterprise AI runs on

Software engineer at NCS in Singapore. Retrieval pipelines, agent tooling, and the backend work that decides whether any of it survives contact with real users.

See the work
Open to conversations about production AI.
Places that taught me something

Six years from simulation coursework to production AI, most of it in Singapore.

One engineer, the whole path from prompt to production

Most AI projects don't fail at the model. They fail at retrieval quality, evaluation, and the boring integration work nobody scoped. That's the part I do.

CurrentlyNCS Group · since Jun 2024
Rebuild chunking + reranking for an enterprise assistantshippedPython
Ground a healthcare knowledge tool in cited source documentsshippedLangChain
Wire tool-calling agents to internal APIs, with approval gatesin progressFastAPI
Regression suite so a prompt change can't quietly break answersin progressAzure
Ship the interface the whole thing is judged byshippedReact · TS
Ask me to walk through any of these in detail…

Backend first

Python and C# services that hold up under load, with the schemas and tests to prove it.

Retrieval you can measure

If I can't show you the citation and the eval score behind an answer, it isn't finished.

Humans keep the keys

Agents draft and propose. Anything consequential waits for a person to approve it.

How I got here, in four chapters

Read them in order — each one is the reason the next made sense.

Chapter I

Enlist

Singapore Armed Forces2018 — 2020
Chapter II

Learn

SIT · DigiPen2020 — 2024
Chapter III

Build

Accenture · NCS2023 — now
Chapter IV

Scale

Georgia Tech · AI Singapore2025 — 2026

Three things I shipped and what they cost

Client details stay vague on purpose. The engineering doesn't.

An enterprise assistant people actually trusted

A retrieval-augmented assistant over years of internal documents. The first version answered fluently and wrongly. Fixing that meant better chunking, a reranking pass, and refusing to answer when retrieval came back thin.

Role
Backend and retrieval engineering
System
Chunking → retrieval → reranking → grounded answer
Guardrail
Citations and abstention when retrieval comes back thin
Stack
Python · LangChain · Azure OpenAI
Discuss why reranking mattered ↗
Assistant · grounded answer
What's our retention policy for archived project files?
Archived project files are held for seven years from project close, then reviewed before disposal. Two policies apply — the second one supersedes the 2019 version.
records-policy-2023 · §4.2it-retention · §7
And for contractor files?
I don't have a source that covers contractors specifically. I'd rather say so than guess — the closest document is §4.2 above.

Evaluation that turns opinion into a number

Every prompt change used to be a debate. Now it's a run. A graded question set, retrieval hit-rate, and citation accuracy, checked on every merge — so a change that helps one answer and breaks four never reaches anyone.

Role
Evaluation tooling and API integration
System
240 graded questions → CI run → regression gate
Signals
Citation accuracy, hit-rate, unsupported answers, latency
Stack
FastAPI · pytest · Azure Pipelines
Discuss how the eval set was built ↗
Eval run · build #182
Answers with a correct citation
0%
Graded questions
240
Retrieval hit-rate
+1488%
Answered without a source
−92%
Median latency
1.8 s
Regressions blocked
6

Before the AI work, real-time systems

My degree was in real-time interactive simulation — C++, frame budgets, and code that has 16 milliseconds to be correct. Two years as a teaching assistant at DigiPen made me explain all of it out loud, which is still the fastest way I know to find what I don't understand.

Role
Simulation engineering and teaching
Constraint
16.6 ms frame budget at 60 fps
Transfer
Performance budgets, reproducible debugging, clear explanations
Stack
C++ · C# · .NET · React
Discuss what real-time systems taught me ↗
Frame budget · 60 fps target
SimulationPhysicsRenderPresent
frame 1frame 60
Budget per frame
16.6 ms
Worst frame
−3.114.2 ms

Things I reach for

The working stack behind the projects, grouped by where it earns its keep.

Backend

Python, FastAPI, C#, .NET, REST APIs, schemas, and service-level testing.

Retrieval & agents

LangChain, Azure OpenAI, RAG, chunking, reranking, tool calling, and approval gates.

Quality & delivery

pytest, graded eval sets, citation checks, regression gates, and Azure Pipelines.

Systems & interface

C++, React, TypeScript, real-time simulation, profiling, and performance budgets.

The wider toolbox