Learnings from Building Apps Using AI Tooling

1. Experiment with AI dev environments to find what works best for you.

I tried Google AI Studio, Lovable, Replit, and Cursor. I ultimately decided that Cursor & Codex were the best AI dev environments for hands-on development, ChatGPT Pro worked best as my product management and systems-thinking tool, GitHub for source control, and Vercel for app hosting and analytics. Assigning clear roles to each tool made the overall workflow much more effective.

2. Treat every prompt as a contract, not a command.

For each prompt I provide to an AI dev tool, I now enforce a rule: the AI must explain back what it thinks I asked for, ask clarifying questions, and propose recommendations with pros and cons before writing code. Without these guardrails, AI tools will happily generate code that doesn't do what you intended—or worse, break functionality that was already working.

3. Do not rely on AI tools for safe code reverts.

Code reverts using AI tooling do not always work well. I had instances where the dev tool did not check in with me to understand what I wanted to accomplish, then wrote code that broke the app and could not reliably back the changes out—each revert sometimes made things worse. Having clean, known-good checkpoints in GitHub that I could revert to manually saved me multiple times.

4. Understand the risks of automatic deployments.

Once Vercel is wired to GitHub, every commit automatically triggers a build and deployment. This is powerful but risky if your app is already in production. It forces you to think about preview deployments, branch discipline, or pausing auto-deploys for riskier changes so you don't accidentally ship broken code to users.

5. Vibe coding doesn't eliminate testing or debugging.

It's called vibe coding, but nobody is calling it vibe testing or vibe debugging. Testing and debugging are still hard. Expect to spend significant hands-on time running your app, finding bugs, clearly describing them to the AI tool, and validating whether a proposed fix actually works.

6. Cross-device and cross-browser behavior still requires manual testing.

Getting an app to run correctly across devices and browsers is challenging. For example, my apps targeted Safari and Chrome on both Mac and iPhone, yet behavior differed across each environment. AI tooling doesn't remove the need for real-device testing—in fact, it makes it more important because you can move faster into broken states on different devices.

7. Separate product thinking from code development and execution using different AI tools.

I use ChatGPT Pro for product research, product planning, and PRD development. Once the product ideas are in a solid draft state, I upload them into Cursor to get refinements before writing code. Using two AI tools with different strengths gives me non-overlapping perspectives, which improves the quality of my product decisions.

8. Instrument heavily and use multiple AIs for diagnostics.

I instrument apps heavily during development. Diagnostic logs become invaluable for debugging, performance tuning, and optimization. I share logs with both Cursor and ChatGPT to get independent analysis, identify potential issues, and receive recommendations on improving performance. Taking this multi-AI approach helped me produce better app outcomes.