The most dangerous thing about building with AI isn’t that it gets things wrong. It’s that it gets things right—but in the most average way possible.
AI-generated code works. It’s often well-structured. It follows patterns. But it almost never has an opinion. And software without opinions is software no one cares about.
What AI mediocrity looks like
Here’s a pattern I see constantly: a developer asks an AI to build a feature. The AI returns a perfectly functional implementation. It handles errors. It validates inputs. It uses sensible variable names. And it’s completely forgettable.
The API endpoint works but exposes five fields when your users only need two. The form validates everything but guides no one. The dashboard displays data but tells no story.
This isn’t the AI’s fault. The AI doesn’t know what your users actually do. It doesn’t know what frustrates them, what delights them, or what they’re trying to accomplish. It only knows patterns.
Why taste matters more than correctness
Correct software is table stakes. Taste is what makes software memorable.
Taste is:
- Knowing what to leave out. The AI will suggest features because it can, not because they should exist.
- Having a point of view about your user’s workflow. Should this be one step or three? The AI defaults to the most common pattern. You might know your users need something else.
- Caring about the details. Error messages, empty states, loading animations—the AI generates functional versions. You need to decide if they’re right for your product.
How I maintain taste while using AI
1. I write the parts that matter by hand
When a feature defines the product—the core interaction, the key workflow, the moment where a user decides if your software is worth using—I write it myself.
Not because the AI can’t. Because the AI can’t have an opinion about what that moment should feel like.
2. I read the AI’s output like an editor, not a consumer
Most people accept AI suggestions and move on. I read them critically:
- Does this match how I talk about the product?
- Would I be proud to show this to a user?
- Is this the simplest version, or the most complete version?
The AI defaults to completeness. I usually want simplicity.
3. I keep a “product principles” document
I maintain a short list of what my product believes. For TenderIQ, it’s something like:
- Users should never wonder what to do next
- Every action should have immediate feedback
- Data is only useful in context
- Speed beats features
When the AI generates something that violates these, I rewrite it—even if it works fine.
4. I study software I admire
Taste is trained, not innate. I spend time with software that has strong opinions:
- Linear for project management clarity
- Figma for tool design
- Stripe for documentation
- Apple for restraint
I ask: what would this product do? Then I make my AI-assisted code move in that direction.
The specific traps
The “just add it” trap
AI makes adding features trivial. So you add them. The AI suggests a settings panel, you add a settings panel. It suggests bulk actions, you add bulk actions. Six months later you have a product that does everything and delights no one.
My rule: every feature needs a user story that isn’t “someone might want this.”
The “industry standard” trap
The AI loves industry standards. OAuth2 flow. JWT tokens. Role-based access control. These are fine defaults. But defaults aren’t always right.
For TenderIQ, I skipped traditional RBAC. Most users are solo operators or tiny teams. They don’t need roles. They need clarity. The AI kept suggesting role-based permission systems. I kept deleting them.
The “professional looking” trap
AI-generated UI tends toward generic “professional.” Clean. Grey. Lots of whitespace. Bootstrap-core.
Professional is fine. But it’s not memorable. Your product should look like it belongs to someone, not like it belongs to everyone.
When to override the AI
I override the AI when:
- User experience is at stake. How it feels matters more than how it works.
- The domain has specific conventions. Legal software works differently than social software.
- Speed matters. The AI often generates the flexible, configurable, extensible version. I usually need the fast, simple version.
- The code defines the product. Core algorithms, key business logic, anything that would make a user say “this is different.”
The payoff
Software with taste is harder to build. It takes longer. It requires more decisions. But it’s the only kind people remember.
The AI can get you to “works.” Only you can get to “this is how it should work.”