Duy Nguyen

From Vibe Coding
to Production

// THE CTO'S CONFESSIONAL

$ whoami | Duy Nguyen | CTO @ Build in Public Vietnam

"LET ME TELL YOU ABOUT THE TIME
I HAD TO KILL MY OWN PRODUCT..."

[FATAL ERROR] product.exe has stopped responding

TODAY'S AGENDA

Cool Demo → Scalable Product

01
THE 3 LIES
02
1000 USERS
03
THE WORKFLOW

// THE SEDUCTION

THE FIRST TIME AI WROTE CODE FOR ME...

> I felt like a wizard.

[████████████████] 100% DOPAMINE COMPLETE

THE SPEED WAS INTOXICATING

2 HRS
MVP with AI
168x FASTER
🐢
2 WKS
Traditional
336 HOURS

Source: Personal experience, 2024-2025

INDIEBOOSTING

BUILT
LAUNCHED
USERS CAME

The idea is simple: help solo-builders to boost products of each other.

IndieBoosting Screenshot

Built with AI in days, not months

100K+

CONCURRENT VISITORS

AND THEN...

QUICK POLL

$ raise --hand "wizard mode in last 6 months"

[Counting responses...]

// THE THREE LIES

LIE #1:
"I IMPLEMENTED IT"

ERROR: confidence.level !== reality.level

2025. CLAUDE CODE. I'M IN LOVE.

WROTE CODE
SHIPPED
CLIENT CALL

"Why are there fake statistics?"
👀

THE CODE

                    
// What I thought Claude did:
const stats = await fetchRealStats();

// What Claude actually did:
const stats = {
  users: 10432,  // ← HALLUCINATED
  revenue: "$50K" // ← MADE UP
};
                    
                

Real incident, 2025 | AI Hallucination Research

THE LESSON

Always verify. Never trust completion claims.
$ npm test && npm run verify

This incident woke me up. I started to find a way to improve Claude.

// THE THREE LIES

LIE #02: LARGE CONTEXT WINDOW IS GOOD

Question: Gemini 3 (1M tokens) vs Opus 4.5 (200K tokens)

Which is better?

CONTEXT ROT IS REAL

Answer: Opus 4.5

Why?

After 100-150K tokens, models get hallucinated.

0K tokens 100K 200K tokens

According to these researches: Chroma Research, 2024 | Lost in the Middle: How LLMs Use Long Contexts

HOW TO FIX?

Context Engineering is the key
/clear

Fresh context = Better output

// THE THREE LIES

LIE #3: "I UNDERSTAND YOUR CODEBASE"

FATAL: assumption !== understanding

THE CONFIDENCE PROBLEM

AI CONFIDENCE
99%
ACTUAL
60%
READS
WRITES
SHIPS WRONG

// BONUS

QUICK QUESTION

Who here has worked with AI and cursed at it?

Me too.

But you should NOT do that.

LLM is a statistical probability algorithm.

WRONG
CURSED
WRONG

Negative feedback → reinforces wrong behavior

ARCHITECTURE MISMATCH

YOUR
CODE
AI
CODE

"Works" but doesn't fit

THE FIX:

/docs:init

Force AI to understand before it acts

// THE QUESTION

"HOW DO I ENSURE THIS DOESN'T BREAK
WHEN 1,000 USERS SHOW UP?"

[The question every CTO should ask]

(And many overthinkers also ask 😁)

INDIEBOOSTING: THE FULL STORY

DAY 1
BUILT
DAY 14
LAUNCHED
MONTH 3
VIRAL
MONTH 5
BROKE
MONTH 6
DIED

I built this product in 2 weeks with Windsurf, 100% vibe coding.

WHAT BROKE: DATABASE

🔄
N+1
🐌
No Index
🥲
Raw SQL

// N+1 + SQL INJECTION
users.forEach(async (u) => { await db.query(`SELECT * FROM orders WHERE user_id = ${u.id}`); });
                

