Industrial App Development

Build custom app solutions with Scrums.com's expert development team. With an NPS (Net Promoter Score) of 82, Scrums.com crafts cost-effective, custom applications that drive results.

Manufacturing plants, energy operators, and heavy industry companies building equipment monitoring platforms, predictive maintenance systems, and industrial workflow software need engineering teams who understand both the real-time telemetry architecture and the operational safety requirements these environments impose. Scrums.com provides dedicated software engineering teams for industrial software development, deploying production-ready systems with IoT sensor pipelines, OPC-UA and MQTT integration, append-only equipment event logs, and the anomaly detection infrastructure that drives predictive maintenance.

IoT Sensor Ingestion, Equipment Telemetry, and Edge Architecture

Industrial platforms ingest high-frequency data from heterogeneous sensor types (temperature, pressure, vibration, flow rate, current draw, torque) across hundreds or thousands of assets simultaneously. The ingestion architecture must handle burst volumes, device outages, and partial data without dropping readings.

The sensor data model uses a telemetry_readings table: asset_id, sensor_id, reading_type (TEMPERATURE | PRESSURE | VIBRATION_RMS | CURRENT_AMPS | FLOW_RATE | RPM | TORQUE), reading_value, unit, recorded_at (sensor timestamp), ingested_at (server timestamp), and source_protocol (MQTT | OPC_UA | MODBUS | HTTP). The recorded_at/ingested_at separation handles edge buffering: sensors in remote locations batch readings during connectivity outages and upload in bulk; queries always filter on recorded_at.

Deduplication uses a UNIQUE constraint on (asset_id, sensor_id, recorded_at) with ON CONFLICT DO NOTHING. The telemetry_readings table is append-only. For continuous high-frequency streams (vibration at 1kHz+, current draw at 100Hz), raw data writes to a TimescaleDB hypertable with BRIN indexes and time-based compression. Downsampled materialised views serve dashboards; raw data is retained at full resolution for root cause analysis.

Edge computing is supported through an edge_devices table: device_id, location_id, firmware_version, connectivity_status, last_heartbeat_at, and a buffer_config (JSONB for store-and-forward settings). Edge devices write to a local buffer and upload to an edge_upload_queue on reconnect. The upload queue consumer is idempotent on (device_id, batch_id).

The current_sensor_status materialised view holds one row per sensor with the latest reading_value, recorded_at, and data_freshness_status (LIVE | STALE | OFFLINE based on configurable thresholds). This drives the live equipment dashboard without querying the telemetry_readings table directly.

Predictive Maintenance, Anomaly Detection, and Work Order Workflow

Industrial platforms derive their operational value from detecting equipment degradation before failure. The anomaly detection and maintenance workflow architecture determines whether the platform prevents downtime or just records it.

Anomaly detection uses a detection_rules table: rule_id, asset_id (or asset_type for fleet-wide rules), sensor_id, detection_method (THRESHOLD | RATE_OF_CHANGE | Z_SCORE | CUSUM | FFT_PEAK), threshold_config (JSONB), severity (CRITICAL | MAJOR | MINOR), and a flag to suppress alerts during planned maintenance windows. Rules are stored as config, not code: new detection methods add a strategy implementation; the rule row controls which strategy fires.

Every telemetry reading evaluated against detection_rules writes a detection_evaluations row regardless of outcome: a full audit trail of every anomaly check. When a rule fires, an anomaly_events row is created: asset_id, rule_id, triggering_reading_id, detected_value, severity, detected_at, and a status machine (OPEN / ACKNOWLEDGED / UNDER_INVESTIGATION / RESOLVED | FALSE_POSITIVE). Status transitions write anomaly_status_events rows.

Work orders are generated automatically from anomaly_events at or above a configurable severity threshold. The work_orders table: work_order_id, asset_id, trigger_type (ANOMALY | SCHEDULED | MANUAL | INSPECTION_FINDING), priority (P1 | P2 | P3 | P4), status machine (CREATED / ASSIGNED / IN_PROGRESS / PARTS_REQUIRED / ON_HOLD / COMPLETED | CANCELLED), assigned_technician_id, due_at, and a work_order_events child table. Work orders are never deleted; cancellation uses the CANCELLED terminal state.

Planned maintenance schedules use a maintenance_schedules table: trigger_type (CALENDAR | RUNTIME_HOURS | CYCLE_COUNT | CONDITION_BASED) and interval parameters. A scheduler job checks due maintenance against asset runtime hours (aggregated from telemetry_readings) and calendar, creating work_orders for due items. Maintenance completion writes a maintenance_completions row with technician_id, completed_at, duration_minutes, parts_used (JSONB), and next_due_at computed from completion timestamp.

Industrial apps like these are built and delivered by dedicated engineering teams through our mobile app development service.

Asset Management, OEE Analytics, and Production Reporting

