Hey there đź‘‹, welcome to this week’s newsletter! This is Joshua, I write actionable insights on product engineering, app development, and lessons from startups and big tech, in 5 mins or less.

Have you vibe coded yet? Modern tools like Cursor and V0 are accelerating product development from idea to prototype. While LLMs make it easier to generate code, remember that AI-generated code isn’t always production-ready.

There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.
@karpathy on Twitter

People call this new way of writing code as “vibe coding”. You provide the product requirements to tools like Cursor and V0 through prompting and get a working prototype right away.

However, it’s not always as simple as it sounds. By just doing vibe coding, people tend to over-rely on generated code which can lead to neglecting crucial steps like thorough testing, security considerations, and comprehensive monitoring.

Launching an app solely through vibe coding without proper testing carries significant risk. For example, leojr94’s “guys, i’m under attack” post illustrated the danger of exposed API keys. To help you avoid similar pitfalls, here are two practical tips for your next project.

Don’t skip the fundamentals

Consistently learn fundamental concepts when it comes to product or app development. Vibe coding alone is a common pitfall in the pursuit of rapid product engineering. This can include skipping proper planning and design, ignoring code maintainability and readability, avoiding security and performance optimization.

Vibe coding helps you get started. But, the fundamental concepts you know will take you even further by being able to maximize the development tools with AI.

Understand what code changes go in and out of your code—don’t skip proper code reviews. At first, vibe coding helps you focus on building and validating the product while getting rid of the mundane code and repetitive tasks in the way. However, aim to have most of the context of what goes in and out of your code. Later, it can help you debug your code, lessen the chance of refactoring and fix issues quickly for your customers.

Fail and improve incrementally

Focus on writing maintainable code, not just a “working” product. While vibe coding facilitates rapid initial launches, prioritize testing and validation to secure customer trust. Iterate quickly, gather tester feedback, monitor operational costs, and improve incrementally.

If you want to move fast, ship in iterations. Get feedback from your testers and monitor the cost to operate your product. Then, fail and improve incrementally.

Recently, an influx of new users in one of my projects caused a spike in redundant 3rd-party API calls. Because I understood the code, I quickly reduced requests by up to 90% by implementing client-side rate limiting/throttling and caching.

Have you tried vibe coding yet, what were your favorite features of Cursor and V0? Share your vibe coding experiences in the comments below!


Originally published at joshuamdeguzman.substack.com on April 13, 2025.