Build
Connect & operate
Design & teams
Start hereScope a build in one callBring a spec, a wireframe, or a paragraph. You leave with an architecture, a timeline, and a number.Book a scoping call
AI software
LLM & data systems
Vibe coding
Ready to ship?Put AI where the work isAgents, RAG, and private LLMs wired into the systems your team already uses — not a chatbot bolted to a homepage.Discuss an AI project
Domain firstWe learn your workflow before we model itRegulated, operational, or high-volume — the constraints belong in the schema, not in a training doc.Talk about your domain
Plan smarterEstimate before you commitCost ranges, scope templates, and the questions we ask in discovery — free, no form.Open the cost calculator
Real conversationsTalk with a technical leadNo SDR, no discovery gauntlet. The person on the call is the one who scopes the build.Book a call
iOS · Android · React Native

Mobile app development
built for the OS, not around it.

Native iOS and Android, React Native, or a mobile web app that never touches a store — the right answer depends on your team and your roadmap, not on which framework is newest. We will tell you when a single codebase is the smart trade, and when it quietly costs you the thing an app actually gets judged on: how it feels to hold. Either way, the quote accounts for what comes after launch, not just what it takes to reach it.

Talk to a mobile engineer How engagements work
Native when performance or a platform API mattersApp store submission handled end to end, resubmissions includedBuilt for two years of OS updates, not just the first one

8–14 wks

First release

Both stores, one v1

Scoped

Typical build

Depends on native vs. shared code

~50%

Of lifetime cost

Spent after v1 ships, not before

100%

Code and store accounts yours

From the first commit

The framework decision

Native, React Native, Flutter, or no app at all

Every one of these is a legitimate choice for the right project and a mistake for the wrong one. The decision turns on your team, your roadmap, and how much of the experience depends on the platform underneath it — not on what shipped a conference talk this year, and not on which framework a previous vendor happened to know.

Native (Swift and Kotlin)

Full access to the platform: camera pipelines, background location, ARKit, whatever capability ships first on a new OS release. It costs two codebases and two release trains, and it is the right call when a platform-specific capability is the product, not a feature bolted onto one.

React Native

One JavaScript codebase covering both platforms, with an escape hatch to native modules where you need one. It suits teams with existing web or React engineers and products where the interface matters more than squeezing the last frame out of the GPU. Heavy animation and background work still tend to need a native module eventually.

Flutter

Genuinely closer to native performance than React Native on graphics-heavy screens, at the cost of a smaller hiring pool and a language — Dart — your existing team probably does not know. Worth it when the UI is unusually custom and pixel-identical rendering across both platforms matters more than reusing the skills you already have in-house.

Mobile web or a PWA

The honest answer when the app's job is to display information or take a form, not to use the camera, run offline, or send push notifications a user actually wants. It skips app store review entirely, updates the moment you deploy, and costs a fraction of either app. Building an app anyway because a website feels less impressive is the most common overspend in this category.

Webview hybrids (Capacitor, Cordova)

A website wrapped in a native shell to get a store listing and a handful of device APIs — camera, push, local storage — without writing a mobile codebase. It is honest for a content-driven app that mainly needs an icon on the home screen, and a poor choice the moment the interface needs to feel like the rest of the OS, because a webview never quite does.

Reusing a web codebase deliberately

Teams already running Next.js or a similar React stack can sometimes share business logic and API clients between the web app and a React Native client without sharing the UI layer. This is a genuine cost saving when it is planned from the start, and a source of awkward abstractions when it is retrofitted onto a web app that was never meant to be shared.

None of these decisions are free to reverse later. Moving from React Native to native, or from a wrapper to a real mobile codebase, is closer to a rebuild than a refactor, which is why the decision belongs in week one and not somewhere around week eight when the first performance ceiling shows up.

What it costs

Mobile app development cost, by what you are actually building

Real ranges for apps we have actually shipped. The variable that moves a quote is not screen count — it is how much of the app has to be native, how many backend integrations it depends on, and whether it needs to work offline. Design work, if you do not already have it, is usually a separate line rather than something buried inside these numbers.

BuildCommitmentTimelineWhat's included
Single-platform MVPFixed scope6 – 10 weeksOne platform (iOS or Android), one core workflow, backend, and basic push notifications.
Cross-platform build (React Native)Fixed scope8 – 12 weeksBoth stores from one codebase, standard device APIs, and offline caching for the core screens.
Native iOS + AndroidFixed scope12 – 18 weeksTwo native codebases, platform-specific UI and performance work, and full offline sync.
Migration off a webview hybridFixed scope8 – 14 weeksRebuilding a Cordova or Capacitor app in React Native or native once the wrapper stops feeling acceptable to users.
App store rescue or resubmissionFixed scope1 – 4 weeksA rejected or stalled submission diagnosed and fixed against Apple's or Google's actual review notes, not guesswork.
Ongoing OS maintenanceOngoing retainerOngoingYearly OS upgrades, deprecated API replacement, crash monitoring, and the SDK bumps both stores eventually require.

Ranges assume US-based senior engineers and include QA, device testing, and app store submission rather than quoting them separately. A quote well under these bands is usually missing offline handling, push infrastructure, or the maintenance year that follows launch — and that gap does not disappear, it just shows up later as a change order.

Offline, sync, and push

The parts that make an app feel native instead of a website in a frame

None of this shows up in a wireframe, and all of it shows up in the first week of real usage — usually as a support ticket about data that 'disappeared' when it was really just unsynced.

Offline-first is a design decision, not a feature flag

