An Unlikely Project

September 2026

I started building Health Mirror in February, 2026.

About a week later, I had it running end-to-end on my phone.

I remember thinking: Wow. This actually works.

It did not, in fact, actually work. :)

But that first week showed me something else that was probably more important.

The distance between an idea and building it had suddenly become much shorter.

I was a principal product manager.

My job was usually the what and the why. Turning those into the how meant working with a full-stack R&D team, IT, operations, and more.

Large Language Models (LLMs) changed that relationship for me. I had an AI partner walking me through unfamiliar territory, although it wasn't in a straight line. :)

Health Mirror became my experiment in just how far that could go.

Then my one-week app met reality.

The first version kept everything on the phone, including AI inference.

I loved the architecture. Capture the image locally, prepare it locally, run the model locally, keep the result locally.

Then I tried to turn it into a real iOS and Android app.

For about a month, I played technological whack-a-mole trying to align dependency chains across the critical functions.

I'd resolve one incompatibility and another would appear. Upgrade one dependency and something else would stop working.

After a month of whack-a-mole, my AI partner finally said, “I don't have more suggestions. This is a rapidly developing ecosystem. It may be possible by the end of the year.”

We admitted defeat.

My project notes became rather definitive:

From my project notes

## ⚠️ Known Constraints & Decisions

### ❌ Abandoned Approach

* TensorFlow.js + React Native (Expo)

* Reason: incompatible with modern RN/Expo architecture

And:

From my project notes

## 🧠 Key Lessons Learned

* On-device AI with Expo + TFJS is not viable (current ecosystem)

* Native/runtime layer matters more than JS layer for ML

...

So I changed the team.

I brought in a second AI partner.

The three of us became enough of a sounding board. Eventually, one became my architect, and the other my coder.

Around the same time, I discovered something slightly embarrassing about my model. :)

The first version used softmax - handling an exclusive choice in image recognition. I had then moved to what I thought was sigmoid - allowing multiple independent labels per image, which was much more appropriate for tongue-pattern observations.

It was actually a simulated sigmoid, not the real deal.

So we retrained the model.

And retrained it again to optimize the output quality.

And again. :)

By April, we weren't patching the old approach anymore.

We kicked off a full-scale pivot.

What is the smallest thing that actually needs to leave the phone?

That question unlocked the architecture.

Instead of forcing camera capture, image decoding, tensor preparation, and machine-learning inference through one compatible mobile dependency chain across both iOS and Android, we moved one narrowly defined function to the cloud:

Inference.

Everything else could stay at the edge - where I wanted it.

The earliest version of that design still contemplated sending the image to the inference service. My notes from the time looked like this:

From my project notes

## 🔐 Privacy Design (MVP)

* Images sent to server for inference

* No persistent storage of images

* Processing done in-memory

* HTTPS required for production


## 🧭 Future Considerations (Post-MVP)

...

* Possible future migration: ONNX Runtime (on-device AI)

Later, we successfully experimented with breaking tensor preparation out as well without causing destructive impact on the delicate dependency chain, so the original image no longer needed to be sent to the cloud for inference.

Only the numerical tensor is sent.

The service runs the model and returns a list of prediction confidence scores.

The phone constructs everything else.

The technical answer changed quite a lot.

The principle didn't.

I wanted security and privacy there from line one.

I have a genuine passion for security, privacy, and compliance.

I find them fun.

Yes, apparently that's a thing. :)

I even took and passed the CISSP (Certified Information Systems Security Professional) exam - spanning eight domains of cybersecurity knowledge and much more commonly associated with dedicated security and IT professionals than product managers.

I feel a certain responsibility to make security happen when I have the opportunity.

After years in the corporate world, though, one pattern kept frustrating me:

Build the system. Connect everything. Collect the data.

Privacy and security are usually an afterthought.

By then, many of the important decisions have already been made. Changes are expensive, sometimes even economically prohibitive.

With Health Mirror, I had the opportunity to reverse that sequence by asking a very simple question from the start:

Do we actually need this data off the device?

Before launch, we also went through a privacy and security self-review, not because anyone required us to, but because I wanted the implementation, the privacy policy, and what we tell people to agree with one another.

After months of building this way, we had good reason to believe they did, but a final check might still catch something that had fallen through the cracks.

My “one-week app” took another six months.

There were plenty of other adventures between that first prototype and launch.

But this is probably what surprised me most:

AI didn't magically give me all the answers. It let me reach the next problem much, much, much faster.

I learned enough machine learning to discover why my first model was wrong. Enough mobile engineering to discover why my first app wasn't really an app. Enough architecture to know when the design I loved needed to change.

And when we hit something we didn't understand, the three of us could investigate it, argue with our assumptions, learn something new, and try again.

Six months after my one-week “working” app—while I was also working full time—Health Mirror became something other people could actually download.

My softmax became sigmoid.

My one AI partner became two.

My entirely on-device architecture gained one deliberately tiny cloud service.

And my experiment became a product.

That's a rather different journey from the one I believed in February.

I'm glad I didn't know all of it was coming. :)