Vibe coding is not the problem. Vibe architecture is.
AI made code cheaper. It also made bad architectural decisions cheaper to produce. The answer is not less AI; it is explicit ownership, constraints and verification.
Two different ideas are often bundled under vibe coding. One is using natural language to turn an idea into working software quickly. The other is accepting every technical decision produced by the model as architecture. I am comfortable with the first and deeply skeptical of the second.
Vibe coding is a speed technique. Vibe architecture is the disappearance of decision ownership.
Architecture is about coherent decisions, not clean files
AI can generate perfectly valid TypeScript and still create the wrong system. Architecture quality emerges from consistent decisions about ownership, boundaries, data and failure modes.
type ArchitectureDecision = { owner: 'human'; reason: string; constraints: string[]; sourceOfTruth: string;};The warning signs
- The same data has several competing sources of truth.
- Every bug creates a new provider, hook or abstraction.
- UI components make infrastructure and sync decisions directly.
- The agent decides what 'done' means after the work is finished.
- A prototype quietly becomes production architecture without a review point.
My constraint model
const agentContract = { goal: 'specific outcome', preserve: ['current design', 'canonical data flow', 'existing routes'], forbidden: ['parallel architecture', 'unnecessary dependencies'], acceptance: ['typecheck', 'build', 'runtime verification'],};I do not try to slow AI down. I put its speed inside explicit architectural boundaries. That keeps the leverage while preserving a system a human can still explain and own.
The valuable skill is increasingly not writing more code, but knowing which code should never be written.
Building Products with AI
From vibe coding and agent orchestration to production Lovable workflows and real AI integration: keeping product and architecture control while moving faster.