A long queue outside a Stanbic IBTC Bank branch during the 2023 naira cash shortage
← All work
Ticket IT

2023 · Nigeria Currency Crisis

Ticket IT

Cash, without the cash.

A disposable 9-digit bearer instrument for a country where connectivity isn't guaranteed. No account. No wallet. The code is the money.

Open the live mockup

No real money · *920# emulator

Instrument
9-digit bearer code
Custody
None — no wallet
Rails
Bank → code → bank
Access
Web + USSD *920#
Keyspace
1,000,000,000
Status
Shelved · Demo live

The founding constraint

Money that had moved on a screen was not money anyone would take.

In late 2022 the Central Bank of Nigeria redesigned the 200, 500, and 1,000 naira notes and tried to kill the old ones on a tight deadline. New notes did not arrive. Banks capped withdrawals. Markets froze. I was in my fourth year of Economics at Obafemi Awolowo University. I queued for two weeks and watched branches run out of cash before noon.

Opay, Moniepoint, Kuda, and a wave of POS agents filled the vacuum — and built Nigeria's current fintech boom on the back of that forced migration. Every one of those rails still assumed a smartphone, a stable connection, and a shared provider. Cash never had those requirements. That is why cash was so hard to replace, and why the people the crisis hurt most were the last to be served.

I stood in a market for two hours because a transfer I'd sent — receipt and all — meant nothing to a seller who didn't trust the alert and didn't have the receiving bank's app.

What the new rails required

Ticket IT had to work where those assumptions failed.

  • 01

    A smartphone

    capable of running an app

  • 02

    A stable connection

    in a market 4G never reaches

  • 03

    The same provider

    or a shared trust in one app

The instrument

Bank to code to bank. Value never sits in the middle.

Flutterwave moves naira in on generate and out on cash out. There is no Ticket IT account and no Ticket IT wallet. The 9-digit code is the only thing that travels between people — said aloud, written down, or typed. Web and USSD run the same five operations.

  1. 01

    Generate

    Enter an amount and pay from your bank via Flutterwave. When the transfer clears, Ticket IT mints a 9-digit bearer code. That code is the money until someone cashes it out. No signup.

  2. 02

    Hand off

    Give the code like cash: say it aloud, write it down, or type it. The other person does not need a Ticket IT account, a smartphone, or the same bank.

  3. 03

    Check

    Anyone can look up a code to see if it is valid and what value it holds — without claiming it. A seller can confirm payment before handing over goods.

  4. 04

    Revalidate

    If a code was overheard or shared too early, the holder can destroy it and mint a fresh 9-digit code with the same value. The old digits die. This is protection, not cash out.

  5. 05

    Cash out

    The recipient enters the code and their bank details. One successful payout pays the bank and destroys the code permanently. It does not mint a new code in their name.

In the field

The product had to survive a stall and a keypad.

Field frames for the handoff. The live mockup is where you walk the five operations yourself.

A handwritten 9-digit Ticket IT code on a paper slip, being keyed into a basic feature phone at a stall

Hand off

Say it, write it, type it. The other person does not need an account, a smartphone, or the same bank.

A worn Nokia-style feature phone on MTN Nigeria, the hardware Ticket IT USSD was built for

Channel · Try it

*920# is not a lite version. It is the product.

Same five operations on web and USSD — generate, cash out, check, revalidate, exit. The React mockup walks both channels with test codes and simulated Flutterwave. No real naira. No leased carrier.

Open the live mockup

Diligence

A bearer instrument has to survive two attackers.

Whoever holds the digits can cash them out. Guardrails had to cover live guessing against the session, and an offline dump of the table. A single hash does not do both.

  1. 01HMAC, not a plain hash

    The 9-digit code was generated from a cryptographically secure random source and stored as an HMAC keyed with a server-side secret held outside the database. A plain hash of a 9-digit code is still brute-forceable offline if a database ever leaked — a billion values is hashable on ordinary hardware. Keying the hash with a secret the database doesn't contain closes that gap. Combined with session lockouts, it resisted both online guessing and offline dumps.

  2. 02Why not a QR code?

    QR would have removed the type-it-in friction, but it broke the constraint that mattered most: universal access. Many people in the informal economy carry phones with no camera, and USSD can't render a QR at all. Generating or scanning a QR would require an app or website — exactly the dependency Ticket IT existed to remove. A numeric code can be read aloud, typed into *920#, or entered on the simplest phone.

  3. 03Why 9 digits — not 12, not two codes

    A longer code would have added security and a real amount of friction — more to read over the counter, more to mistype on a USSD keypad. Nine digits stayed short enough to communicate face-to-face the way a price does, while still giving a billion-value keyspace so guessing stayed impractical. Length was not asked to do the security work alone.

Why it did not ship

The product was solvable. The capital structure was not — not from a student desk.

I built Ticket IT because I had stood in that market, not because I was chasing a round. Solving it for real meant costs that had nothing to do with whether the idea was any good. Each wall was large enough on its own. Together they closed the window.

  • USSD lease

    ₦600k+

    Down payment to an MNO for a functioning short code — before a single ticket moved.

  • Keep-alive

    ~₦600k / mo

    Maintenance just to keep *920# on the air. The access channel was also the burn.

  • Processing

    Fee on every hop

    Flutterwave on generate and on cash out. A product that had to feel like cash carried a rail tax on both ends.

  • Legal surface

    Bearer risk

    A code anyone can claim is attractive to laundering and advance-fee fraud. A solo founder is a poor absorber of that exposure.

The regulatory wall

Ticket IT never held a wallet. It still moves customer money. CBN does not treat that as a prototype.

  • PSSP

    Payment Solution Service Provider

    ₦250m

    Not enough

    Lightest CBN tier. Does not authorize moving customer funds at the scale this product needs.

  • MMO

    Mobile Money Operator

    ₦2bn + ₦2bn escrow

    The actual license

    Covers the wallet-adjacent function Ticket IT needs. Under the holding-company structure, the ₦2bn minimum applies per subsidiary — not once.

  • PSB

    Payment Service Bank

    ₦5bn

    Institutional

    A different company class. Not seed-stage capital.

Application fees sit on top of the headline deposit. The deposit is refundable only if the license is granted. I underweighted this early. Investors who stayed lukewarm were pricing a market already being absorbed by licensed fintechs — and an infrastructure cost that wanted a financial model, not a working prototype. The crisis eased. Banks restocked. The window closed.

What it taught me

Three lessons that still set the standard.

  1. 01

    The constraint is the product

    USSD was not a feature bolted on later — it was why Ticket IT existed. Design for the user the obvious solution quietly excludes.

  2. 02

    Built is not the same as fundable

    The code solved the trust gap. The business needed unit economics and a regulatory path — ₦600k/mo rails plus CBN capital in the billions. I had validated the problem, not the business.

  3. 03

    Urgency expires. Spend it.

    Ticket IT answered a six-week emergency. I kept fundraising after banks restocked. Now a narrowing window forces scope: ship the smallest proof inside the window.

Bring the next constraint. I'll stay until it ships.

Back to all work