Nghia completed a 3 month internship as a Software Engineer from November 2025 to January 2026. During his time here, he made significant contributions to RouteVN.
He was asked to write a reflection on his internship experience so that it can be helpful for future interns considering the position.
When I started my 3-month internship at RouteVN, I pictured shipping features users would touch. I imagined building sleek UI components or working on things my friends might see. Instead, I spent most of my time working on libraries to help with the team development. Turns out, that's exactly what I needed.
So what did I actually do?
route-graphics is a PixiJS-based rendering engine for visual novels. It handles characters, backgrounds, transitions, text revealing, sprite animations, dragging elements, all the visual pieces that make a visual novel work. It's designed around pure functions and a stateless event system to minimize bugs.
This was the work I was proud of. But getting there meant stumbling through communication issues, misunderstood requirements, and weeks of feeling like I was playing catch-up.
The pattern kept repeating: I'd get a task, think I understood what was needed, and start coding. Days later, I'd realize I'd built the wrong thing.
I had this bad habit of getting stuck and just staring at the screen, waiting for clarity to strike. Sometimes I'd wait hours until our next 1-on-1 instead of reaching out sooner. The blockers piled up. Progress slowed.
The feedback was consistent:
It took months, but I started absorbing these lessons. Not perfectly, Week 11 still had a miscommunication about a high-level presentation. But gradually, the gap between what was asked and what I delivered started shrinking.
One thing that clicked during the internship: how to actually use AI effectively.
I used the early weeks letting Claude write too much unnecessary code, big PRs I couldn't fully explain. Gradually I shifted: using it to explain unfamiliar code, generate boilerplate, explore options.
But the real insight? The AI paradox. AI is great for prototypes and repetitive work. But the more we automate, the more we need humans reviewing and checking the output. Someone needs to judge whether the code is actually good, whether it fits the system, whether it's solving the right problem.
That means I still need to write code by hand. I need the deep understanding to know when AI is helping versus when it's hallucinating unnecessary complexity. The tool isn't a replacement, it's a lever you pull with judgment.
The struggles were real, but so was the growth.
I walked in knowing basic JavaScript. I walked out having built a PixiJS rendering engine, implemented screenshot testing across browsers, debugged canvas rendering issues, and learned functional programming patterns. The code I wrote is still running in production.
The mentorship was direct and honest. No sugarcoating, when I shipped broken code or misunderstood requirements, I heard about it. But that feedback was specific, actionable, and delivered with the intent to help me improve. I learned more from three months of blunt feedback than years of polite encouragement.
If I could start over knowing what I know now:
Smaller PRs from day one. My tendency was to bundle everything into one big change. Slower validation, everything blocked until review. Small, frequent PRs would have given me faster feedback and less deadlock.
Repeat requirements back. Before writing a single line: "So the goal is X, and we need Y to happen, is that right?" Five minutes of clarification saves days of misdirected work.
Ask for help sooner. Set a deadline. If I can't figure it out in an hour, switch tasks or ask, don't stare at the screen waiting for clarity to strike.
Propose UX designs before coding. Several times I built things only to realize the UX wasn't what was intended. A quick sketch or discussion upfront would have saved implementation time.
Pick a recommendation. When researching solutions, don't just list options. Pick the best one, explain why, and invite critique. That's how you move conversations forward.
This internship isn't for everyone. If you want handholding and vague praise, look elsewhere. The feedback here is blunt, the expectations are real, and you'll be expected to figure things out.
But if you're someone who wants to grow fast, someone who's okay with stumbling as long as you're learning, this is the place. You'll write production code, work with modern tools, and get better in three months than most people do in a year.
Would I do it again? Absolutely. The growth was real, the work was meaningful, and the skills I gained will stick with me. Just come prepared to ask questions, ship small, and embrace the invisible work.
That was my internship.