Hi everyone 👋,
Welcome to the first Tangled in Web3 post. I really appreciate your support and hope I can provide some valuable insight.
This post will be useful if you’re new to the Web3 tech stack. It’s high-level and breaks down how software is made. I’ll be following up with some thoughts on how I approach this space from an investing perspective in a subsequent post.
Where are all the developers?
Despite crypto’s rapid growth, there are still very few Web3 developers, representing less than 1% of global software developers. The reason is simple — fewer tools and infrastructure makes it more difficult to build. In contrast, Web2 tools have been built up over decades and the low/ no-code trend has let anyone build Web2 apps. Web3 requires specialized expertise (programming, blockchain, wallets, smart contracts, etc.). But, a large and expanding ecosystem seeks to abstract this complexity and onboard new developers. The best tools will be simple to use, minimize costs, and limit centralization.
There’s a litany of problems to overcome. For example, storage cost increases as applications scale and require more nodes. Projects will often hire full-time DevOps engineers to maintain infrastructure. This is costly and often results in working with Infura or Alchemy, creating a centralized chokehold. Additionally, because blockchains are immutable state machines, we can only write to the state, not update it. Everything is permanent and immutable, maki.ng bugs or vulnerabilities costly. Finally, as blockchains operate on different languages, applications may not be cross-chain compatible. This is still a nascent field, but new Web3 frameworks and developers tools are being created.
To understand these new tools, let’s dive into what it takes to build software.
Web3 vs. Web2 software development
What is a developer stack?
There are 3 main components to any program:
The frontend (client-side) describes what users interact with.
The backend (server-side) is the code that allows software to operate. This cannot be accessed by users.
A database refers to where data is stored.
A developer stack refers to a collection of tools and technologies, such as programming languages, used to build applications and software. For example MEAN (MongoDB, Express.js, AngularJS, and Node.js) and MERN (MongoDB, Express.js, React, and Node.js) are traditional web developer stacks. These aren’t the only developer stacks available, but they are two of the most popular. Let’s break down MEAN and MERN and show what this means (pun intended):
M = MongoDB: NoSQL document-based backend database.
E = Express.js: Backend web application framework for APIs.
A = AngularJS: Open-source frontend JavaScript framework for user .experience / R= React: Frontend framework used for creating user interfaces.
N = NodeJS: JavaScript-based run-time execution environment on the backend.
Both MEAN and MERN are full-stack, referring to the entirety of an application. This stack encompasses all of what takes to build the frontend, backend, and database. And that’s how software is made!
The Web3 stack
The Web3 tech stack is similar to the Web2 tech stack. They both consist of various layers — protocols at the bottom layer, client-side libraries built on top of those protocols, and then apps and website built on top of those apps.
The frontend often looks similar for Web2 and Web3 apps as they are mostly built using React or some other JavaScript framework. The backend and database is the key difference. Web2 applications rely on centralized databases where the backend logic resides. Web3 applications, however, leverage the blockchain to build apps on a decentralized state machine maintained by anonymous nodes. This requires a new backend approach and a new developer stack.
To add more detail…
First, we have the protocol layer. Developers need to decide which blockchain to build on. Bitcoin is different from Ethereum, which is different from Solana, Near, and other L1s. Developers should also consider if they want to build on faster, lower cost layer 2 protocols or work with cross-chain bridges. Regardless, the key Web3 feature is that the protocol layer is designed to be a state machine that anyone can access and write to. Rust, a programming language, supports Solana, NEAR, and Polkadot while Ethereum uses Solidity.
Note, smart contracts are simply programs that run on a blockchain and define the logic behind the state changes on a blockchain. They are pieces of code and mainly written in Solidity. Many developers use an IDE to write, compile, and deploy smart contracts.
Moving up, we have infrastructure primitives, which explains how an app interacts with a blockchain. Keeping this simple, this could be anything related to node infrastructure, key management, identity tools, oracles, file storage, and more. For example, companies such as Infura, Alchemy, QuickNode, Pocket Network allow developers to use their nodes, outsourcing overhead and maintenance.
Developer tools allow applications to interact with the above primitives and protocols. These include developer frameworks and integrated development environments that help developers test and deploy applications. This also includes services for security, privacy, messaging, indexing, and more. Individual Web3 use cases like NFTs, DeFi, gaming, and more will all have their own unique developer solutions.
Applications sit atop infrastructure primitives. This is the use case layer and allows users to interface with the blockchain, make transactions, and interact with smart contracts.
Finally, the access layer provides an entry point into Web3. For example, wallets allows individuals to access the Web3 ecosystem and interact with applications.
Final thoughts
The modular and interoperable nature of Web3 can create some exciting and new applications. The developer framework is unlikely to change, but we will see new tooling primitives impact how applications are built. In a subsequent post, I’ll detail what tools are currently used to build in Web3 and their potential.
Thanks for reading! Subscribe here to receive Tangled in Web3 in your inbox: