I’ve come a long way since I first played with GenAI – back when it was just ChatGPT helping me whip up small Python scripts.

There were plenty of false starts. Remember Devin? Tons of hype, not much delivery. Early results felt like slop. Expectations ran wild, and a lot of folks got frustrated fast because they didn’t know how to guide it right.

But these last six months? Things shifted. I’ve built real, production-ready software using GenAI. No more just prototypes or toys.

This approach works for me. It’s disciplined, not some loose “vibe-coding.” Take what helps you, tweak it, build on it. Let’s push this forward together.

You won’t be shocked: it boils down to solid software engineering practices.

You step into the orchestrator role. AI becomes your team of engineers, product managers, even project leads. You set the vision and guide them.

Here’s how it goes in practice:

Start with a plain English doc. Spell out the problem you’re solving, constraints, requirements – functional and non-functional – and who your users are.

Then brainstorm with the AI. Give it a clear persona, like “act as a senior product manager.”

Once ideas solidify, have it draft an MVP.

Tweak that MVP until it feels right. Document it cleanly in Markdown.

Let the AI implement it.

Get it to write solid documentation for the app.

Next, generate an AGENTS.md file tailored to the codebase. This is gold: it’s instructions for future AI sessions on the project.

Set up pre-commit hooks. Your docs and AGENTS.md make it easy for the AI to suggest the right ones.

Back to brainstorming for the next feature. Repeat.

Every few features, check docs for drift and update if needed. A good AGENTS.md keeps this rare.

Every couple hours, run stricter static analysis beyond pre-commits. This is where you hand-hold the AI most. Tell it exactly what to fix. Refactor hard and often. AI code gets tangled quick without cleanup.

Keep cycling until it’s done.

It’s like being a staff engineer leading a team of eager juniors.

A few tips that changed the game for me:

Always use Git. Commit often. AI handles merges and conflicts better than I ever did.

Don’t let context rot. Finish a goal, start a fresh chat.

Stuck or arguing? Kill the conversation. New one, maybe switch models.

Stay on top of new models and features. Releases fly out at breakneck speed now. Prices swing too.

Master your language and framework tools – linters, static analyzers, dead code detectors.

Direct the AI to code with TDD. Full Red-Green-Refactor cycle.

Bug hits? First, have it write tests that reproduce it. Then fix, ensuring no regression.

Craft sharp prompts. Detail requirements, style, edge cases, best practices.

One trick I love for personal projects: throw the MVP spec at several models – Grok, Gemini, Claude Sonnet, DeepSeek. Then feed all outputs to a strong one (like Claude Opus). Ask it to critique, pull the best ideas from each, and rebuild from scratch.

That fresh implementation often nails a rock-solid start.

The other week, I needed a quick backend for a side idea that hit me late at night. Opened a new chat, guided the AI step by step, and had it running clean by morning. Felt like having a pair programmer on call.

Above all, stay critical. Review every line before commit. Run it yourself. Test edges. Check security.

AI speeds you up massively. But you own the design and architecture. You’re the lead. It executes your vision in code.

You can just do things – properly.