The software people see
For most users, the app is the product. A device can have excellent hardware and firmware, but if pairing fails, readings lag or alerts arrive late, people blame the whole product. IoT apps have to handle unreliable connections, devices that sleep to save power, many devices per user and data that arrives out of order.
We build mobile companion apps for consumer and professional devices, web dashboards for operations teams and the cloud services underneath them, designed together so the experience stays consistent.
Problems we solve
- Device pairing that fails or confuses users
- Dashboards that show stale data without saying so
- Alert floods that teach people to ignore notifications
- No way to manage hundreds or thousands of devices at once
- Apps that break when firmware changes
What’s included
Companion mobile apps
BLE and Wi-Fi setup, control, status and notifications.
Fleet dashboards
Maps, health status, filtering and bulk actions across devices.
Alerts & rules
Configurable thresholds, escalation and quiet hours.
Data & reporting
Historical charts, exports and scheduled reports.
User & site management
Organisations, sites, roles and device sharing.
Firmware update UI
Schedule, track and roll back updates.
How we build IoT apps
We define a clear device contract first: the messages, commands and states a device supports, versioned so apps and firmware can evolve independently. The cloud keeps a “device shadow” or twin with the last known and desired state, so apps stay responsive even when devices are asleep or offline.
-
Device contract1–2 weeks
Messages, commands, states and versioning agreed with firmware engineers.
-
Cloud services3–6 weeks
Provisioning, ingestion, device twins, rules and APIs.
-
Apps4–10 weeks
Mobile and web front ends with offline handling and real-time updates.
-
Field testing2–4 weeks
Real devices, real networks, real users.
Designing for real-world conditions
| Challenge | How we handle it |
|---|---|
| Bluetooth pairing | Guided setup, clear permissions prompts and tested flows across phone models |
| Intermittent connectivity | Queued commands, last-seen timestamps and clear offline states |
| Time-series data volume | Purpose-built storage, downsampling and retention policies |
| Alert fatigue | Deduplication, severity levels and user-defined thresholds |
| Firmware versions in the field | Version-aware apps and backward-compatible messages |
We test with physical devices on a range of iOS and Android phones, because Bluetooth behaviour varies between manufacturers and OS versions more than almost any other mobile feature.
Timeline and budget
| Scope | Typical timeline | Typical budget (USD) |
|---|---|---|
| Companion app for one device | 8–12 weeks | $35k – $80k |
| Fleet platform with web dashboard and apps | 3–6 months | $80k – $200k |
Typical ranges to help you plan. Your written estimate comes after a free discovery call.
A typical IoT app architecture
Keeping these layers separate means a new device model, a new alert type or a new app screen can be added without touching the rest of the system.
Who uses an IoT app — and what each needs
| User | What they need from the app |
|---|---|
| Consumers | Simple setup, reliable control, clear alerts and nothing that feels technical |
| Installers & technicians | Fast commissioning, diagnostics, firmware updates and offline access on site |
| Operations teams | Fleet dashboards, bulk configuration, alarms and reports across many devices |
| Support staff | Device history, remote troubleshooting and the ability to see what the customer sees |
Many IoT products need two or three of these experiences. Treating them as separate apps or role-based modes — rather than one screen trying to serve everyone — keeps each one simple.
Device onboarding done right
Setup is where most connected products lose customers. Pairing a device, joining it to Wi-Fi and linking it to an account involves Bluetooth permissions, network credentials, cloud registration and sometimes a firmware update — all before the user sees any value.
-
Discover
Find nearby devices over Bluetooth or a QR code, with clear guidance if permissions are denied.
-
Provision
Send network credentials securely and confirm the device reaches the cloud.
-
Claim
Link the device to the user’s account so nobody else can take control of it.
-
Update & confirm
Apply any required firmware update and show a working first reading or action.
We test onboarding with real routers, weak signals, wrong passwords and interrupted sessions, because that is what happens in homes and on sites.
Connectivity choices and what they mean for the app
| Connection | App implications |
|---|---|
| Bluetooth Low Energy | Works without internet; requires careful permission handling and background limits on iOS and Android |
| Wi-Fi to cloud | Remote control from anywhere; app talks to your cloud API, not directly to the device |
| Cellular (LTE-M, NB-IoT) | No local pairing; data arrives in batches, so the app must show “last seen” clearly |
| LoRaWAN | Low data rates and delays; apps focus on readings and alerts rather than live control |
Testing an IoT app
- A device lab with each supported hardware revision and firmware version
- Simulated device fleets for testing dashboards at realistic scale
- Network conditioning to reproduce slow, lossy and offline connections
- Bluetooth tests on a range of Android manufacturers, where behaviour varies most
- End-to-end tests from a sensor reading through the cloud to a push notification
Questions to answer before you start
- Which device models and firmware versions must the app support at launch?
- Does the device need to work when the internet is down?
- Who can control a device, and how is access shared or revoked?
- How quickly must alerts reach users, and through which channels?
- Who owns the cloud platform and its running costs?
IoT apps sit on top of device firmware and a cloud back end. We also build the APIs and test automation that hold the system together.
Security for connected apps
An IoT app can unlock a door, change a thermostat or stop a machine, so its security matters more than most consumer apps. We give every device its own identity and credentials, encrypt traffic between app, cloud and device, and check permissions in the cloud for every command rather than trusting the app.
Account sharing is designed deliberately: owners invite others with specific roles, can see who has access and can revoke it instantly. Firmware updates delivered through the app are signed and verified by the device before installation, so a compromised phone cannot push malicious firmware.
Notifications that people do not switch off
Alerts are often the main reason an IoT app is opened. Too many and users mute them; too few and problems are missed. We group related events, let users choose thresholds and quiet hours, and send critical alarms through more than one channel, such as push plus SMS or email, when the situation demands it.
Related services
Part of our IoT & embedded development services. See also Flutter apps and data engineering.
This page is part of IoT & Embedded Development Services — see the full overview for related services, approach and pricing.