We began with a four-week consulting engagement rather than code, mapping the OT/IT boundary, the regulatory data-access matrix, and the actual latency budget of each use case, which established that near-real-time was necessary for outage detection but 15-minute batch was perfectly adequate for loss analytics, a distinction that shaped the whole architecture and roughly halved its cost. The head-end kept its file exports, now picked up every few minutes; a growing population of LTE-M meters streams directly through AWS IoT Core.
Both paths converge on Kinesis, where a validation-estimation-editing pipeline cleans reads before anything downstream consumes them, utilities live and die by VEE, and doing it in stream meant billing, analytics, and operations finally shared one version of the truth. Outage detection clusters meter last-gasp messages by feeder and substation topology: a median detection time of 45 seconds, against 41 minutes for the first customer call, with crews dispatched to a mapped fault segment instead of a neighborhood.
Loss analytics compares energy delivered at each feeder head against the sum of downstream metered consumption, ranked into a weekly investigation queue for the revenue-protection team. Day-ahead load forecasting moved from spreadsheets to gradient-boosted models on SageMaker, trained per substation with weather and calendar features, and the two analysts who owned the spreadsheets now own the models, that handover was a project deliverable, not an afterthought.