Another thing that came to mind to avoid relay centralization and both incentivize smaller community focused relays and reducing relay switching friction is tackling issue of finding people. Normally, the only way to find someone is for you to be on the same relay. People get around this by blasting to as many relays as possible but this doesn’t seem sustainable in terms of storage and bandwidth costs. Instead could we could blast notes containing only user info, particularly registered relays. The client could query users you follow and auto include relays based on the latest info blasted. When searching for a user you currently don’t follow, the client could include that user’s relays to your list and then you would retrieve messages from the newly added relays. Paying for relays can help handle the storage and bandwidth increases from blasting user info but it would hopefully be less data and sent less frequently than blasting posts everyone to improve discoverability. A side feature I would like that is slightly tangential to this is allowing for users via shortref of their pubkey in the same style as git commits. This could enable easier searching of profiles without the potential reduction of privacy that comes from using a NIP 5 address using a hosting service.
It would also be useful to select the relays to broadcast to when send message rather than sending to all relays. For easy selection, clients would ideally support labeling relays. This would allow targeted posting to communities.