Sad I had to kill a technically cool feature
I was proud of the feature. I was also relieved when I stopped carrying it on the standard visit path.
We wanted live audio from hospice visits for real-time document evaluation, but the recording still had to survive a bad connection. I forked the LiveKit React Native client and added native Android and iOS audio sinks. One microphone capture could feed the live stream and produce a local recording.
It was a satisfying technical solution. This is the story of why I stopped using it as the primary path.
The cost moved above the native code
The fork created an obvious maintenance burden. We had to carry native changes, track upstream dependencies, and ship a new application binary for fixes. I knew that when I chose it.
The harder cost appeared in the surrounding workflow. A recording could be local, live, connecting, reconnecting, switching modes, or stopping. Those states had to agree while the network changed and the user continued working. Testing variations in the pilot exposed consistency problems caused by races between those transitions.
I made the states explicit, added deadlines, and separated recorder state from network state. State machines for messy human workflows explains that work. It made failures easier to reason about, but it did not make the coordination free.
I tried to save the useful part
The feature still had value, so I narrowed it before removing it. I made live recording optional, then moved it away from the standard visit flow and into less critical workflows.
Meanwhile, real-time document evaluation became less important to users. Dependable capture did not. The primary recording path was carrying a native fork, two platform adapters, connection state, switching logic, and recovery behavior for a benefit that no longer justified that failure surface.
The pilot showed that live evaluation no longer justified the extra states on the path to dependable capture. I ended the effort as the primary path for standard visits.
What replaced it
The replacement was less clever and easier to trust: capture locally first, preserve and validate the artifact, then let upload and processing continue from that durable checkpoint. Recording is a distributed system covers the resulting design.