Skip to the CV

Kia ora,

AI-led code. Engineer-led AI.

Bonsung Koo

AI Led Software Engineer

Hire
How this section was built

Hero

  1. Spec “Hero copy, a play on the role's title.”

  2. Plan Task 3, with the Hire button writes to developer@bonsung.me named first

  3. Built and reviewed The review found a contrast test that checked an empty list, so it could never fail. The list and the test were removed.

  4. Judgement call The icon is built once with the site, since the static export refuses an icon made on request.

  5. Checks and merge Pull request #2, five checks passed, merged by me.

  6. Final review It found no name on the first screen. The name now sits above the role line.

  7. Lesson Tests that could not fail

Introduction

A Senior Software Engineer building software professionally since 2016, from an international reference implementation of an image standard to an app used by 300,000 people across 15 countries. I was a lead engineer for three years, and more recently I have engineered a full web product, from its React front end to its .NET backend on Azure. I now develop with coding agents, in an environment I built for them.

How this section was built

Introduction

  1. Spec “the CV summary, in his own first-person words”

  2. Plan Task 4, with the introduction is the CV summary named first

  3. Built and reviewed The review found a shortened introduction would still pass. Its length is now checked against the PDF.

  4. Judgement call None needed.

  5. Checks and merge Pull request #3, five checks passed, merged by me.

  6. Final review It found step 4 described a rule, not a decision. It now says None needed.

  7. Lesson A CV check that passed cut and added text

Key Strengths & Achievements

  • Agentic AI Engineering: Built the environment our coding agents develop in, where each repository carries its own instructions for them and work starts from a written specification rather than a prompt. Production work ships through it every day, and Sentinel extends the same approach. Tools include Claude Code, Codex and GitHub Copilot.
  • Validating Agent-Written Code: Tests, the build and lint decide which code ships, whoever wrote it, and agents read current documentation through MCP servers so their code matches the versions in use.
  • Web, .NET and Integrations: React and TypeScript, a C# .NET REST API on Azure SQL, and integrations with Azure OpenAI, Stripe payments and GitHub App webhooks.
  • Delivery & Testing: A company's first CI/CD pipeline, cutting release time from 2 hours to 20 minutes, and its first automated testing strategy, taking coverage from 0% to 30%.
  • Ownership & Leadership: Working closely with the CEO and CTO on a full product today, turning their requirements into features, and before that leading three software engineers and developing a junior engineer who reached intermediate within two years.
How this section was built

Key Strengths & Achievements

  1. Spec “the CV's five strengths, which hold the claims about agent-driven work”

  2. Plan Task 4, with every key strength is the CV's text named first

  3. Built and reviewed The review found the last strength could be cut short and still pass. Each section's length now has to match the PDF.

  4. Judgement call None needed.

  5. Checks and merge Pull request #3, five checks passed, merged by me.

  6. Final review It found step 4 described a decision that was never made. It now says None needed.

  7. Lesson A CV check that passed cut and added text

Work Experience

airie | Wellington, New Zealand

Senior Software Engineer | July 2025 - Present (part-time to December 2025, full-time since)

  • Engineered a customer-facing web platform for immigrants with React, TypeScript and Vite, then took on its .NET backend and built its design system and the Figma workflow around it.
  • Built the agent-operated development environment that production work ships through every day, with per-repository agent instructions, a specification-first workflow, and a categorised knowledge base that makes previously solved problems retrievable.
  • Moved Azure OpenAI access from API keys to Entra ID managed identities, and rebuilt Supabase's row-level permissions as role-based access control in the API.
  • Designed and executed a multi-phase migration of the entire product onto Azure, retiring its Supabase data layer, API and front-end integration in staged releases while the product stayed live.
  • Set up unit, component and integration tests, including end-to-end tests that run against a real database and API, with Vitest, React Testing Library, Playwright and xUnit.
  • Defined the Azure infrastructure for a background notification service as code in Bicep, and deploy the product through GitHub Actions to separate development, staging and production environments.
  • Mentored an intern developer through an 8-week programme that ended with a production-ready feature they shipped themselves.

Shopl and Company | Seoul, South Korea

Lead & Senior iOS Engineer | August 2021 - June 2024

  • Engineered and scaled a native iOS app (Shopl) for shift and task management, serving 300,000+ employees in 60,000 workplaces across 15 countries.
  • Introduced Modular and Clean Architecture to the codebase, making builds 7.5 times faster, and led the migration of a critical legacy system everyone considered untouchable, retiring it completely.
  • Built client-specific features sold under their own contracts, including the roster changes a new labour law required, live before the law took effect.
  • Built the company's first CI/CD pipeline with GitHub Actions and its first automated test suite, moving QA from monthly to weekly cycles.
  • Built and led a team of three software engineers in two-week Agile sprints, ran code reviews with them, mentored two engineers, and co-authored the team's iOS coding standards.
  • Represented engineering in weekly leadership meetings, showing the expected outcomes of technical improvements with data so non-technical stakeholders could weigh the trade-offs.