Asset management covers the full equipment lifecycle from installation through decommissioning. Each asset record carries a typed status (OPERATIONAL, DEGRADED, UNDER_MAINTENANCE, or DECOMMISSIONED) and status transitions are recorded in an append-only asset_status_events table with the triggering work order reference, responsible technician, and timestamp. DEGRADED is entered automatically when predictive maintenance anomaly scores breach a configured threshold; UNDER_MAINTENANCE is entered when a work order is opened against the asset; OPERATIONAL is restored when the work order is closed with a resolution outcome. Assets cannot be moved directly from UNDER_MAINTENANCE to DECOMMISSIONED without an intermediate operational period or an explicit decommission approval event, enforced by transition validation logic.

Overall Equipment Effectiveness (OEE) is calculated as Availability multiplied by Performance multiplied by Quality. Availability is derived from uptime events vs planned production hours; Performance from actual output rate vs designed output rate; Quality from accepted units vs total units produced. These source values are recorded as append-only rows in their respective event tables. The oee_by_asset_by_shift materialised view aggregates them per asset per shift period and is refreshed at shift close. OEE scores are never stored as mutable values: the materialised view is always recomputable from source events, so a correction to any source row (for example, reclassifying a downtime event from PLANNED to UNPLANNED) regenerates the correct OEE figure automatically.

Shift reporting uses a shift_reports materialised view that is auto-generated at shift close. Each report captures total production volume, total downtime duration, downtime breakdown by category (mechanical, electrical, material, quality, planned), OEE score, top fault codes, and energy consumption per asset. Shift supervisors receive the report via notification without manual assembly. Historical shift reports are immutable snapshots; corrections are applied to source event tables and the view is refreshed, not by editing the report record directly.

Production reporting materialised views extend beyond the shift to support daily, weekly, and monthly aggregations. A production_summary_by_line_by_day view supports operations management dashboards, while a quality_defect_pareto_by_week view ranks defect codes by frequency and supports root-cause prioritisation. All views are driven from the same append-only source tables, ensuring that dashboard figures and export reports are always consistent.

Safety Inspection Systems, Permit-to-Work, and SCADA Integration

Safety inspection workflows capture structured checklists against assets, locations, and work orders. Each inspections record carries a state (SCHEDULED, IN_PROGRESS, COMPLETED, or FAILED) and each line item in inspection_items carries an outcome of PASS, FAIL, N/A, or ACTION_REQUIRED. FAIL and ACTION_REQUIRED outcomes automatically create corrective_action_requests linked to the inspection item, the responsible team, and a due date derived from the severity configuration table. Corrective action status flows through OPEN, IN_PROGRESS, VERIFIED, and CLOSED states, with each transition appended to a corrective_action_events log. Inspections cannot be marked COMPLETED while any ACTION_REQUIRED item has an open corrective action, enforced at the application boundary.

Permit-to-Work (PTW) controls access to hazardous work areas and energy isolation points. Permits follow a state machine: REQUESTED, UNDER_REVIEW, APPROVED, ACTIVE, SUSPENDED, CLOSED, or REJECTED. The critical constraint is that ACTIVE is only reachable from APPROVED: this transition is enforced via a status_transitions configuration table in the database, not in application code, meaning the gate cannot be bypassed by a code path that skips the approval step. Energy isolation steps for each permit are recorded in an energy_isolation_log table as immutable rows; isolation cannot be marked as removed until the permit reaches SUSPENDED or CLOSED, preventing re-energisation of equipment while a permit is active.

SCADA integration connects the platform to plant control systems via OPC-UA. A dedicated OPC-UA adapter reads tag values from SCADA servers on a configurable polling interval and writes normalised readings to a scada_read_log table. Alarms raised by SCADA systems are captured in scada_alarm_events with alarm type, severity, tag reference, and acknowledgement status. A scada_correlation_map table links SCADA tag identifiers to platform asset identifiers, allowing alarm events to be automatically associated with the correct asset record and trigger work order creation when alarm severity and duration thresholds are met. Adding a new SCADA data source requires a new adapter configuration entry, not a code change, keeping OT and IT integration manageable as plant topology evolves.

Regulatory and compliance reporting for industrial environments requires evidence that safety controls were active and effective. The append-only structure of inspection records, corrective action logs, permit state events, energy isolation logs, and SCADA alarm events provides a complete, tamper-evident audit trail. Compliance reports can be generated directly from these source tables without relying on summary values that could be edited after the fact.

Frequently Asked Questions

How does the platform handle edge devices that lose connectivity to the central server?

Edge devices buffer sensor readings locally during connectivity outages and push queued data when the connection is restored. The ingestion pipeline accepts out-of-order rows keyed on the device's native timestamp rather than server arrival time, so buffered readings land in the correct chronological position in the sensor_readings table. BRIN indexes on the timestamp column keep time-range queries efficient even when rows arrive late.

