How being “flexible” can bloat a protocol


(A somewhat absurd example, but you’ll get the idea)

Iimagine some client decides to add support for a variant of nip05 that checks for values at /.well-known/nostr.yaml besides /.well-known/nostr.json. “Why not?”, they think, “I like YAML more than JSON, this can’t hurt anyone”.

Then some user makes a nip05 file in YAML and it will work on that client, they will think their file is good since it works on that client. When the user sees that other clients are not recognizing their YAML file, they will complain to the other client developers: “Hey, your client is broken, it is not supporting my YAML file!”.

The developer of the other client, astonished, replies: “Oh, I am sorry, I didn’t know that was part of the nip05 spec!”

The user, thinking it is doing a good thing, replies: “I don’t know, but it works on this other client here, see?”

Now the other client adds support. The cycle repeats now with more users making YAML files, more and more clients adding YAML support, for fear of providing a client that is incomplete or provides bad user experience.

The end result of this is that now nip05 extra-officially requires support for both JSON and YAML files. Every client must now check for /.well-known/nostr.yaml too besides just /.well-known/nostr.json, because a user’s key could be in either of these. A lot of work was wasted for nothing. And now, going forward, any new clients will require the double of work than before to implement.