Here's the tweetstorm version of my talk from @build_eth yesterday! I talked about how, from a user's perspective, dApps don't feel like normal apps. This is because of the inherent technology that makes dApps decentralized.
But dApps should feel like apps!
First, some alternative titles...
((please stare at the infinite spinner for 30 seconds to get the full effect))
Self-sovereign ownership is a paradigm shift in how we interact with the world. The ability to own a digital thing sans middleman is a revolution in our understanding of the digital realm. But it's _not_ easy to make that experience usable. (yet!!)
For now, dApps occupy a "they're different from apps" mindset in our developer-focused #buidl ecosystem. But for consumers, dApps should just be apps. The word 'dApp' shouldn't exist. Consumers don't care about decentralization or privacy or self-sovereignty.
One of the largest contributors to this "dApps are unique experiences" mindset is Severe Asynchronicity: the idea that blockchains are just really damn slow databases, and that directly affects how users operate your app.
The Severe Asynchronicity of the decentralized web robs users of confidence in their actions! "Is this even working" is a universal thought when using decentralized apps; the user has _no_ context and _no_ feedback on what's happening. Did they do it right??
The inherent knowledge of the space is something we take for granted, but newcomers 1) don't want to and 2) can't realistically learn about private keys, signatures, transactions, confirmations, Ethereum, etc.
It's all nonsense and completely useless for the user's experience.
So design your interface for the consumer; should they be seeing transaction hashes? Only if they're a developer! Take a learning from Gmail and hide SMTP headers behind a little carat. Or all of the developer information behind devtools. Design for layers of technicality.
Use the existing patterns of optimistic UI and optimistic state; don't make the user wait on actions that they can safely ignore.
Users need the confidence to proceed with whatever they were doing next, so give it to them!
If you have to block (for exchanges, high-value tx, etc), make blocking actions enjoyable.
And regardless, give users hella context about what's going on. Make sure they're not forgotten and that everything is going great.
New technology is scary! Reassure your users!
It's time to make passwordless auth UX a thing (this time for realsies!)
If a users sees a private key or a mnemonic, you've lost 98% of the world. Investigate projects like @uport_me that implement standardized DID and self-sovereign identity for Ethereum.
You can pay for a user's gas fees using signed intents rather that direct transactions! And then you can use any monetization model you want! I don't need crypto to be (relatively) self-sovereign!
ps: props to the @ideocolab fellows for pioneering some good thoughts on this!!
Basically: make dApps === Apps
notice the triple equals for strict equality!
You can do this by 1) embracing the technical differences (self-sovereignty, privacy, passwordless-ux, etc) and 2) smoothing over the bad stuff (like severe asynchronicity)
If you follow me, you already know about gnarly github.com/XLNT/gnarly but hey, check it out one more time, why not. Solves that whole severe asynchronicity thing.
Solving Severe Asynchronicity and consumer-focused UX, by the way, seems to be the trend at yesterday's BuildETH, which is excellent!
the hot take: total decentralization is great, philosophically, but no consumers are going to care for years, if ever. Build things that work well and deliver value today by making tradeoffs in decentralization.