A local database on the device — SQLite, WatermelonDB, or Realm depending on the stack — with a defined rule for what happens when two edits collide. Deciding whether the server or the device wins, and when, has to happen before the first screen is built, because retrofitting it later means rebuilding the data layer.

Conflict resolution is the part nobody wants to decide

Last-write-wins is simple and wrong for anything a user would notice losing, like a form they filled in twice on two devices. A CRDT-based approach or field-level merging costs more to build and is the honest answer once more than one device can edit the same record, which is most business apps within a year of launch.

Push notifications need a backend, not just a library

APNs for iOS and FCM for Android both require a service that tracks device tokens, handles token rotation when a user reinstalls, and retries delivery. The library on the client is the easy 10 percent; the token lifecycle and the send pipeline are the other 90.

Background execution is the platform's decision, not yours

iOS suspends background work aggressively to protect battery, and a sync job you assumed would run every fifteen minutes may run once an hour, or not at all, if the OS decides the app is not in active use. Design for eventual sync on foreground, not for a background job you cannot guarantee runs.

Testing offline behavior means simulating a bad network, not no network

The failure that actually happens in the field is a flaky subway connection or a spotty warehouse Wi-Fi, not a phone in airplane mode. Test against throttled and intermittent connectivity, because a sync engine that only handles the clean on/off case will misbehave on the messy case users actually hit.

Store review

App Store and Play Store review as a schedule risk, not a formality

Review is not a rubber stamp, and treating a launch date as fixed before the app has actually been through it is how a shipped build becomes a missed date. It is also not a one-time event — every update after v1 goes through the same gate, on the same timeline.

Apple's review is a real gate

Typically 24 to 48 hours, but a rejection resets the clock, and the reasons range from a broken login flow to subscription-language guidelines that have nothing to do with your code. Budget a buffer week before any date you have promised to a stakeholder.

Google's review is faster and less forgiving on data

Play Store review often clears in hours, but its data safety declarations and permission justifications are checked more literally than Apple's, and a mismatch between what you declare and what the app actually collects gets a build pulled after launch, not before it.

Staged rollouts exist for a reason

A phased rollout to a percentage of Android users, or a TestFlight beta ahead of the public release, catches the crash that only shows up on a specific device or OS version. Skipping this step to save a week is the most common cause of the one-star reviews that show up in week one.

In-app purchases add a second review track

Any subscription or in-app purchase flow gets reviewed against pricing display rules, restore-purchase requirements, and a policy on external payment links that both platforms enforce more strictly than most first-time submitters expect. Budget it as its own review pass, not an afterthought bundled into the main submission.

Privacy labels are checked against what the app does, not what you say

Apple's privacy nutrition label and Google's data safety section both ask you to declare exactly what the app collects and why, and reviewers spot-check those declarations against the actual network traffic the build generates. A third-party analytics SDK you forgot was collecting device identifiers is the kind of mismatch that gets a build rejected on the second look, not the first.

What ships after v1

Shipping v1 is roughly half the lifetime cost

The build is the part everyone quotes. The two years of OS releases after it are the part that decides whether the app is still working, and it is where most agencies stop talking, because it does not fit neatly into a fixed-price pitch.

OS version churn is a recurring bill, not a one-time risk

Apple ships a major iOS version every September and Google ships Android on a similar yearly cadence, and both deprecate APIs on a schedule you do not control. An app that stops targeting a current SDK version within roughly a year gets flagged, then delisted — maintenance is not optional here, it is a subscription.

Android fragmentation is still real

Dozens of manufacturers ship their own modifications to stock Android, with different defaults for battery optimization, notification permissions, and background restrictions. An app tested on a Pixel can behave differently on a Samsung device with aggressive battery management switched on by default.

Battery and performance are the reviews you actually get

Users rarely leave a review about a missing feature. They leave one when the app drains the battery or a screen stutters. Profiling battery draw and frame rate on mid-range devices, not just the newest phone on your desk, is what keeps that review from happening.

A device lab matters more than a bigger simulator fleet

A simulator catches layout bugs; it does not catch the thermal throttling, the real GPS drift, or the background app-refresh behavior that only shows up on physical hardware a couple of OS versions behind current. A short list of real devices covering both platforms and at least one mid-range Android phone belongs in the test plan, not just the CI pipeline.

How an engagement runs

From framework decision to a build in both stores

The framework decision happens before anything is estimated, because it changes both the cost and the timeline above. After that, delivery follows the same two-week cadence as any other build here: a working app on a device you can hold, every increment, rather than a status update describing one — and the app you hold in week four is on the same architecture that ships to the store, not a throwaway prototype rebuilt later.

WK 1–2DiscoveryScope, risks,architectureWK 2–4DesignFlows, UI,data modelWK 3–10BuildTwo-week incrementsWK 9–11HardenQA, load,securityWK 12LaunchCutover andrunbookONGOINGOperateSLA, iteration

Related

Related services

What mobile projects usually need alongside the app itself.

Questions

Questions

What teams ask before a first call.

A single-platform MVP is the smallest of these, a cross-platform React Native build covering both stores sits in the middle, and a fully native iOS and Android build is the largest. None of them assume you already have designs, since design is usually the missing piece when someone asks.

Integration count and whether the app works offline are what move a mobile quote most. A scoping call produces a figure faster than any range on a page would.

Not sure whether this needs to be an app yet?

Thirty minutes with a mobile engineer, before anything is scoped. You will leave knowing whether native, React Native, or a mobile website is the honest answer for your product, what App Store review is likely to flag before it flags it, and roughly what a real build and its first maintenance year cost — whether or not you build it with us.