How is anomaly detection configured without changing application code?

Anomaly detection thresholds (baseline ranges, deviation multipliers, rolling window lengths, and minimum observation counts) are stored in a maintenance_rules configuration table rather than in application code. Maintenance engineers update rule parameters through a configuration interface, and the updated thresholds apply to the next evaluation cycle without a deployment. This allows teams to tune detection sensitivity as equipment ages or operating conditions change.

If an OEE source value is corrected retroactively, does it affect historical reports?

Yes. OEE scores are stored in a materialised view (oee_by_asset_by_shift) that is always recomputable from source event rows. If a source row is corrected (for example, reclassifying a PLANNED downtime event as UNPLANNED), refreshing the materialised view regenerates the correct OEE figure for the affected shift. Historical OEE reports are therefore automatically corrected without manual data patching.

What prevents a permit from moving to ACTIVE without passing through the APPROVED state?

Permitted state transitions are defined in a status_transitions configuration table in the database. The ACTIVE state can only be entered from APPROVED, and this constraint is enforced at the data layer, not in application code alone. Any code path that attempts to write a permit to ACTIVE from any other state will be rejected by the transition validation check, which reads the permitted transitions from the configuration table at runtime.

How long does it take to deploy an industrial software platform with Scrums.com?

Scrums.com deploys dedicated engineering teams within 21 days. The team integrates with your existing SCADA systems, historian databases, and device hardware, and delivers core asset management, predictive maintenance, and production reporting functionality in the first sprint. Scope and timeline are agreed before engagement begins.

Want to Know if Scrums.com is a Good Fit for Your Business?

Get in touch and let us answer all your questions.

Book a Demo

Don't Just Take Our Word for It

Hear from some of our amazing customers who are building with Scrums.com Teams.

"Scrums.com has been a long-term partner of OneCart. You have a great understanding of our business, our culture and have helped us find some real tech rockstars. Our Scrums.com team members are high-impact, hard working, always available, and fun to have around. Thanks a million!"
CTO, OneCart
On-demand marketplace connecting users and top retailers
"The Scrums.com Team is always ready to take my call and assist me with my unique challenges. No problem is to big or small. Great partner, securing strong talent to support our teams."
CIO, Network
Leading digital payments provider
"Finding great developers through Scrums.com is easier than explaining to my mom what I do for a living. Over the past couple of years, their top-tier devs and QAs have plugged seamlessly into Payfast by Network, turbo-charging our sprints without a hitch."
Engineering Manager, PayFast by Network
A secure digital payment processor for online businesses
"Our project was incredibly successful thanks to the guidance and professionalism of the Scrums.com teams. We were supported throughout the robust and purpose-driven process, and clear channels for open communication were established. The Scrums.com team often pre-empted and identified solutions and enhancements to our project, going over and above to make it a success."
CX Expert, Volkswagen Financial Services
Handles insurance, fleet and leasing
"The Scrums.com teams are extremely professional and a pleasure to work with. Open communication channels and commitment to deliver against deadlines ensures successful delivery against requirements. Their willingness to go beyond what is required and technical expertise resulted in a world class product that we are extremely proud to take to market."
Product Manager, BankservAfrica
Africa's largest clearing house
“Scrums.com Team Subscriptions allow us to easily move between tiers and as our needs have evolved, it has been incredibly convenient to adjust the subscription to meet our demands. This flexibility has been a game-changer for our business. Over and above this, one of their key strengths is the amazing team members who have brought passion and creativity to our project, with enthusiasm and commitment. They have been a joy to work with and I look forward to the continued partnership.”
CEO & Co-Founder, Ikue
World's first CDP for telcos
“Since partnering with Scrums.com in 2022, our experience has been nothing short of transformative. From day one, Scrums.com hasn't just been a service provider; they've become an integral part of our team. Despite the physical distance, their presence feels as close and accessible as if they were located in the office next door. This sense of proximity is not just geographical but extends deeply into how they have seamlessly integrated with our company's culture and identity.”
SOS Team, Skole
Helping 60k kids learn, every day
"Scrums.com joined Shout-It-Now on our mission to empower young women in South Africa to reduce the rates of HIV, GBV and unwanted pregnancy. By developing iSHOUT!, an app exclusively for young women, and Chomi, a multilingual GBV chatbot, they have contributed to the critical task of getting information & support to those who need it most. Scrums.com continues to be our collaborative partner on the vital journey."
CX Expert, iShout
Empowering the youth of tomorrow
"Scrums.com has been Aesara Partner's tech provider for the past few years; and with the development support provided by the Scrums.com team, our various platforms have evolved. Throughout the developing journey, Scrums.com has been able to provide us with a team to match our needs for that point in time."
Founder, Aesara Partners
A global transformation practice

Find Related App Types

Retail Management app

Production app

Invoicing App

Payment Gateway app

Inventory tracking app

Blockchain App