web3.py 2022 User Survey

A summary of results from the web3.py 2022 User Survey.

Towards the end of 2022, we opened up the first web3.py User Survey. Broadly, the goal was to better understand our users so that we could better support them.

The survey was shared within a few communities, including the Ethereum Python Discord server, and linked to from the web3.py documentation. 82 responses were recorded by the start of February 2023. As promised in the survey description, what follows is a quick summary of those responses and some takeaways.

Development experience level?

32% – Senior
32% – Mid-level
22% – Junior
14% – Just starting to learn / pasting in enough code to get a job done

Day job language(s)?

97.5% – Python
38.8% – JavaScript/TypeScript
<10% – Go, C#, Java/Kotlin, Rust, other

Preferred hobby language(s)?

98.8% – Python
12.3% – JavaScript/TypeScript
<10% – Rust, Go, C#, other

Why web3.py?

86.3% – Python is my preferred language for all things
6.3% – I depend on other libraries only available in Python
2.4% – Good options don't exist in my preferred language

Using a development framework?

72.8% – No framework
22.2% – Brownie
8.6% – Ape

Which domains?

60.5% – DeFi
42% – Developer tooling
37% – Just exploring / learning
35.8% – Network monitoring
28.4% – NFTs
8.6% – Social networking

Which chains?

90.1% – Ethereum
44.4% – Ethereum L2s/side-chains
33.3% – BSC
24.7% – Avalanche
19.8% – Fantom
6.2% – Polkadot
3.7% – Cosmos

Are your repos open source?

53.1% – No, or mostly no
33.3% – Yes, or mostly yes
13.6% – Not applicable

Using external modules?

For the uninitiated, external modules were introduced in 2022 as a way to build or import plugins within web3.py.

67.5% – No, didn't know they existed
21.3% – No, don't have need/not aware of useful modules
6.3% – No, for security reasons
5% – Yes

Of those who selected Yes, a few specified that they utilized external modules for custom transaction listeners, identity, abstraction, and DEX-specific trading features.

Frustrations?

Common themes in this free-form answer included desires for upgrades to documentation, more "real-world" tutorials, improved typing, more comprehensive async support, simplified filters and event fetching, and performance improvements.

Documentation/tutorial requests?

Content requests spanned a wide range of topics, including L2 examples, NFT interactions, gas pricing/estimation guides, DEX monitoring and automated trading, Beacon node usage, exploration of logs, a WebSockets walkthrough, and general best practices.

Takeaways

First, we acknowledge that selection bias exists in any conducted survey. It's very possible that this data is not representative of the total user base, but we'll use what we have.

Our users genuinely seem to enjoy using Python and are using web3.py because they want to, not because they have to. That's a good thing.

Our users – at least those who took the survey – also tend to be fairly experienced developers. Accordingly, there's a demand for more advanced coverage in the documentation and tutorial content.

After this survey we have a bit more evidence to support a hypothesis that a meaningful percentage of our users are building competitive DeFi/automated trading tools and don't open source their work as a result.

Most users are still going without a smart contract development framework, suggesting that most use cases don't include the deployment or testing of new contracts. We have observed a small, but growing interest in Ape, however.

We hear the frustrations. Asynchronous support has gotten a lot of love recently in the form of the AsyncHTTPProvider and thread safety. Improved typing is an active work in progress. A big investment in documentation is on the immediate horizon. A rethinking of the WebsocketProvider is further down on the TODO list too.

We also recognize the opportunity to explore some UX improvements in the library. We'll be exploring convenience methods and aliases for common actions, like contract deployment, token contract interactions, event querying, and so on. Suggestions in this vein are welcome in the repo issues.

Finally, thanks for using web3.py! We appreciate those of you who take the time to open issues, create pull requests, share your feedback in surveys, and help your fellow travelers in Discord and Stack Exchange. The v6 release is just around the corner; stay tuned for the announcement and give it a whirl once released!

Until next survey,
🫡