1 min read

To dApp or not to dApp

General purpose blockchains (Ethereum, Koinos, etc.) are are just big, decentralized computers. They support "Turing complete" programming languages, which means you can build and run any program you want. But different types of computers are best used for different types of applications. You wouldn't run the same code on your server as you would on your iPhone, even though you technically could.

Blockchains are inefficient by design. You have to run your code on every node in the network. This makes smart contract execution expensive, and gas fees (or fee-less mana in the case of Koinos) go up with demand for network resources. Because of this cost (whether monetary or opportunity cost), you want to run as little code as possible on the blockchain.

But you do want to run some code there. The benefit of blockchain is trust. The blockchain allows users to interact with anyone else in the world without needing to know who they are or understand their motives. You trust that the blockchain protocol can't be tampered with, and as a result you don't need to trust individual people.

You could literally turn any app into a dApp, but it would be inappropriate for most of your code. Here's one approach to deciding whether to dApp your app:

  1. Solo apps - things like calculators, calendars, to-do lists. No blockchain needed.
  2. 1:1 apps - private messaging, anything else private. The data itself doesn't need to go on the blockchain, but you can use blockchain public/private keys to sign messages and verify identifies.
  3. 1:n apps - YouTube, Etsy, etc. Any apps for creators to deliver products/services/content to their audience. Blockchain can help minimize platform fees, so creators can take home more profits for the value they create without sacrificing the network effects of platforms.
  4. n:n apps - social networks, money, etc. Blockchain is perfect for this. Build a dApp as long as you're ok with censorship resistance and all the other characteristics of a public immutable ledger.

For most of your apps, you'll probably build multiple features/experiences. You'll need to consider which parts of your app live on the blockchain and which don't. Just because one feature requires a smart contract doesn't mean every feature does.


P.S. This is just one way to approach the dApp decision. I find it useful, but it's imperfect. What other mental models have you found useful?