We were forty-five minutes into a dev standup call when someone said something that I haven't been able to stop thinking about.
The team was walking me through the backlog. API keys had been rotated. AWS credits were being reconciled. A fallback OCR scraper was being architected for edge cases. Documentation was being drafted so another developer could get up to speed. The UI had outstanding fixes that had been outstanding for two and a half weeks. Streaming wasn't live yet. The chatbot wasn't deployed. Not a single paying customer had touched the product.
And I said it out loud: We're messing with the menus. Nobody's even hit play.
The call kept moving. But that line stuck with me, because it describes something I see constantly - not just in this team, but in almost every early-stage product I've ever worked on or watched fail. Teams that build internal sophistication at a rate that has absolutely no relationship to whether external humans would pay for the thing they're building.
This post is about that gap. And why closing it requires understanding what menu-messing actually is at a psychological level.
What Menu-Messing Looks Like in Practice
On this particular call, the issues being worked on were real. I'm not saying they were fake work. Exposed API keys are a security problem. AWS cost spikes need investigation. Documentation helps junior developers ship without breaking things. These aren't made-up tasks.
The problem wasn't that the tasks were wrong. The problem was the sequencing - and what the sequencing revealed about where the team's anxiety was pointed.
Here's what I was looking at: a product that had been in development for roughly six months. A client demo coming up in ten days. A chatbot that couldn't stream responses in real time. A key feature - the Reddit integration - blocked because AWS had flagged the account after a key was accidentally exposed in a GitHub commit. A developer who had been fixing another developer's code rather than that other developer learning to fix his own code. And a growing list of polish items that kept expanding every time something foundational remained unresolved.
We had: OCR fallback logic. CI/CD pipeline discussions. GitHub Actions automation. Staging vs. live deployment strategy. Redis architecture decisions. Microsoft AutoGen PR risk assessment. CloudTrail log setup.
None of these are bad things to think about. All of them, in this moment, were ways to avoid the harder conversation: the chatbot isn't working, the product isn't in front of customers, and every day that continues is a day you cannot learn what's actually wrong with it.
That's menu-messing. Doing real-looking work that doesn't advance the only metric that matters: does a stranger, paying money, get value out of this thing?
Why Smart Teams Do This
Here's what makes menu-messing so insidious: the people doing it are usually not lazy. They're often the most technically capable people on the team. They care deeply. They have strong opinions about architecture and code quality and documentation standards.
And that's exactly why they menu-mess. Because caring about quality is a completely legitimate reason to avoid shipping. You can always point to something that isn't good enough yet. The streaming has a glitch. The UI is missing a profile picture. The link isn't rendering as a hyperlink. The deployment process isn't documented well enough for someone else to do it.
All true. All fixable. None of them the reason the product isn't in front of customers.
What's actually happening is that shipping a product to a real customer creates the possibility of a devastating data point: they might not like it. They might churn. They might tell you the core assumption was wrong. And you can't un-know that once you know it.
Menu-messing delays that moment. As long as you're still fixing things, you're still in the phase where the product could be great. The moment you ship, you find out whether it is. Most teams - consciously or not - prefer the possibility of greatness to the reality of feedback.
I've done this myself. With StartYourSaaS, I spent a year and a half building, hiring devs, reporting progress to a community of students who had paid me. I booked meetings with multi-million dollar companies. I got in the room. But I couldn't close because the software didn't work. And I kept moving the goalposts on what "ready" meant because I didn't want to face the possibility that I'd sold a course on building something I didn't know how to build. That's menu-messing at the business level - generating sales activity as a substitute for having a product worth selling.
The Specific Failure Mode: Optimizing the Internal Experience of Building
There's a phrase I keep coming back to: optimizing the internal experience of building instead of the external experience of using.
What does that mean in practice?
Optimizing the internal experience of building looks like: making sure the GitHub commit history is clean. Making sure every environment variable is properly abstracted. Making sure the CI/CD pipeline is set up so deployment doesn't require manual steps. Making sure documentation exists so any developer can onboard. Making sure the codebase is structured in a way the team feels proud of.
All of these improve the experience of being on the team building the product.
Optimizing the external experience of using looks like: making sure a real person can open the product, ask it a question, and get a useful answer. Making sure the response doesn't repeat words. Making sure the sources are formatted correctly. Making sure the streaming works so the experience feels fast and alive. Making sure a paying client can use this in a demo ten days from now without it falling apart.
In a mature product with real users, both matter equally. In an early product with zero users, the internal stuff is almost entirely irrelevant. You can clean up the commit history after someone pays you. You cannot retroactively get six months back.
The tell is always the backlog. If your backlog contains more tasks about how the team builds than about what the customer experiences, you're menu-messing.
Free Download: 7-Figure Offer Builder
Drop your email and get instant access.
You're in! Here's your download:
Access Now →The Accountability Structure That Enables It
One thing I noticed on this call was that the accountability structure itself was part of the problem.
We were doing sporadic group calls. Tasks were tracked in conversation threads that got buried. One developer had been working on something, it stalled, another developer jumped in to fix it rather than escalating - and now we have a situation where no one is fully accountable for any single piece, and no one has a complete picture of what's actually blocking the product from being usable.
I asked directly: what's the best way to guarantee this work gets done? The answer I got back was about communication - Slack updates, task formats, visibility, documented blockers. And that's right. But the reason we needed that conversation six months in is that we didn't build that accountability structure six months ago.
Here's what I've learned from watching a lot of dev teams: without a daily visible accountability loop, tasks expand to fill whatever time is available, and the tasks that expand fastest are the ones that feel productive without being verifiable. "I was working on the OCR fallback" is hard to challenge. "I didn't ship the streaming endpoint" is very easy to see.
The fix we landed on was simple: daily Slack updates with three fields. What did you ship? What are you building today? What's blocking you? Not a standup call. A written async update that creates a paper trail and forces each person to publicly commit to a deliverable. If it's not in the update, it didn't happen.
That structure does something important: it makes menu-messing visible. When you have to write down every day what you actually shipped, you can't hide behind effort. "Worked on documentation" is not a ship. "Pushed streaming endpoint to staging" is a ship. The format forces the distinction.
The Ten-Day Problem
There was a specific forcing function on this call that made everything more concrete: a client demo in ten days.
That deadline is the most valuable thing this team had, and it wasn't being treated that way. When you have ten days until a client sees your product, your entire backlog should be sorted by one question: will this matter in the demo? If the answer is no, it goes to the bottom or off the list entirely.
CloudTrail setup? Not in the demo. CI/CD pipeline? Not in the demo. GitHub commit cleanliness? The client will never see your GitHub. OCR fallback for edge case scraping? Only matters if the demo hits that edge case, which you can control for.
What matters in the demo: does the chatbot respond? Does it stream? Does the UI look clean enough that the client doesn't get distracted by missing profile pictures and broken hyperlinks? Can you show a real answer to a real question without the system falling over?
That's a short list. Every hour spent on anything not on that list, in the ten days before that demo, is a menu-messing hour.
I've seen this pattern tank deals. You get in the room with a client - and we had a situation exactly like this where we got in front of multi-million dollar companies who wanted our solution - and the demo breaks. Not because the product couldn't work. Because the team was spending the pre-demo sprint on things that didn't affect the demo. Then the meeting goes badly, the client moves on, and six months of dev work produces zero revenue validation.
The demo is the game. The game hasn't started yet. Stop messing with the menus.
What "Hitting Play" Actually Requires
Let me be specific about what it looks like to hit play, because I think teams underestimate how simple it actually is.
Hitting play means: one real human, who is not on your team and not doing you a favor, uses your product to solve a real problem. That's it. They don't have to pay yet, though paying is better. They just have to be genuinely trying to get value from it, not just being polite.
To get to that moment, you need exactly one thing: the core workflow has to work end to end. Not perfectly. Not beautifully. It just has to work well enough that the person can complete the thing they came to do.
For this team, that meant: open the chatbot, type a question, get a streaming response with sources. That's the core workflow. Everything else - the OCR fallback, the CI/CD pipeline, the Redis architecture, the AWS CloudTrail setup - none of that is required for one human to experience the core workflow.
The question I always ask at this stage is: what is the absolute minimum that has to be true for someone to use this and get value? That list is always shorter than the team thinks. And every item that's not on that list is a menu.
If you're building something and you haven't done this exercise, do it right now. Write down the core workflow in one sentence. Then list every task currently in your backlog. Draw a line: required for core workflow, not required for core workflow. Everything on the right side of that line is a menu. Do not touch it until you have external validation of the core workflow.
Need Targeted Leads?
Search unlimited B2B contacts by title, industry, location, and company size. Export to CSV instantly. $149/month, free to try.
Try the Lead Database →The Real Cost of Menu-Messing
I wrote in a post-mortem once that my biggest weakness wasn't sales and it wasn't marketing - I'd proven I could do both. It was product. Building software is like building a house when you don't know construction. You can manage the project, you can sell the house before it's built, but if the foundation is wrong, none of the rest matters.
What I didn't fully articulate in that post-mortem was the time cost. Because when you're menu-messing, you're not just wasting weeks. You're wasting the learning cycles that would have told you whether your core assumptions were right. Every week you spend on internal polish is a week you don't learn whether the product solves a real problem at a price people will pay.
Those learning cycles are the actual scarce resource in early product development. Not developer hours. Not AWS credits. Not code quality. Cycles of external feedback. You only get so many before your runway runs out, your team loses momentum, or your clients lose patience.
Menu-messing burns those cycles on zero-feedback activities. You can spend three weeks getting your GitHub history pristine and learn exactly nothing about whether your product works. Or you can ship something ugly to one real client, watch them use it, and learn more in one hour than you learned in three weeks of internal polish.
That's the real cost. Not the wasted dev hours. The wasted feedback cycles.
How to Break the Pattern
If you're running a dev team and you recognize this in your own operation, here's how to stop it.
First: name it. When you're in a standup and someone is talking about internal tooling while core features aren't shipped, say it out loud. "Is this a menu?" It sounds harsh. It's not. It's the most useful question you can ask. The team on this call had been building for six months without anyone asking that question systematically. Once you name the pattern, it gets harder to hide behind.
Second: establish a daily ship log. Not a call. A written async update, every day, from every developer. What did you ship? What are you shipping today? What's blocking you? This creates visibility and it forces the team to distinguish effort from output. Effort is invisible in a log. Output is not.
Third: sequence by demo-readiness, not by technical elegance. Before any sprint, sort the backlog by one question: will this be visible to a real user in the next demo? Anything that isn't goes to the bottom. This doesn't mean you never do infrastructure work - it means you do it after you have a product that someone is using.
Fourth: get external eyes on it before you think it's ready. The instinct is always to wait until it's good enough. Resist that instinct. Find one person - a potential customer, a friendly advisor, someone with nothing to gain by being polite - and put them in front of the product in its current state. Watch them use it. Don't explain anything. Just watch. You'll learn more in twenty minutes than in twenty more days of internal polish.
If you want a framework for structuring those early customer conversations, the Discovery Call Framework walks through exactly how to run them without selling before you're ready.
The Broader Pattern
Here's what I want you to take from this: menu-messing isn't a team failure. It's a natural human response to the anxiety of external judgment. Building internally feels safe because you control the feedback. You write the code, you review the code, you decide if the code is good. Nobody can tell you it's wrong until you ship it.
Shipping creates the possibility of being wrong in a way that's visible and real. That's terrifying if you've spent months building something. So you find legitimate-sounding things to fix instead of shipping.
The antidote isn't to care less about quality. It's to understand that external feedback is the only data that matters, and every day you don't collect it is a day you're operating on assumption. In the early stage of a product, assumption is the enemy. Feedback is the asset.
The game doesn't start until someone who didn't build it plays it. Until then, you're just adjusting settings on a screen nobody else can see.
Stop messing with the menus. Hit play.
If you're in the early stages of building a product and want a real framework for generating external validation fast - getting in front of prospects, booking demos, and finding out if people will actually pay - the Best Lead Strategy Guide covers the outbound process I'd use. And if you're trying to build the prospect list to do that, ScraperCity's B2B database is where I'd start - unlimited leads, no per-record pricing. The fastest way to stop menu-messing is to get a real human in front of your product. That starts with finding them.
Ready to Book More Meetings?
Get the exact scripts, templates, and frameworks Alex uses across all his companies.
You're in! Here's your download:
Access Now →