A guy named Tariq messaged us a few months ago wanting a ride-hailing app for his city. His cousin’s wedding was in ten weeks and he wanted the app “live and getting drivers signed up” before then, mostly so he could announce it at the reception. No joke. He had a name, a logo his nephew made in Canva, and a strong opinion that the coding part was basically the whole project.
It isn’t, and that’s the part nobody tells people upfront. A mobile app development company spends a lot less time on “the coding part” than most clients expect, and a lot more time on the stuff before and after it. Here’s roughly how Tariq’s project actually went, stage by stage, and where his ten-week timeline ran into reality.
Week One Was Mostly Questions, Not Screens
Before anyone opened a laptop to start building, the first week went into discovery. Who’s the competition in his city? Turned out there were two apps already operating there, one barely functional, one decent but with terrible driver payouts (which, as it happens, became Tariq’s whole pitch later). What do riders actually want that isn’t being offered? Cash payment options, mostly, since card penetration in that market was lower than he’d assumed.
This stage is unglamorous. It’s interviews, spreadsheets, looking at app store reviews of competitors to see what people complain about. But it’s also where half of Tariq’s original feature list got cut, not because the features were bad ideas, but because they didn’t matter to the actual problem he was solving. In-app chat between rider and driver, for instance. Nice idea. Almost nobody asked for it.
Then Came the Budget Conversation
Once the scope started taking shape, the next step was turning it into something plannable. An MVP got defined, basically: ride requests, driver matching, cash payment, basic ratings. Everything else (in-app wallet, scheduled rides, multi-stop trips) got pushed to version two.
This is also where mobile app development cost gets discussed for real, not as a vague range in an email. And it’s usually the moment a client’s face changes a little, because the scope they walked in with and the scope that’s actually affordable in ten weeks rarely match up. Tariq’s case was no different. The driver-matching algorithm alone, done properly, was going to eat a meaningful chunk of the timeline. Something had to give, and in his case it was the launch date, not the feature.
What the App Actually Looked Like, on Paper, Before It Was Real
Wireframes came next. Boxes, arrows, screens with placeholder text, nothing clickable yet, just the skeleton of how someone moves from “open app” to “get in a car.” Then higher-fidelity designs in Figma, then a clickable prototype that looked like a real app but had zero working logic behind it.
Tariq’s reaction to the prototype was useful, honestly. He clicked through it and immediately said the driver app side felt like an afterthought, which it kind of was at that point, because most of the early thinking had gone into the rider experience. That got rebalanced before a single line of production code existed. Catching that here cost an afternoon. Catching it after development would’ve cost weeks.
The Flutter vs Native Argument (Again)
Every project eventually has this conversation. Flutter or React Native, one codebase for both iOS and Android, versus native Swift and Kotlin, two codebases but better performance and tighter access to platform features. For Tariq’s timeline and budget, cross-platform won, not because native is bad, but because rebuilding the UI twice wasn’t realistic in ten weeks with the team available.
Backend decisions happened around the same time and mattered just as much, even if they’re less fun to talk about. Real-time location tracking for drivers meant the backend needed to handle constant updates without falling over, which pointed toward a specific database setup and ruled out a couple of cheaper options that would’ve buckled under that kind of traffic.
Building It
Development ran in two-week sprints. Sprint one was authentication and basic profiles for riders and drivers, unglamorous but everything depends on it. Sprint two was the ride request flow. Sprint three was driver matching and the map integration, which ran a few days over because the mapping SDK they’d planned to use had a licensing quirk nobody caught during planning. These things happen.
Frontend and backend work overlapped, with check-ins every couple of days so the client could see actual progress rather than waiting weeks for a “reveal.” Tariq, to his credit, started using the in-progress build himself almost daily, which surfaced a few small but annoying issues, like a button that was technically tappable but visually looked disabled, way before they would’ve been caught in formal testing.
Then Things Got Tested, Properly
Once the core features existed, testing kicked in, and this is where a lot of the invisible work happens. Functional testing, does the ride request actually find a driver. Device testing across a range of phones, because the app needs to run fine on a budget Android phone in addition to whatever the developers happen to own. Performance testing under conditions closer to real use, multiple drivers, multiple riders, location updates flying constantly.
One bug only showed up on a specific budget phone model that was extremely common in the target city: the map would freeze if a ride request came in while the phone’s battery saver was on. Nobody on the team owned that phone. It got caught because someone specifically went and tested on one, which is a small thing that makes a real difference.
A round of beta testing with a handful of real drivers ran for about a week before launch, mostly to catch exactly this kind of issue at small scale before it became a public problem.
Getting Into the App Store Wasn’t Instant
Submitting to Google Play and the App Store isn’t just uploading a file. Both platforms have their own review processes and guidelines, covering everything from how location permissions are explained to users, to how the app handles payments, to the privacy policy itself. Apple’s first review came back with a rejection, not over anything in the app’s functionality, but because the privacy policy link in the app didn’t match the one in the App Store listing. A five-minute fix. A two-day delay waiting for re-review.
App Store Optimization started here too, choosing keywords, writing the description, picking screenshots that actually show the app doing something useful rather than just looking nice.
Tariq’s App Launched, Eventually
It went live about three weeks after the original target, which Tariq was annoyed about for roughly a day and then forgot entirely once drivers started signing up. Launch wasn’t really the end, though. Within the first two weeks, the analytics showed something nobody predicted: most ride requests were happening late at night, far more than during the day, which completely changed how driver incentives needed to be structured for version two.
That’s normal. The app you launch is never quite the app people actually use, and the stage after launch, watching, fixing, adjusting, is where a lot of the real shape of the product gets figured out. Tariq’s wedding speech mentioned the app, by the way. Just not as the headline he’d originally planned.