What a poor mobile decision actually costs
Every mobile project has three decisions that shape the next year of engineering. Get them right and the framework choice is a soft edit later. Get them wrong and every feature fights the skeleton.
- Platform choice: iOS only, Android only, or both. Picking both without a clear reason doubles the work and halves the focus.
- Technology choice: Flutter, React Native, or native. The right answer depends on the team, the design, and the hardware you need.
- Partner choice: the team writing the code. Outsourced to juniors, handed to a black-box vendor, or built with senior engineers who ship week after week. The money spent is not the same as the software shipped.
We set up the first two before any Dart or JSX gets typed. The third one is on you. We only ask for a discovery sprint before we quote the full build, so neither side signs a blank timesheet.
Choose your path
- Startup MVP - you have a spec, no team yet, and 12 to 20 weeks to prove demand. MVP sprint model. Usually Flutter or React Native. See Flutter App Development and React Native App Development.
- Scale-up growth - you have an app live, traffic growing, and a feature roadmap that is outrunning the team you have. Dedicated team model. See How we work below.
- Enterprise programme - regulated data, multi-stakeholder reviews, existing backend, compliance scope. Full product build with security and audit trail as first-class concerns.
- Existing app rebuild - a codebase built by someone else that is slow, crashing, or impossible to extend. Audit first, rebuild the parts that earn it, leave what works. See the takeover pitfalls section below.
Flutter vs React Native vs native - a comparison that is not marketing
| Axis | Flutter | React Native | Native (Swift / Kotlin) |
|---|---|---|---|
| Codebase | One Dart codebase for iOS, Android, iPad, web | One JS/TS codebase for iOS, Android, web logic | One codebase per platform |
| Animation ceiling | 120Hz via Impeller; custom widgets trivial | Reanimated 3 + Fabric gets close; not 120Hz for everything | Unconstrained |
| OTA updates | Not officially supported; workarounds exist | CodePush or Expo Updates - first-class | Not available; App Store review required |
| Hardware access | Platform channels; we write native code when plugins fall short | Native module bridging; strong for BLE, weaker for AR / HealthKit | Full, first-day access to every new OS API |
| Team shape | Dart expertise (smaller pool, fast to learn) | React + TypeScript expertise (large pool if the web team already exists) | Swift or Kotlin expertise (deep but specialised) |
| Long-term maintenance | Annual Flutter upgrades; framework stable since 3.x | Annual RN upgrades, Expo SDK cadence; New Architecture migration is one-time | Apple and Google evolve platforms on their own cadence |
| Best for | Multi-surface apps, design-heavy UI, cross-platform MVPs | React-heavy teams, JavaScript-first stacks, OTA-critical products | Hardware-first apps, Apple-only or Android-only products |
For most startups we recommend Flutter or React Native based on the team you already have. For enterprise with deep compliance or hardware stories, we recommend native or a hybrid (native shell + cross-platform modules). For design-first consumer products, we recommend Flutter.
What we build
- Real-time features - live bidding, live pricing, chat, presence, collaborative state. WebSocket or Socket.IO against a FastAPI service. Built for live auction bidding and live gold trading.
- Offline-first architecture - SQLite, Hive, or Drift on device. Writes queue, reads work in a tunnel. Conflict resolution explicit, not magic.
- Payment gateways - Stripe, Razorpay, Apple Pay, Google Pay, PayPal. Shipped multi-gateway for cross-border airtime top-ups.
- Biometric authentication - Face ID, Touch ID, fingerprint. Used as a second factor, not a sole factor.
- Location services and geofencing - radius queries, geohash indexing, background location. Shipped on FoodShare’s 10km radius sharing app.
- AI and ML integration - on-device models (CoreML, ML Kit) and cloud APIs (OpenAI, Anthropic). Keys stay server-side. See AI Integration Services.
- Third-party and enterprise system integration - SAP, Salesforce, Oracle, legacy SOAP endpoints that should not exist but do.
- BLE, NFC, and hardware connectivity - keyless access via BLE for the JustKeyLess keyless hotel access platform.
Platform-specific capabilities
- iOS: ARKit, HealthKit, CoreML, SiriKit, CarPlay, Apple Watch, WidgetKit, Live Activities, App Clips.
- Android: Android Auto, Wear OS, ML Kit, Google Wallet, NFC, Android Enterprise / MDM, sideloading.
- Cross-platform: shared logic libraries, OTA updates (React Native), CI/CD pipelines, feature flags.
How we work
Milestone-based, transparent. Each phase has a defined output and a billing gate.
Phase 1 - Discovery and strategy (week 1 to 2). Business goals, technical feasibility, competitor app teardown, tech stack recommendation, delivery milestones. Output: project blueprint, risk register, and a scoped proposal for the build.
Phase 2 - UX research and design (week 2 to 5). User personas, user-flow mapping, wireframing, prototyping, UI design against platform guidelines, design system. Output: clickable prototype and developer-ready design handoff.
Phase 3 - Agile development sprints (week 5 to 16+). Two-week sprints. Weekly demo on real hardware, not a slide. Feature-by-feature delivery with CI and automated tests. Output: working app builds every sprint, TestFlight from week two.
Phase 4 - QA and performance testing. Functional, regression, and UI testing. Performance and load testing. Security vulnerability assessment. Accessibility compliance (WCAG 2.2 AA). Device and OS fragmentation testing.
Phase 5 - Launch and app store deployment. App Store and Google Play submission. App Store Optimization (title, keywords, screenshots, description). Beta testing via TestFlight and Firebase App Distribution. Staged rollout. Output: live app with monitoring wired in.
Phase 6 - Post-launch growth and support. Crash monitoring, performance dashboards, OS compatibility updates, feature expansion, analytics and conversion work. Optional retainer for ongoing development.
Engagement models
- Full product development - we own strategy to launch. Best for startups and companies without a mobile team.
- Dedicated development team - your team, our developers. Onboards in 3 to 5 days. Best for scale-ups that need to accelerate or companies with an existing app and a feature backlog.
- Staff augmentation - add specific skills to your team. Best for enterprises filling React Native, Flutter, or native gaps.
- App audit and rescue - we audit an underperforming app and rebuild the parts that earn it. Best for apps with performance issues, tech debt, or outdated architecture.
- MVP sprint - fixed-scope rapid MVP build. Best for pre-seed startups validating an idea before fundraising.
Security, compliance, and IP
- NDA signed before every engagement begins.
- OWASP Mobile Top 10 as a baseline security posture.
- GDPR, HIPAA, PCI-DSS compliance when the product touches regulated data.
- Full IP transfer at launch. Source code, design files, CI configuration, infrastructure definitions, and documentation - all yours.
- Source code escrow available for enterprise engagements.
- API keys and secrets stay server-side. Never shipped in the mobile bundle where a decompile leaks them on day one.
Who builds your app
A typical project runs with:
- Product strategist - scope, roadmap, stakeholder alignment.
- UI/UX designer - research, wireframes, design system.
- Mobile developer - Flutter, React Native, Swift, or Kotlin depending on the pick.
- Backend engineer - FastAPI service, data model, integrations.
- QA engineer - automated tests, device matrix, release checklists.
- Delivery lead - sprints, demos, runbook ownership.
Senior-led throughout. We do not put juniors on your product without senior supervision.
Case studies
- Keyless hotel access across iPhone, iPad, and web - BLE lock integration, three form factors from one Flutter codebase, custom infinite-scroll booking calendar, FastAPI + SQL Server backend with append-only audit trail.
- Bilingual community app with jobs, housing, events, and clubs - Flutter iOS + Android, trilingual UI, age-gated content, in-app paid ticketing, segmented push channels, live on App Store and Google Play.
- Geofenced surplus-food sharing within 10km - Flutter + Firebase, geohash radius queries, server-side push fan-out via Cloud Functions, Algolia multi-facet search.
Common pitfalls we fix in takeover builds
More than half the mobile codebases we touch we did not start. A few problems keep showing up:
- Rebuild cascades in Flutter. The whole widget tree re-renders on a keystroke because state sits at the root. Move it to the smallest widget that owns it, use Selector or Consumer correctly.
- Unchecked re-renders in React Native. Inline object props, no useMemo, every tap re-renders the list. Memoise list items, reach for FlashList over FlatList.
- No crash reporting. Production is quiet until a user emails support. Sentry or Crashlytics on day one with release-tagged uploads.
- Manual store uploads from a laptop. Nobody remembers which build is prod. Fastlane + CI, every merge to main cuts a TestFlight build.
- Signing certificates expiring during a holiday. The app stops updating for three days. Shared signing vault, calendar alerts, runbook.
Why teams pick us
We recommend the framework that fits the product, not the one we happen to have capacity for this month. If native is the honest answer, we will say so and help you scope it, even when it means we do less of the work.
Everything we write is yours at launch: source, design files, CI config, infrastructure definitions. No vendor lock-in, no escrow fees, no “we still host the repo” arrangement.
Milestones are our billing gates. You see working software before you pay for the next slice. And we do not vanish at go-live. OS updates, regulatory changes, feature expansion - someone who shipped your app is still around to pick up the phone.