Crypto design challenges
It’s still early days in crypto.
That’s what you’ll hear everywhere when you start digging into crypto and web3 today. For most new users this unfortunately feels a bit closer to the wild west. There are a myriad of situations where they might not know what's happening and where they don't trust the system, services or tools they're using.
Early adopters face foreign terminology, complex UIs, unexpected and exorbitant fees, security issues, slow transactions, confusing errors, scams and more. That makes for one hell of an onboarding, even if you're lucky enough to have a friend showing you the way.
This is the state of crypto today. That can work for now—early adopters are motivated enough to jump through hoops to try something new—but this won’t scale as billions of users join the crypto ecosystem in the coming years.
But this is all known; there are many new technologies and protocols vying to evolve, change or fix things. I’m most interested in the design side of things.
Can we even design truly great experiences for common activities in crypto today? Does the underlying tech have to evolve significantly first? What's the best we can do with today's technological constraints?
The crypto users of tomorrow will have different motivations and expectations than the early adopters today. They won't put up with clunky, confusing, unreliable, unsafe and expensive systems. Great design—for wallets, exchanges, identity, dApps, marketplaces, DeFi and more—will be the bridge to help get us there.
Everyone likes to say that in the future maybe crypto users won’t even know they’re using crypto; that the blockchain and complementary systems are just the technology powering everything behind the scenes. We can only get there if we design for trust and use that as a critical lens through which we analyze every aspect of the crypto experience today.
Designing for trust
So you might be thinking.. okay this is totally wrong and even the Bitcoin whitepaper established that cryptographic proof should be used instead of trust for decentralized systems. And that the ethos in the crypto community today is "Don't trust, Verify."
Yea, that's all true. But what I'm talking about is one level up than the blockchain itself. I'm talking about the interfaces people interact with to do what they need to do, which may happen to be directly on or indirectly related to the blockchain. It's about elevating context and providing signals about their interactions so they can feel safer to make decisions about what actions to take and which actions to avoid.
Public blockchains like those that power Bitcoin and Ethereum are permissionless. Lack of trust, centralized servers and third parties is a feature. They're entirely open networks where any participant or machine can see what's happening. While this leads to a level of trust with the ability for anyone to track and verify all transactions, that’s where the trust ends.
As active web3 participants 1 we regularly interact with dApps, smart contracts and more that we should not simply trust by default. But there’s also a person's trust of the blockchain itself. Ever had a transaction fail due to gas issues? Or new tokens you just sent to your wallet from your exchange not appear in a timely manner? Issues like this won't inspire much confidence in crypto for new users.
A great crypto experience2 designed for trust will help you make an informed decision by elevating all the information you need, especially if that information comes from multiple places. I’ll dive into that more a bit later.
Current state of crypto
I'll be the first to admit that it's easy to sit here and write about how I think crypto experiences today could be improved, especially while largely ignoring technical feasibility and challenges. It's so early and it's not easy building such expansive and composable decentralized infrastructure.
Unlike just about everything else we've come to expect with modern technology, popular blockchains like Ethereum are not instantaneous. In fact they're slow and worse, expensive.3
I mean if anything was possible, I don't think anyone would think that the best way to store all their valuable assets would be in a little Chrome extension that injects JS into a website where malicious actors could trigger phishing prompts. It's just the easiest way to quickly build things today.
Lots of crypto experiences are built around existing constraints. As usage, utility and demand increases in the future, we'll be able to push on these constraints.
What we can do today
One of the reasons I'm so excited about web3 is that everything so desparately needs design help that almost any attention to detail anywhere in any common flow would be tremendously valued. It's like getting in on the ground floor of helping define key interactions in browsers, email clients and other core tools during the formation of Internet.
You can design how people interact with anything related to the blockchain: wallets, exchanges, dApps and more. You could have a lasting impact in a ridiculously fast growing space.
Crypto has been around for about a decade—long enough to prove there's something here and see growth but still nascent enough that there's plenty of things left to figure out, define and invent. How often do these opportunities come around?
But I digress..
Today, we can get very familiar with the technical constraints of crypto systems and design for trust and clarity over all touchpoints of someone's journey. This article is in no way meant to be a complete overview of all design challenges in crypto. I wouldn't be able to write that; this is just meant to highlight a few areas that have been top of mind for me.
There's several high-priority areas to explore starting when someone first hears about crypto to learning about how and where to use it but I'm most interested in these:
Exchange experience & Onboarding
As hundreds of millions of people interact with crypto for the first time, it's very likely that their first experience will be with a centralized exchange where they can exchange their local fiat currency for their first Bitcoin, Ethereum, stablecoin or other crypto asset. There's lots of responsibility and opportunity here to set new users up for success.
For some, just holding crypto assets may be enough, but many will be drawn to all that web3 offers from various dApps to NFTs and more. A crypto wallet is the passport to web3 and making it clear how to set one up, become familiar with connecting to other services, dealing with transactions and more will be a key experience to get right.
Web3 guidance & curation
This is the discovery phase for slightly more advanced users that are now asking "What can I do with my crypto?" There are opportunities to help people discover what exists, what is safe to use and guide people along the way. It's 1998 and people rely on AOL or the Yahoo! homepage to show them what's out there. What's the curated search engine for crypto?
There are a few projects in this space like Rabbithole.gg, Zapper.fi's Quests and Layer3.xyz, though I think most of them are a bit too complex or don't yet do a great job yet on educating behind why someone would want to do a certain task. Another interesting one is Context.app, helping with NFT discovery.
I also think there's a huge opportunity around decentralized identity; I touch on that a bit in the next section.
Exchange experience & Onboarding
In the coming years, hundreds of millions of people will interact with cryptocurrency on-ramps—exchanges and similar services where they can receive their first cryptocurrencies and other crypto assets. For most people, this will be with a centralized exchange (CEX). Exchanges will be most people's first time truly interacting with crypto. Exchanges will need to simplify, educate and guide these new users every step of the way.
Exchanges should explain the difference between different types of cryptocurrencies (including stablecoins), potential for volatility and potential for utility of each type. They should equip people with a basic understanding of security should they transfer their assets to a wallet outside the exchange.
But before all that, there's a lot of opportunity to simplify the required KYC ("Know your customer") flows that require you to verify your identity. There's nothing easy about these flows as they require a tedious process of uploading photos of your id. Even small enhancements like integrated camera flows instead of requiring switching to the camera app, letting you easily resume onboarding if you're not in a place to do this yet (send me a reminder push notification in X hours) or letting you setup the rest of your account and upload your id when you can later would be welcomed.
At some point these people may want to do something more than just buy or sell their crypto. Exchanges can educate around dedicated, non-custodial wallets. Even small things like transferring Ether to a new wallet can be daunting. Exchanges can also begin to set the expectation that outside the exchange, transactions are usually not instant and that depending on the service, sometimes require significant fees and time.
I could go on and on. So much opportunity here.
Wallet experience Transactions
Wallets started out as only being responsible for managing and facilitating basic crypto asset transfers. Today they are responsible for a whole lot more. Modern wallets deal with showcasing NFTs, all sorts of tokens, dealing with complexities related to separate blockchains and Layer 2 assets, token swaps, connecting with dApps and more.
Wallets are a frequent and primary touchpoint for interacting with countless web3 services, protocols, other wallets and more. Designing for trust inside the wallet is of prime importance. There are no gatekeepers with decentralized services; just a lot of entities you'll individually interact with. As such it’s important to make it clear exactly what’s happening each time you interact with another user, smart contract, dApp, et cetera.4
A core part of all wallets is a way to list transactions. Too many wallets today treat this as a list of data without much thought about what it means for the user and within the context of trust.
Here are a few things I've been thinking about in regards to displaying transactions and assets:
Be hyper transparent around transaction status. We expect things today to be instant but the blockchain is one of the only pieces of modern technology that can feel very slow at times. We need to take great care in displaying transaction status. The average user should never have to visit Etherscan/Polygonscan/etc just to see how much time is left with their transaction. There should never, ever be any doubt in their mind about what's happening to their money or transaction.
A basic "sending/pending" state is not enough. Can you imagine not having a progress bar when you were downloading an mp3 on dialup in the '90s?
Make errors actionable. One of the most frustrating things is when a transaction fails. It's annoying, sure, but with Ethereum transactions it also probably means you lost a lot of money in fees! Elevate as much of the error messaging and description as possible to the user. Suggest solutions the user can take if feasible, such as trying again but with more gas if that was the reason it failed.
Show me how much money I just lost on gas with this failed transaction. Don't make me go to Etherscan to try to piece it all together; it can be rather confusing to discern on Etherscan with gas price, transaction fee, gas fee and gas usage, especially with EIP-1559.
Show more context. Transaction data is far too cryptic today. Any way to add further context and humanize is needed. See if there's ways to display social proof.
Who, what, where, when.. I received an NFT from an OpenSea contract, which I've used and trusted before. Or show that I swapped a token via Uniswap. Did I receive an NFT from a smart contract or another wallet? Show me a visual preview in the list of transactions, along with any indication of the other party (be it an OpenSea logo/name, or associated ENS name and avatar).
This can be taken much further, but may be better suited for future solutions where your wallet may be paired with a robust knowledge graph.
Inform and put the user in control. Letting a user select how much gas to pay for a transaction is not enough. What other context can be provided to help them make a decision?
For example, if they are interacting with a smart contract to obtain an NFT and the contract has a ton of pending transactions, maybe the wallet could see how many NFTs are left by checking the contract's remaining supply, see how many pending transactions would be ahead of them and try to roughly estimate how much gas may be necessary before the NFT supply runs out.
Or perhaps the wallet could see how many recent transactions with the smart contract with other wallets failed, potentially hinting that this contract should not to be trusted (like those scams where it tries to get people to visit a website) or has other issues.
Create first-class experiences around speeding up a transaction. If I have multiple pending transactions with the same smart contract, show me how this affects the queue and the position of each.
These may be contrived examples but the point remains. Approach this with a user focus, think about what people may need or want to know in the moment and try to bring it forward.
Make transaction state global. Wallets today are not simple single-page apps. They often have multiple tabs or sheets, they could have various sheets and they can be closed or collapsed entirely. Most people will want to know the status of their pending transactions at all times, regardless of where they are in the wallet. Make it easy to see status from anywhere, including using actionable in-app toasts or browser/app push notifications when it makes sense.
A simple analogy might be a macOS menubar app like Google Drive. At a glance I can see that it's busy syncing files or that it's all done and at rest. I don't have to go anywhere or do anything to see its state.
Give me an "oh shit" undo/cancel button. It's all too easy to make a mistake. Scenarios like trying to ape into a new NFT drop unfortunately mean that speed is the only way to have a chance.. but speed also means you might not be taking the time to think through your actions.
Did you accidentally approve a token on a contract you probably shouldn't have? Unfortunately, scenarios like this happen more often than they should. Wallets need an emergency resources in times like this. Perhaps modern wallets could have a sort of emergency "oh shit" button.
A button like that may try to pay the necessary amount of gas to quickly cancel that pending transaction before it's estimated to go through, or try evasive maneuvers like start moving your highest value tokens to a newly-created wallet on your behalf with extremely fast gas. I'd happily eat a huge gas fee if it meant saving much more valuable assets in an emergency.
These are just a few examples, but there are lots of ways to interpret designing experiences to guide users when things don't go down the happy path.
Show all assets across all networks/chains. A lot of things are being built on various blockchains and Layer 2 networks. With the exception of testnets, there's no need to require switching between the Ethereum mainnet and Layer 2 networks like Optimism and Polygon. Just show everything together. It's so annoying to hunt for your assets and forget what network they're on. Modern wallets like Rainbow Wallet do this today.
Furthermore, more wallets should support multiple blockchains such as Avalanche and Solana. This is a tremendous amount of engineering work, so it's not to be taken lightly.
Why should we put the onus on new users to know the difference between various blockchains/Layer 2s and know what their wallet can and can't support? It's already hard enough to explain how to safely backup a seed phrase. This lets the people use whatever web3 service they want with minimal overhead.
Wallet experience Security
And then there's a whole realm of things related to wallet security that could be made easier to access, control and understand.
Make it easier to disconnect your wallet from connected apps and sites. Could a thoughtful implementation have preferences to enable automatically disconnecting after a certain time period, prompting you to disconnect older connections or only allowing a limited number of connections to be active at a time?
Introduce education and user controls for token approvals and token allowances. This one is for the more advanced users today but it really shouldn't be due to the security implications. When interacting with a dApp that needs to access your tokens, you need to give the smart contract approval to use your tokens. Usually this allows unlimited use of all of your tokens and pose a risk where your tokens can be taken without further approval. It's a best practice to remove token approvals for services you no longer trust or use. Similar to removing OAuth permissions on your accounts.
Services like Revoke.cash and Token Allowance Checker exist for this purpose but this could be easier if part of the wallet experience. Some services like Zapper.fi have their own way to adjust allowances. Needless to say it could all be easier. You can read more about the topic here: Unlimited ERC20 allowances considered harmful.
Demystify common actions like connecting a wallet and signing a message. After you've used a few dApps, it becomes very common to see a lot of different dialogs you need to accept or confirm. This makes it all too easy for someone to absent-mindedly get into a habit of accepting these without quite understanding what's happening.
Can modern wallets help educate customers about the risks associated with each action and provide ample recourse to undo them? Today, if you accidentally accept a dialog, most wallets don't make it clear what you need to do to be safe, or if there is any risk from the action you took.
The team behind the WalletConnect protocol is working on a concept to merge "accept connection" and "sign message" that may only work for trusted apps and/or require strict restrictions.
What we can do tomorrow
Dealing with existing technical constraints can definitely feel like we're putting lipstick on a pig. If we put some of these shortcomings off to the side and consider a future wallet, things get a bit more interesting.
Here are a few potential areas of explore going forward:
Fix wallet addresses. Every crypto user deserves an easy way to reference their wallet. ENS is the current solution and it works (I love it and have several, including
stammy.eth), but it's not easy for a newcomer to setup, requires fees and has a small namespace where their ideal handle/domain is likely already taken.
The next billion crypto users shouldn't have to pay to make crypto usable. They shouldn't have to deal with long addresses that could lead to huge issues like them losing funds. What's the Gmail of wallet addressing? What if you could pick from several providers for a free shorthand address for your wallet? If you want pay for yourname.eth, thats fine. But that's not for everyone. Could it be closer to email or ENS subdomains with providers you want to use or affiliate with like
Is wallet the right word? One challenge is that we’re designing for crypto as if it’s purely money (and maybe some NFTs) in a wallet. But the role of the wallet is growing and in the near future it will be so much more than that. Your crypto wallet can become your identity, your interests, your preferences, your knowledge graph, your communication. Perhaps we need a better word to describe its expanded role and control.
Websites are more frequently allowing you to "connect wallet" when often they mean just login. Connecting your wallet with your money can sound scary. Which brings me to the next point..
Clarity & control around privacy and public assets. It takes some getting used to having all your assets publicly visible by anyone on the blockchain if they know your address.5 This is going to shock a lot of people when they first setup their wallet. Can you imagine paying a stranger for a coffee and them instantly being able to see all of your transactions and holdings? Creepy. But that's what the blockchain enables.
Advanced users today get around this by maintaining multiple wallets, but surely we can't expect everyone in the future to know how to do this on their own. Even then it's not hard to track transactions if you accidentally transfer anything between the two wallets instead of using an exchange for that.
One partial solution is better wallet education and integration for supporting private-focused coins like Monero, Zcash and Mobilecoin. That's fine for things that can be done privately, but you can't exactly use those for other cryptoassets like NFTs or particular tokens. So what's a more robust solution?
What if the wallet itself was safer by default? What if connecting your wallet to dApps was able to facilitate logging in, but by default did not show any assets. Depending on your permissions, the wallet could then allow exposing the wallet address where your assets actually live (potentially spread across multiple). Almost like Apple iCloud Private Relay for your wallet. I'm sure there are numerous technical and security feasibility issues with something like this, but I'm just trying to paint a picture of where we could aim in the future.
Make it smarter, make it safer. Today “Connecting with wallet” is very convenient but very dumb. The dApp you connect to gets a unique identifier and some basic info about your holdings but not much else.
How can we attach a knowledge graph to the wallet? A set of public and private preferences, a list of friends, a list of dApps you trust and how much, a list of blocked addresses, dApps and more. This graph data would ideally be a mix of public and private data stored off-chain.
Not only is this getting at a basic storage system for each wallet, it's also getting at the start of a robust permissions system.
But the real super power of an approach like this? It can bootstrap all sorts of trust and security signals. You could see that 7 of your friends have used this smart contract before and didn't report any issues, so you can trust it yourself too.
You could block or report a token as being a scam and it would instantly be hidden for your friends too. You could follow curated blocklists from entities you trust to make web3 safer for you. If anyone steals an NFT the community could blacklist it quickly enough that all NFT marketplaces could prevent any sale of that asset. There's so much potential here. Companies like SpruceID and idx are exploring related things today.
It's such a promising time to be using web3 and especially working in web3. We haven't even seen the killer apps of crypto that will bring waves of people into crypto.
This article was only meant to touch on a few areas where design help is especially needed, and from a design-only POV. I'm sure there are astounding technical challenges as well that may lead to varying alternative solutions. But it's exciting to be here while it's all getting figured out.
As a designer, I love to abstract complexity away from the user by relentlessly questioning what part of an interface is even necessary to present to the user and what we can automatically do for the user.
However, this will be one area we'll have to be super careful about with crypto experiences. Crypto is different. It's not like yet another Web 2.0 experience where abstracting things away (and likely putting that power back in the hands of the app/service). Web3 is about putting the user in control of their data and assets; giving them ownership, not taking it away.
"Once understood, crypto is powerful in its simplicity. But it actually becomes more complicated the more you bury it under layers of abstraction. It’s clear to me now that the technology wants to be seen; it wants to be understood."
With that, we'll have to be careful about introducing thoughtful abstraction—simplifying and hiding complexity without diluting the essence of web3 or taking away control when it might be valued.
Examples of these types of decisions ahead might include:
Do we hide that your wallet is non-custodial and introduce alternative recovery mechanisms? Or just do a great job at teaching people how to backup their key and understand the importance of that key.
Do we try to hide that there may be multiple Layer 2 networks you're interacting with and automatically try to use the best network for the task at hand? Or focus on educating around what Layer 2 bridges do, the benefits of Layer 2 networks or other blockchains and provide transparency around where your assets live.
These are the kinds of details we'll have to figure out before we can get to that idealistic goal that everyone loves to talk about; that someday people won't even know they're using crypto. Is that even a goal? Or should we educate and empower people to embrace all that crypto and web3 have to offer? Of course, we'll need to fix a few things first..
There's a lot of noise in web3 today. It's hard to know what technology, dApp or community is healthy and valuable. We need to build experiences that act as a great host to new users as if they had a web3 expert friend next to them guiding the way.
Maybe we can get there if we think about designing for trust. People trust other people and if web3 is all about decentralized networks, maybe we need to start tacking on more of those networks to the daily experience to help guide, secure and curate.
1 I basically use the terms crypto and web3 interchangeably in this article but I realize there is nuance between the terms. Web3 tends to refer more towards the broader ecosystem and decentralized nature of how these systems work.
2 I reference "great experiences" often and I know it's vague but there are so many things it can apply to: getting your first crypto, swapping tokens, connecting your wallet with a dApp, sending crypto to someone else, et cetera.
3 For the sake of simplicity, lets table the discussion of Layer 2 networks and alternative, faster blockchains like Solana. The current state of Eth gas is untenable and hopefully a multi-chain/L2 future full of composability can abstract away all the rough parts here. Even today the L2 experience is poor; I've watched friends click around for hours frantically trying to find their assets, forgetting what blockchain and L2 they had it stored on.
4Another problem lies around proactively providing signals and controls to help users assess whether one of these entities can be considered trustworthy or not, but I'll mention that in the next section.
5Which thanks to ENS .eth domains it's really not that hard to find someone's wallet.