My rule for AI-generated code: If I cannot explain why it works, I don’t trust it yet. Especially for encryption, billing, and data recovery. #buildinpublic #indiedev
Felix Yew
@felixyew.bsky.social
Indie hacker 🚀 | Developer 👨‍💻 | Entrepreneur building startups & solving problems | Passionate about fintech, AI, and cloud security
AI has changed how I work. I spend less time typing repetitive code. More time reviewing assumptions, tests, architecture, and strange edge cases. Typing faster was never the hardest part. #buildinpublic #indiedev #AIcoding
Some developers measure a good day by commits. Sometimes I measure it by helping one user understand where their photos are. Both matter. #buildinpublic #indiedev
For apps storing important personal data, investigate missing-file reports before treating them as UI issues. Confirm storage location, sync state, deletion state, and backup availability. Never guess. #buildinpublic #indiedev
A support email can change my entire workday. Especially when it involves photos that someone cannot find. Suddenly the roadmap doesn’t feel important. Helping that user does. #buildinpublic #indiedev
New app development: Let’s design the perfect architecture. Mature app development: Please don’t break the users who installed version 3.2 six years ago. #buildinpublic #indiedev
Safety Photo+Video has years of existing user data. I cannot treat an upgrade like a fresh project. Old databases, old purchases, old storage structures. Every improvement comes with history. #buildinpublic #indiedev
Backward compatibility is one of the most underestimated costs of software. Building the new feature is often easier than making sure existing users lose absolutely nothing. #buildinpublic #indiedev
Developer brain at 11 PM: What if a user subscribes on iPhone A, logs into account B, restores purchases on iPad C, then renews on Android? Goodnight, apparently. #buildinpublic #indiedev
A lesson from subscription architecture. Never make permanent ownership depend on temporary session state. Users log out. Devices change. Store accounts change. Ownership should remain predictable. #buildinpublic #indiedev
One interesting challenge with cloud subscriptions: A payment can renew while the original account is signed out. The backend still needs to know who owns that subscription. Current login is not ownership. #buildinpublic #indiedev
Me: Subscription logic should be simple. App Store: Hello. Google Play: Hi. RevenueCat: Nice to meet you. Multiple accounts: Surprise! #buildinpublic #indiedev
For subscription systems, separate 3 things: • Who paid • Who owns the service • Who is currently logged in They may look identical in testing. In production, they can be completely different. #buildinpublic #indiedev
Monday morning. Opened the project expecting to work on something new. Instead, I found myself reviewing subscription ownership logic. The feature works. But does it still work when users change devices or accounts? That’s a different question. #buildinpublic #indiedev
Next week’s goal: Keep Safety Photo+Video powerful on the inside and boringly reliable on the outside. That is harder than it sounds. #buildinpublic #indiedev
Building in public is useful because it reminds me: Progress is not only what I ship. It is also what I understand better than two weeks ago. #buildinpublic #indiedev
Two more weeks done. Some AI assistance. Some architecture work. Some bugs. A lot of deleting things I once thought were necessary. #buildinpublic #indiedev
You know a file needs refactoring when opening it feels like entering a room where everyone stopped talking. #buildinpublic #indiedev
Refactor before a module becomes scary. Fear is a terrible dependency-management strategy. #buildinpublic #indiedev
Spent today cleaning up a module that had grown slowly over years. Nothing inside was terrible. There was just too much of everything. That kind of complexity sneaks up on you. #buildinpublic #indiedev
Privacy-friendly debugging: Know exactly what happened. Know absolutely nothing about the photo. That is the goal. #buildinpublic #indiedev
One thing building a privacy app taught me: Sometimes the best debugging tool is data you deliberately chose not to collect. That makes architecture and safe diagnostics much more important. #buildinpublic #indiedev
Developer workflow: Backend state confusing. Solution A: fix backend. Solution B: add six frontend conditions. Guess which one feels faster today and hurts more tomorrow. #buildinpublic #indiedev
If several screens need different workarounds for the same state, fix the state model. UI patches age badly. #buildinpublic #indiedev
Today I caught myself trying to fix an architecture problem inside the UI. Stopped. Went back to the source. The UI should display truth, not invent it. #buildinpublic #indiedev
Billing architecture is easy. Until you add: multiple devices multiple accounts renewals restore purchases logout Then the whiteboard starts fighting back. #buildinpublic #indiedev
For anything involving ownership, write the invariant in one sentence before writing code. If you cannot explain who owns what, the implementation will eventually disagree too. #buildinpublic #indiedev
Spent the morning simplifying ownership logic around cloud features. Anything involving accounts + subscriptions + devices becomes complicated surprisingly fast. #buildinpublic #indiedev
Device A: I’m correct. Device B: No, I’m correct. Backend: Please stop fighting. #buildinpublic #indiedev
If your app syncs across devices, test conflicts intentionally. Two devices. Same object. Different changes. Bad timing. That is where assumptions show themselves. #buildinpublic #indiedev