Approach · shipping · in production
Stop Short of Perfection
I focus development effort on the core user journey, shipping functional products with known imperfections outside that path, because over-polishing non-critical features delays market feedback.
Stopping short of perfection means I prioritize shipping a functional, core user experience and intentionally defer polishing non-critical paths, accepting known rough edges to accelerate market feedback.
What it is
This approach is about defining the absolute minimum viable path a user needs to walk to get value, then polishing only that path. Everything else—edge cases, advanced settings, secondary features—is developed to a functional, but not necessarily beautiful or fully optimized, state. I ship with a clear understanding of what's incomplete, rather than waiting for every detail to be pixel-perfect. It's a pragmatic stance against the endless churn of minor refinements that don't move the product forward.
Why I do it this way
I learned the hard way that chasing perfection across an entire product surface leads to delayed launches and wasted effort on features users may not even value. As a solo operator running a multi-product studio with AI as the team, my resources—time, attention, and compute cycles for agents like Claude Code—are finite. This approach allows me to get products like Inky and Total Formula 1 into users' hands faster, gathering real usage data. It enables me to operate with Multiple Revenue Streams, One Back Office by focusing on the core value proposition of each stream without over-engineering shared infrastructure prematurely. The goal is to validate the core idea, not to present a finished masterpiece on day one.
How it works in practice
For Inky, the core path is prompt input, generation, and output display. That flow is polished. The account settings page, while functional, is intentionally minimal. For Pregnancy Power Hour, the critical path is the delivery of the first-trimester guide and the clear presentation of the Lead Magnet → Paid Ladder upsell. The payment flow through Stripe and the email delivery via Resend are robust. However, a comprehensive user dashboard with advanced analytics isn't a priority for the initial launch. I use Vercel for frontend deployments, which allows for rapid iteration. My agentic engineering setup with Claude Code focuses on building the core functionality first, often leaving UI/UX details for later passes or explicit user feedback. If an agent builds a functional component that isn't aesthetically perfect but serves the purpose, I ship it. I can always refine later. This also integrates with how I manage ongoing quality: known imperfections are often tracked and can become targets for future Audits as Crons, ensuring they don't become critical issues.
Where this breaks down
This approach is not an excuse for shipping broken products or neglecting critical security. If the core user path is buggy, insecure, or fundamentally non-functional, it doesn't ship. For Total Formula 1, the data accuracy for race results is non-negotiable; that's part of the core value. Similarly, payment processing through Stripe must be flawless. This strategy applies to areas where functionality is present but could be “nicer” or “more complete.” It's about distinguishing between core functionality and polish, not between working and broken.
FAQs
- How do you decide what's "core" and what's "polish"?
- I define the single most direct path a user takes to achieve the primary value proposition. Everything directly on that path gets attention. Anything off that path, or an enhancement that doesn't fundamentally change the value delivery, is considered polish.
- Doesn't this lead to technical debt?
- It can, but it's *known* technical debt. I track these deferred improvements. The alternative is shipping nothing, or shipping something perfect that no one wants. I prefer to ship, learn, and then address the right debt.
- What if a user complains about an unpolished part?
- That's valuable feedback. If multiple users highlight the same unpolished area, it indicates that it's more critical than I initially assumed, and I'll prioritize addressing it.
I run this and four other brands. Want to see the operator playbook in detail?
Get the Builder's Playbook →