Wave is building a mobile money system in Senegal and Cote d’Ivoire.
In 2017, nearly 60% of adults in sub-Saharan Africa had no bank account. That’s for good reason–the fees are too high, the closest branch can be hours away, and nobody accepts cards. But without banks, families have to hide their savings under the mattress. Small business owners rely on lenders who charge extortionate rates. Parents spend hours waiting in line to pay school fees in cash.
Wave is building financial services for these folks that just work. In places where electricity, water and roads fail all the time, our mobile wallet is inexpensive, reliable and accessible to everyone. In fall 2017, we launched a mobile app in Senegal for cash deposit, withdrawal, and money transfer; we’re now processing over 200k payments every month.
Meet a user
Fatou sells fish at Sandaga market every day. She used to go to a local microfinance bank to send money back to the fisherman but she switched to Wave to save time and money on fees.
With Wave, she goes to the local agent in the market and can send money instantly. She usually keeps her profit in her Wave wallet—she’ll use some to pay for her ride home and the rest she’s saving to buy a permanent fish stand.
The fisherman she works with can now pick up his money in his village and head right back out to sea.
Meet an agent
Claude is one of Wave’s 500 agents across Senegal. He manages a local shop and is the face of Wave in his neighborhood in Dakar. He started providing Wave as a way to make extra money.
He gets a minimum amount every day from his work for Wave, which increases as more users sign up and use Wave at his shop.
He has signed up over 400 users at his shop. Most use Wave to send money back to their family in the south of the country typically near the end of the month.
Some of his users are illiterate so he helps them navigate the app if they want to deposit, withdraw, send or pay for services.
We’re a fully distributed team of 10 engineers supporting 100 colleagues from Senegal and around the world. We believe in relentlessly solving problems for users, deeply understanding our tools, and helping each other improve as engineers and colleagues.
We understand and serve our users.
Engineers build everything that Wave’s users touch. We know a lot about how the code affects the user experience — and more than anyone else about what’s possible or easy to build. That means it’s on all of us to ship the best product we can.
To do that, we have to think from the point of view of the user, not the programmer. That means pulling context from product managers until we understand the root problem. It means devouring info on how our business works. It means thinking through the user impact of every edge case. It means constantly asking, “is this line of code going to make a user happier?”
We maximize our long-term velocity.
First, we build quickly by working on the most important things first, focusing intensely, and refusing to be bound by the way things have always worked.
But we also course-correct quickly by shipping our changes ASAP to get feedback from product managers, stakeholders and users.
To maintain velocity over time, we keep the code awesome via design and code review, and by investing in improving the non-awesome parts.
Finally, we make greatness effortless. In the short term, there’s a trade-off between building something well and building it fast. But in the long term, we can focus on building the habits that let us build future things both well and fast. Whenever we slow down to work on quality today, it’s so that we can build quality in from the start tomorrow.
We refuse to live in a box.
The easiest way to become a “10x engineer” is to solve the same problem with 10% of the work. By understanding our users’ root problems instead of mindlessly checking off to-dos, we can figure out the most efficient way to make our users happy. By deeply understanding our tools and codebase, we can make sure we’re always building our tech in the simplest way possible.
Things that initially seem like constraints often turn out to just be guidelines. The way things have always worked is not how things have to work in the future.
We schlep when we need to.
- Sometimes, there is no clever 10x-faster way to do solve a problem. If we’ve thought hard and can’t find one, then we’ll lean into the schlep and solve the problem anyway. Lots of the problems we face—like finishing a complicated refactor, or hiring a great team—don’t have clever solutions. We’ll still try to work efficiently, but we won’t shrink from putting in the time they need to be great.
We deeply understand our tools.
In the short term, we can get away with “cargo cult engineering”—copying existing code instead of understanding what to do from first principles. But if we only copy what already exists, we’ll never be able to improve on it, solve its problems, or build anything novel.
For that, we need a deep understanding of our entire stack. Not just SQLAlchemy, but SQL; not just SQL, but Postgres locking semantics. Not just GraphQL but the entire networking stack underneath (HTTP, TCP, UDP, IP…). And so on. In the long term, investing in this knowledge pays huge dividends in our ability to understand how systems work, navigate and debug them when they don’t, and solve problems in the simplest way.