Fleet Management Platform
Hospitals were losing hours to device failures the data could have flagged — if only it arrived in time.
Device error logs are processed in batch — so biomedical and field service engineers see failures hours after they happen, long after the window to intervene has closed. It is hardest for smaller, portable devices such as anesthesia machines, which move around the hospital and are difficult to cover with a service contract. Discovery with 20+ biomedical engineers made the real brief clear: this wasn't an analytics problem, it was a delivery problem. Those devices now push their log files in real time through an API for fault analysis, and we're migrating them one at a time toward the streaming platform (case study 02).
Current: scheduled batch
Still the bulk path today. Logs collected on a schedule and processed in bulk — engineers see what already happened, informative for root cause but useless for prevention.
Migrating to: real-time API
Log files pushed the moment an error occurs, routed by issue type to the engineer who can act. Rolling out device-by-device alongside batch, toward a full streaming end-state.
The engineers already knew what was wrong — that knowledge just needed to travel faster than the batch schedule allowed.
IoT Streaming Platform
Moving 5TB+ of daily telemetry from batch to streaming — and everything that became possible once we did.
At 5TB+/day, batch became the ceiling on everything: ML couldn't run on fresh data, remote diagnostics worked hours behind, and every new data source took ~4 months to onboard. The platform needed a new foundation — HIPAA-compliant throughout the migration, and open to products that didn't exist yet.
I started with service and remote engineers to find where latency actually changed a decision. Most use cases needed data within minutes, not milliseconds — so the North Star became the share of critical telemetry use cases with data available in under 5 minutes, not raw infrastructure latency. We onboarded the highest-value use cases first: fault detection fell from up to 24 hours to about 20 minutes, and the time-critical 20% of use cases are still heading for under 5.
Considered: Amazon Kinesis
Lower setup overhead, but shard pricing gets unpredictable at 5TB+/day — and a short replay window limits how far back ML teams can reach.
Chosen: MSK (Kafka)
We needed minutes, not milliseconds — so we chose for replayability, scale and an architecture the team could operate. Predictable cost at 5TB+/day, and log-based replay for any downstream consumer.
Three things sit on top of the stream. A pipeline health dashboard follows data from device to data lake and shows where packets are lost, delayed or duplicated — teams used it to cut P90 data latency by 30%. Reusable self-service dashboard building blocks, which teams extend for their own needs, grew users by 20%. And metadata governance on Glue Schema Registry, standardizing schemas and lineage across 5+ formats, took onboarding for internal quality and NPI teams from 4 months to days.
The product was never "a Kafka platform" — it was faster access to machine intelligence, so engineers could make decisions sooner.
GenAI Conversational Assistant
The answers existed — in telemetry, service manuals and training material — but engineers had to search each source and interpret it by hand. The assistant brings them together and answers in plain language.
MVP validated — engineer stays in the loopService and engineering teams had plenty of machine telemetry and technical documentation, but getting an answer meant going through several data sources and interpreting the result manually. The data wasn't the bottleneck; the last mile of understanding was.
Two kinds of knowledge feed the assistant. Unstructured material — service manuals, training content — is chunked, embedded and retrieved on demand (RAG), so the model answers from our documents rather than from memory. Structured machine data is queried directly. An orchestration layer brings both together and passes that context to the LLM.
Option A: raw columns
Hand the model the database fields as they are. Quick to wire up, but a column name says nothing about what Tube Temperature, Pressure or Flow Rate actually mean — generic outputs engineers won't trust.
Chosen: semantic metadata
Describe every parameter in metadata the model can read, so it interprets machine data the way an engineer would — specific enough to act on, and to ask follow-ups against.
The assistant recommends; it never acts on a machine or makes an irreversible service decision. The engineer makes the call, and we capture whether the recommendation was followed and whether it resolved the issue. I judged the product at three levels: did it retrieve the right information, was the response accurate and grounded, and did engineers investigate issues faster. Next: stronger retrieval and evaluation, tighter guardrails, and automating low-risk, reversible actions while keeping human approval for the rest.
The hardest part wasn't the model — it was teaching it what our parameters mean, so that asking it beat searching every source yourself.
AI Agents across the Software Lifecycle
Too much product time went into translating requirements into stories, then checking finished work against acceptance criteria. Two agents now take the first pass at both.
Pilot — early resultsOur product knowledge lived in Confluence, Git repositories and years of requirements, features and user stories in Rally. Turning a new requirement into well-structured engineering stories meant translating all of that by hand — and once the work was delivered, validating it against the acceptance criteria was manual too.
Considered: autonomous acceptance
Fastest on paper. But an AI agent independently accepting every software change puts speed ahead of judgment — and nobody is accountable when it gets one wrong.
Chosen: agent assesses, human decides
The Acceptance Agent gives an initial validation; a product or team member reviews it and makes the final acceptance decision. Speed where it is safe, judgment where it matters.
I drove the product side: defining the problems and workflows worth improving, working out where AI adds value, shaping the agent workflows and knowledge sources with engineering, and setting the human-in-the-loop model. Time saved is the headline, but not the whole picture — story quality, acceptance accuracy, human override rate and manual effort removed tell us whether the agents are actually good.
The goal isn't AI-written stories — it's less repetitive work across the lifecycle, with people still responsible wherever judgment or risk is involved.