It's funny how every client's journey is similar: Kind 1 stuff gets developed really fast. Then it takes a long time until they implement Zaps because zaps are way too complicated compared to the rest. Then a second chasm happens when coding Nostr Wallet Connect because it requires a lot of async code, which is also too complicated. Then replaceable events make you redesign your indexing choices and your db becomes messy. With replaceable events, you can add lists, which take a leading position in the UI filters. Then you add DMs and other private decryption stuff that might need a new caching layer. Then labels and communities make you rethink what a feed is. And finally, if you are native, NIP-46/Android Signer makes you redesign the way you sign and encrypt/decrypt messages because everything is now async.