Most IoT apps assume connectivity. This one had to work when there was none. That single constraint changed everything about how we built it.
A farming client needed to monitor soil moisture, temperature, and irrigation conditions across 12 fields, all from a single app, in real time. Standard request for an IoT project.
Then the last constraint: no reliable internet on site. That changed everything. You can't build a real-time monitoring system for an environment where real-time connectivity doesn't exist without rethinking the architecture from scratch.
"Most IoT apps assume connectivity. This one had to work when there was none."
The app had to serve a farmer who might be standing in a field with spotty signal, or checking in remotely over cellular. We built two distinct communication layers and designed the UI to handle both gracefully.
Hardware integration ran over Bluetooth Low Energy for on-site control and MQTT over cellular for remote monitoring. Two protocols, one unified app experience.
The hardest problem wasn't the sensors, the Bluetooth stack, or the MQTT broker. It was a design question: what should the UI show when a device has been offline for hours?
If you show stale data without context, a farmer might irrigate fields that were already irrigated, or ignore a dry field because the last reading looked fine. Both scenarios cause real damage to yield.
We designed the UI to show data age transparently. Every sensor reading displays when it was last updated. If a device hasn't synced in over an hour, the reading is visually flagged as potentially stale. The farmer always knows what they're looking at and can make an informed decision.
This sounds simple. In practice, it required rethinking how every data point was stored, timestamped, and rendered, and how sync events would propagate through the UI without causing unnecessary re-renders on 100+ sensors.
Agriculture is one of those industries where a well-built app has a direct impact on yield and cost. Not hypothetically. Measurably. The 30% water savings translated directly into lower operating costs for the farm season over season.
Most developers treat offline support as a nice-to-have: a sync indicator, maybe a cached response. Building for an environment where connectivity is the exception, not the rule, requires treating offline as the primary state and online as the bonus.
This project also reinforced that the hardest problems in mobile development are often UX problems in disguise. The technical challenges around BLE and MQTT were solvable. Deciding how to communicate uncertainty to a farmer making operational decisions. That required real thought.
That is a speciality, not an afterthought. If you're exploring IoT, agriculture, or any field-deployed system, let's talk about the architecture before you start building.