In December 2015 I left the corporate world of banking. I had spent the previous 10 years or so building technology platforms in the financial services industry, a place full of smart people, but a work environment that wasn’t conducive to my lifestyle — too many meetings and processes.
I’m the kind of person who thrives on variety and had to find that out (in fact, in the years since, I’ve been officially diagnosed as being on the autism spectrum, which no doubt plays a role).
The first was a failed startup, Huffle with some great co-founders. We tried to launch a new mortgage product in Australia but quickly learned that getting a bank to launch a product based on a financial model you have is not easy. Especially when a) you’re a small startup and b) this product won’t significantly move the needle initially for them in terms of volume.
As a result of this failed experiment, I decided to start looking into this topic of blockchain since Huffle was done.
What I saw then (this was around May 2016) was that Ethereum seemed to be the blockchain platform that most of the buzz was about — if you Googled blockchain, I’m pretty sure Ethereum was the first thing that appeared. Although it wasn’t particularly clear what it was from the site at the time.
My Ether Mining
All those years I’ve been working in banks, I’ve been building on the Java platform. Since the early 2000s, Java has been very widely adopted in enterprises due to its ease of development and automated memory management compared to earlier programming languages.
This meant that by the 2010s, significant parts of our modern financial infrastructure ran on the Java platform. It was further enhanced by Google using it as the basis of the Android mobile platform.
When I was continuing my foray into blockchain and Ethereum, there was a lot of talk about how blockchain would be a transformative force for financial services.
Articles like this were common, even in 2016
Given my experience, I noticed a clear gap in the market. How will all these financial services companies that have spent the previous 15 years building platforms in Java connect them to the Ethereum network — in my view, the most promising blockchain technology?
Scratching beneath the surface, it was clear that there was no easy way for Java developers to work with Ethereum. I was shocked! It was such an obvious opportunity! Surely someone else must have thought of this by now? After all, this was mid-2016, the Ethereum network had been live for a year (launched on July 30, 2015).
I was giddy with excitement. Usually, the problem that engineers face when trying to do greenfield development (building something from scratch), is that someone always beats you and there’s no point in building everything yourself.
It was time to start creating a prototype.
To talk to a node on the Ethereum network, you need to connect to a protocol called JSON-RPC. JSON-RPC is the same protocol used to communicate with nodes on the Bitcoin network (a number of Ethereum implementation details were copied from Bitcoin, such as JSON-RPC and the Secp256k1 elliptic curve used for cryptographic operations).
There were a ton of requests and responses of different methods that I needed to implement, from getting information about the node’s software running to transactions within a block. Having just implemented a few and still not found a library that did something similar, I was ready to commit and make this project a reality.
I spoke to my wife, we had our first child a few months earlier and told her that I would need to get my mind right for a few weeks to get this first edition done. This meant spending as much time as humanly possible in the library.
I was at home so when I needed a break I could hang out with my son who was lucky in those early years of his development.
During those weeks, the days just flew by, I would get in front of my computer as early as I could, put my boxes away, get in the zone and before I knew it another day was over.
The first is bound to Web3j
This continued until I had something that provided the basic functionality to work with Ethereum. In my naivety, I thought that the JSON-RPC implementation was all that was required.
However, I quickly discovered that to do anything meaningful with Ethereum, you also had to support creating wallets, signing transactions, and being able to create, deploy, and interact with smart contracts. This kept me busy. Especially since I didn’t want to just make any old integration library, I wanted to make a high-quality, well-documented library and build a community around it.
The first issue of Web3j!
Momentum slowly began to build. By the end of November, four different people I had never met before had contributed to the library, and I had to start focusing my energies beyond just writing the library and fixing bugs.
The first pull requests submitted by people I had never met on Web3j!
It was time to invest time in documentation and thinking about how I could promote Web3j and build a community around it, like the following talk I gave in early 2017 (which has over 60,000 views).
This is where the hard work really began, and after 7 years, I’m happy to say the project is still going strong. We’ve been lucky that nearly 200 people have contributed to the library and it’s been downloaded over 2 million times! Although I’m no longer contributing to it myself these days, the Web3 Labs team is. There is also a steady stream of new users.
Earlier this year I was at an event where staff from a major US bank mentioned how useful Web3j was for their blockchain work. This and many similar conversations over the years confirm that I made the right decision all those years ago to create it.
The vast majority of open source software is a gift to the world. It solves a problem that people have. In the case of Web3j it was using one of the most widely used programming languages in the world, Java for development on Ethereum. I’m proud that I took the time to create it all those years ago and I wouldn’t change a thing about it.