What's included
The work, and what you receive
Each capability names an artefact you end up owning, not an activity we perform.
Offline-first data layer
Writes land locally first and reconcile when connectivity returns, with conflicts resolved on a stated rule.
You receive
- Local store
- Sync and conflict policy
Low-end device performance
Startup time, memory and battery measured on a mid-range device, not an emulator.
You receive
- Device performance report
- Agreed thresholds
Release engineering
Signed builds, staged rollout and crash reporting from the first release.
You receive
- CI/CD pipeline
- Rollout plan
- Crash reporting
Store readiness
Listing, permissions, privacy disclosures and review issues handled before submission.
You receive
- Store listing
- Privacy disclosures
Our approach
How this runs, and roughly when
Durations are bands, not promises. We revise them in the open when the work argues otherwise.
- 1
Decide the offline model
1 weekWhat works offline, what queues, and what genuinely requires a connection. Written down before any write path exists.
- Offline capability matrix
- Sync design
- 2
Build in increments
10–20 weeksFortnightly builds on a real device, with the offline paths exercised every time.
- Fortnightly builds
- Device test results
- 3
Field test
2–3 weeksReal users on real routes and real networks, including where there is no signal at all.
- Field test findings
- Fix list
- 4
Release and hand over
1–2 weeksStaged rollout, crash monitoring, and the runbook your team will operate from.
- Staged release
- Runbooks
- Monitoring
Tools we use
Boring, well-supported, and replaceable
We tell you when something newer is worth its risk, and when it is not.
- Kotlin
- Jetpack Compose
- Room
- React Native
- Firebase Crashlytics
Questions
Asked often enough to answer here
Working against a constraint?
Tell us what it is. We will tell you what we would build, what we would not, and what it would take.