I'm forging my own path and exploring how I can interact with the protocol without nanny rails and glossy buttons. it's very difficult at the moment because the protocol is still in it's infancy and keeps changing with new features added continuously. I had to rewrite my client a bunch of times because when I think I have a good base, suddenly the big clients start to adopt a new NIP that renders my code unfit (bech32, rpe, outbox, etc...), the paradigm of what a client should do keeps changing, so there's no time to sit and design with a clear focus because users keep expecting their client to adopt whatever the other clients have. IMO, good design will only arise when a client can confidently stay in a fixed set of features, but for now it's been more on having all the features functioning than having them be designed properly.