Today, Augur is a little over a year old on mainnet, with thousands of markets and millions of dollars in open interest resolved. However, things looked very different on launch day. The team had spent years on active development, protocol design, and carefully testing contracts. It was a product that many were excited to see launch. But, surprisingly, hours after said launch, complaints from users that Augur wasn’t working began to flood in. It turns out this happens to many developers and projects; A well-designed protocol or application is deployed, only to find out it doesn’t behave as expected. Why is this?
The answer lies in understanding how blockchain infrastructure affects the application. Blockchain infrastructure is what allows a user to interact with a blockchain and use applications. Great infrastructure enables fast, scalable user experiences. Unfortunately, most developers and applications have unreliable infrastructure. This leads to slow, incorrect, and potentially broken user experiences.
After encountering the aforementioned challenges, the focus shifted towards integrating reliable systems that made the growth and progress of Augur possible. Ultimately, quality infrastructure is one of the most important factors for great user experiences, real-world adoption, and developer productivity. However, finding reliable infrastructure solutions is one of the biggest challenges in the space. To benefit the community, we’re open-sourcing the learnings and experiences launching Augur in today’s infrastructure environment.
Blockchain infrastructure is one of the most important components of the user experience. But first, what is blockchain infrastructure? At a high level, it is a key component of the system that enables applications to interact with the blockchain.This can be a user’s own Ethereum node, a third-party node, or an infrastructure platform; an Augur user needs one of these to interact with Augur markets on the blockchain.
Even though the Augur application and smart contracts were working at launch, the infrastructure powering the application wasn’t. This is similar to a house built on a poor foundation. Even when the house is well-designed, if the foundation is not stable, the entire house is at risk. Within minutes of launching, as a result of this shaky foundation, users engulfed the Discord channel and reported that Augur simply did not work. Their experience was the app was slow, incorrect, and crashing often. The launch featured a free third-party node service which ended up being; you guessed it; slow, incorrect, and frequently provided incorrect blockchain data. The learning was: Most simple solutions for blockchain infrastructure are unreliable.
It was quickly appreciated that great dapp user experiences depend on great blockchain infrastructure. Having explored solutions with all the big players in the space, Augur ultimately landed on Alchemy, which had far and away the best product for users’ needs. Teams should do their own evaluation in deciding which infrastructure provider is best, but these are some tenets to aspire to:
This is the biggest gotcha in scaling blockchain infrastructure. When scaling beyond one node, a common strategy is to load-balance across multiple nodes. This is a big mistake; nodes can have different local copies of the blockchain, thus, load-balanced requests will return inconsistent data. The effect is catastrophic. Augur’s original third-party node provider utilized load-balanced nodes, and the inconsistent data would silently corrupt the local database during an initial sync and crash the application. The user would then have to spend hours resyncing from the beginning, at which point many left and never returned, impacting Augur’s early growth prospects.
Inconsistent data can also lead to scary user experiences when broadcasting transactions. For example, users might see their balance decrease after purchasing an asset but not see the asset. Consistency issues were a huge problem and led to multiple user issues every day, costing a lot of both engineering and support resources, slowing the entire team down.
Well-designed infrastructure fixes these issues by providing consistent data at any scale, as if it were a single node. One reason Alchemy was chosen is it does not use load-balanced nodes. Instead, they utilize a sophisticated distributed architecture which provides reliable consistency at scale. Alchemy resolved the consistency issues that had previously reared their head, removing 98% of user complaints and significantly improving Augur’s user experience and adoption.
Infrastructure should be reliable, fast, and scalable. At launch, Augur took upwards of eight hours to sync on the original third-party infrastructure service. As one can imagine, many users were not patient enough to wait. Today, leveraging Alchemy’s tech, a user’s application syncs over 3x faster. As a result, users are much more likely to stay. Uptime is also crucial; users won’t use an application that is breaks occasionally. A single node doesn’t fulfill these requirements because it will stop working fairly frequently, doesn’t have a backup, and is slow under load. Teams must weigh whether to invest significant time and resources into building sophisticated systems or to recruit the infrastructure expertise of providers like Alchemy.
As AWS has abstracted infrastructure and allowed web2 teams to focus on their products, web3 teams will also begin to consider this tradeoff en masse. Alchemy, in a similar sense, has greatly accelerated Augur’s development timeline because the engineering team can focus on Augur-specific development. Before, the team had spent the better part of 3 months patching up issues caused by inconsistent, unreliable infrastructure and dealing with the subsequent user reports.
Additionally, Ethereum infrastructure requires continuous care due to network forks, maintenance upgrades, and unpredictable live network conditions such as congestion. Another reason to leverage an infrastructure expert is that they have a wealth of experience handling these issues. Augur core developers collaborate directly with Alchemy’s engineers for both live production events and active development issues, and this has saved significant amounts of time.
Ultimately, the team came to the realization that infrastructure is just as important as well-written smart contracts and applications. Most developers will discover that the quality of their infrastructure can make or break their user adoption.
1. Don’t overlook infrastructure. Your product and user engagement will only be as good as the blockchain infrastructure underneath.
2. Recruit the help of experts so that you can focus on and accelerate your own core product development. At the end of the day, the latter is what makes you successful.
Though achieving dependable infrastructure is a hard problem, hopefully by sharing Augur’s growing pains you may reach your infrastructure goals faster, whether you’re working on active development, launching your product, or growing your user base!