PJ FACTORY | Seoul, South Korea

Intermediate iOS Engineer (October 2018 - June 2021)

Junior iOS Engineer (October 2016 - September 2018)

  • Developed an iOS app (Detail) to create and manipulate images in the new DTL (JLINK / JPEG Systems Part 7) format, serving as the official reference software for the standard.
How this section was built

Work Experience

  1. Spec “airie, Shopl and Company, PJ FACTORY, with the CV's job titles and dates”

  2. Plan Task 4, with every experience line is the CV's text named first

  3. Built and reviewed The review found a bullet cut in half would still pass. The check now also measures each section against the PDF.

  4. Judgement call The PDF lists some job headings after Education, so Work Experience, Selected Projects and Education are measured together.

  5. Checks and merge Pull request #3, five checks passed, merged by me.

  6. Final review It added an unmarked sentence here and every test still passed. Each section's whole text is now compared with the PDF.

  7. Lesson A CV check that passed cut and added text

Selected Projects

Sentinel | usesentinel.tools | npmjs.com/package/sentinel-mcp

AI-powered GitHub issue fixer, issues in and pull requests out (2026)

  • Designed and built the whole system solo in TypeScript. A Cloudflare Worker receives GitHub App webhooks and relays them through a Durable Object to a local MCP server running inside Claude Code, which spawns headless Claude sessions to investigate issues, implement fixes and open pull requests.
  • Built to run unattended, which meant scoping each task narrowly enough for a session to finish it without supervision, and handling the failures rather than watching for them.
  • Test-driven by rule, with no production code written before a failing test and every bug fix shipping alongside the regression test that catches it.
How this section was built

Selected Projects

  1. Spec “Sentinel, with its two public links”

  2. Plan Task 4, with every project line is the CV's text and every external link is on the allowed list

  3. Built and reviewed The review noted its links are checked against the allowed list, not against their link text.

  4. Judgement call None needed.

  5. Checks and merge Pull request #3, five checks passed, merged by me.

  6. Final review It found step 3 made the review sound fuller than it was. It now says what the review noted.

  7. Lesson A CV check that passed cut and added text

Education

Master of Information Technology

Whitireia and WelTec, Wellington, New Zealand | July 2024 - October 2025

Bachelor of Engineering in Computer Science

University of Suwon, South Korea | March 2006 - February 2015

How this section was built

Education

  1. Spec “The text of sections 2 to 6 is the CV's text.”

  2. Plan Task 4, with every education line is the CV's text named first

  3. Built and reviewed The review found a dropped entry would still pass. The number of lines is now counted too.

  4. Judgement call None needed.

  5. Checks and merge Pull request #3, five checks passed, merged by me.

  6. Final review Nothing for this section.

  7. Lesson A CV check that passed cut and added text

How this page was built

How I work with coding agents, shown on the page you are reading.

Before every session

Keep the rules in the repository.

Hooks stop the agents committing or pushing to main, and merging.

The agent hook

“Agents never merge pull requests. Bonsung merges.”

Read the rules

  1. Agree the spec first.

    I talk each change through with the agent until we agree a written spec.

    From AGENTS.md

    “A change to what the page does starts as a change to docs/spec.md.”

    Read the spec

  2. Plan small tasks, with their tests.

    Each task names its tests before any code exists, and Context7 keeps the plan on current library documentation.

    From the plan

    “every experience line is the CV's text”

    Read the plan

  3. One agent builds, another reviews.

    A fresh agent checks each task against the spec.

    From a review

    A review found the CV check would still pass a bullet cut in half. Each section is now also checked against the PDF's length, and deliberate cuts fail.

  4. Write down judgement calls.

    Each one records what was decided, why, and what it costs if wrong.

    From the decision log

    White on teal reaches about 5.5 to 1, so every colour pair meets the stricter contrast rule and no exception for large text was kept.

  5. Checks decide, and I merge.

    Every pull request passes checks that give the same answer every time, and only I merge into main.

    On every pull request

    Build, test, lint, typecheck, history

  6. Review the whole at the end.

    A more capable model reviews the finished site at once.

    From the final review

    It found a card describing a judgement call that was never made. That step now says None needed.

  7. Write down what was learnt.

    Compound Engineering writes the lessons from solved problems into docs/solutions/, where the agents look when they plan.

    From docs/solutions

    Tests that could not fail

    Read the lessons