Shipping Software Is Different When Someone Depends on It
What operating Kashi taught me about production reliability, support, user behavior, and the work that continues after launch.
A demo usually follows the path its developer prepared. A customer doesn't.
They enter unexpected data, lose their connection, misunderstand a label, abandon a setup halfway through, and return days later expecting everything to be exactly where they left it.
Building and operating products changed what I pay attention to as an engineer.
The parts a demo doesn't show
Authentication and permissions. Database migrations. Failed payments. Backups. Monitoring. Support. Onboarding. What happens when an external service is unavailable.
These aren't exciting features, but they become important once another person relies on the product.
I started caring more about failure states and maintainability, not just whether a feature worked on my machine. A simple architecture I can debug under pressure is often better than an elaborate one I can't operate confidently.
Users are part of the engineering process
When multiple people misunderstand a screen, that's feedback about the screen. When they create accounts but don't finish setup, that's not necessarily an acquisition problem. When they cancel a trial, the next question isn't what feature to add; it's what they expected and what stopped them.
Kashi made this painfully clear. I shipped a working web and mobile product, ran ads, saw registrations and trials, and still struggled to retain users.
It was possible to be proud of the engineering and dissatisfied with the outcome at the same time.
The work doesn't end at launch
A personal project can demonstrate that I know how to build something. A product forces me to answer harder questions: Who needs it? How will they find it? Can they get value quickly? Will they trust it enough to return?
That's the work I enjoy now: building the software, putting it into the world, and letting actual usage change what I build next.