← Ayo Osunjuyigbe

· Building

The roadmap was a list of promises, not a plan

I have a document that used to be the plan. Perpetuals. Spot. A DeFi tab. Prediction markets. Social trading. Portfolio. Fiat on-ramp. Every partner who wanted their feature on day one got a row. The engineering team was eight people. The product was still in beta.

That list was not a roadmap. It was promises I did not want to take back in a meeting.

Saying no felt like politics. Saying yes took five seconds. The cost was another month of almost-ready.

I have done this before. This is the quarter I stopped treating the full checklist as the launch.

What the list actually was

I am shipping a non-custodial trading app. Web and mobile. About ten thousand people in beta. Public launch kept slipping because done meant every tab, not one path that worked.

A single place to trade is a good fundraising sentence. It is a bad shipping sentence. You end up with seven surfaces and no user who can finish a trade without help.

Those tabs are not one product. Perpetuals need matching, margin, liquidations, an oracle, and a withdraw that still works when the book is thin. Spot looks the same in a mockup. It breaks differently. A DeFi tab that wraps someone else’s vaults is a third product. Prediction markets are a fourth — different settlement, different arguments, different support. Social trading puts other people’s risk on your account. Portfolio has to be true or you should not show it. On-ramp is a regulated vendor in the same session as a wallet you do not hold.

Eight people can make one of those solid. They cannot make seven solid at once.

I knew that. I still added rows. I said we would get to it. That is how a beta lasts a year.

I had already run this experiment

From 2022 to 2024 I founded a layer-1. EXX. Self-funded, a hundred and fifty thousand dollars. The work should have been the chain. Instead the plan was the chain, a token, consensus, and a pile of side tools so the ecosystem would look busy: revoke flows, trading bots, developer pages. We passed thirty thousand testnet users. We did not ship a mainnet I would put my own money on.

The extras were there so the chain would not look empty. They used the months that should have gone into making the chain usable without me on the call.

In the same years I was also the technical founder on a peer-to-peer football book that later shut because of regulation, a Telegram tap-to-earn that reached about twenty thousand users, and a carbon-reporting product for someone else. That was not ambition. That was the same mistake at company scale. I said yes so I would not have to stand next to one product that might fail in public.

Years before that I ran a permissionless token launchpad — presale, lock, airdrop, nothing else. About ten thousand users. Real volume. One job. I already knew a narrow product can work. I still built the long list the next time, because the long list looks more serious in a deck.

Why no felt like politics

People in those meetings are not trying to wreck the launch. They are trying to keep their part of the story.

Someone funded a unified venue. A partner wants their feature in the first screenshot. An engineer has already started the prediction-market tables. A designer has a social tab that looks like a real company. If I say it is not in this launch, I am not making a technical point. I am saying their work is not the company this quarter. That feels like a fight. I used to skip the fight and call it alignment.

Alignment that adds a tab is not alignment. It is a way to end the meeting. The cost shows up later: QA cannot finish a case, on-call does not know which product broke, a beta user cannot deposit because the on-ramp, the wallet, and the first market were three projects sharing a menu.

A tired team is the signal. If every tab is seventy percent done, nothing is done. People work late and still cannot show one closed path. I used to call that effort. It was the list.

What I cut

I did not throw the vision away. I changed what launch meant.

Launch is one path a stranger can finish: create an account, put money in, trade a market that actually fills, take the money out. Non-custodial. If withdraw is a support ticket, if the book is empty, or if the on-ramp leaves them stuck, we are not launching. We are posting a link.

Prediction markets, social, and the DeFi wrapper stayed in the codebase. They came off the launch. Adding another chain is not the hard part. The hard part is a new feature that has to be correct: settlement, edge cases, support, the path a user actually takes. Those features can ship after someone has completed the core path twice without writing to support. They were only blockers because I had put them on the same line as public.

A yes in a call is not a roadmap item. If it does not have a person and a week, it is not in the launch. It is later.

That is the cut. It is less than people want after they have already drawn seven tabs. It is what a team of eight can actually finish.

What got better

QA could test one story: empty account to money out, including a late oracle, a thin book, and a lost device.

On-call got simpler. One product has one failure you can find. Seven products have seven, and the weekend pager is whoever complained last.

Beta users stopped needing a walkthrough. The ones who stayed were trying to trade. That is the feedback I should have wanted in week one.

Engineers could hold the system in their head. Perps, a wallet, and an on-ramp is already a lot. Add a feed and a prediction market before those work, and nobody understands the whole thing.

I could describe the company in one sentence: a non-custodial trading product. If I need and, I have not cut enough.

Launch stopped being a feeling. It became a path with a closed ticket.

What I do now

I still keep a long vision. I do not put it on the same page as the launch.

If the launch sentence needs an and, it is two products. I say the sentence in the meeting. If I have to add a tab to finish it, that tab is later.

A promise needs a person, a week, and a user path, or it comes off the page. We should is how the list used to grow. I do not add rows in the room anymore. I add a later, or I add an owner.

I make the cut in the meeting. If someone is unhappy, they are unhappy while we can still change the list — not three weeks later, when their half-built tab is why we missed the date.

A tired team that still cannot demo one finished path is not mainly understaffed. They are over-promised. The first move is cut, not hire.

I run one product that can fail in public. I can advise on the side. I do not start a second company to avoid watching the first one miss. EXX plus a sports book plus a Telegram game was me hiding. The chain needed a year I spent being available everywhere.

I wanted people to leave the meeting happy. They left with a list. The list had dates, so it felt like a plan. It was not a product.

A plan is also the work you will not do. I write that down. Then I ship what is left.