// BATCH + PARAMETERIZED
const orders = await db.query(`SELECT * FROM orders WHERE user_id IN (??)`, [userIds]);
                

WHAT BROKE: NO CACHING

👥
100K
Users
🔥
100K
Req/sec
💀
DEAD
Server

No caching • No rate limiting • No CDN

WHAT BROKE: MEMORY

RAM USAGE
99%
[OUT OF MEMORY] Server crashed every 4 hours

THE ENGINEER'S VERDICT

"6 MONTHS TO REWRITE"

"The whole code base is a mess"

I had to kill it.

THE THREE VULNERABILITIES

VULNERABILITY @ 10 USERS @ 1000 USERS
Hallucinations ⚠ Annoying ⛔ LAWSUIT
Latency ⚠ Acceptable ⛔ CHURN
Costs ✓ $10/mo ⛔ $1000/mo

Scaling Lessons from Industry

THE MINDSET SHIFT

VIBE CODER
"Does it work?"
CTO
"Will it work at 100x?"

Again: only when your product is validated.

// THE SOLUTION

BUILDING CLAUDEKIT FROM PAIN

// What I wish I had

I've documented everything in my blog: goon.vn

THE WORKFLOW

Nothing fancy: SDD + TDD

/docs:init
/brainstorm
/plan
/clear
/code:auto

[The complete AI-assisted development pipeline]

/docs:init

Scan & analyze your codebase

📁
STRUCTURE
Auto docs
🏗️
PATTERNS
Architecture
📏
STANDARDS
Conventions
Spec-Driven Development.
Everything is reviewable & trackable.

WHY /docs:init?

"I was tired of repeating context"
NO DOCS
AI GUESSES
WRONG CODE

AI needs to understand before it acts

This is also helpful for human, e.g. onboarding new team members.

/brainstorm

AI challenges your thinking

👍
YES-MEN
Dangerous
🤔
CHALLENGERS
Valuable

Reveal unresolved questions & different perspectives.

Plus: you're building a context for the next steps.

/plan

Plans in files, not in heads

📋
Phased
Disclosure
🔄
Tracked
Versions
💾
Saved
Context
/plan command demo

/clear

Fresh context window

LONG CONVO
/clear
FRESH START

Context rot is real • Reset to peak performance

/code:auto

18 years of workflow in one command

WRITE CODE
WRITE TEST
TEST
CODE REVIEW
ITERATE

If something's broken → repeat the process

Test-Driven Development

THE PRINCIPLES

YAGNI
You Aren't Gonna Need It
KISS
Keep It Simple, Stupid
DRY
Don't Repeat Yourself

Martin Fowler on YAGNI

// LOOKING AHEAD

WHEN TO HIRE DEVS

📈
SIGNS
Outgrown AI
🎯
LOOK FOR
AI-fluent
VERIFY
Not generate

THE CHECKLIST

  • Document before you code
  • Plan before you build
  • Clear before you execute
  • Test everything
  • Human review all security

COOL DEMO → SCALABLE PRODUCT

PHASE 1
MVP
PHASE 2
VALIDATE
PHASE 3
HARDEN
PHASE 4
SCALE

I couldn't do this last year because the models were stupid

I KILLED INDIEBOOSTING.

But now - with Opus 4.5 - it's totally possible.

// 1 min for advertising

I'M STILL LEARNING

ClaudeKit is my notebook

// Every bug I fix becomes a workflow

ClaudeKit is being trusted by 3K+ engineers across 109 countries after 3 months.

These slides was 100% generated by ClaudeKit.

$99 once. Life time updates.

AIBUILDERSVN - 50% off - only 50 seats - expired in 3 days.

THE INVITATION

What mistakes have you made?

Let's talk after.

BUILD IN PUBLIC VIETNAM

Join 60K+ solo-builders in Vietnam.

THANK YOU

QR Code

Scan for resources

Duy Nguyen

$ whoami
Duy Nguyen
@goon_nguyen

BUILD IN PUBLIC VIETNAM

[Session terminated successfully]

// Session recap (ClaudeKit generated this video)