Introduction
Diablo.trade is a popular website and trading platform specifically designed for the game Diablo 4.
Its primary purpose is to facilitate trading between players by providing a central marketplace where users can list items they want to sell or trade, and search for items they want to buy or acquire.
Think of it as an auction house or trading post for Diablo 4, but outside of the game itself.
Involvement
While I was working at my last job, I happened to play a lot of D4 in the evenings and became a user of that website myself. Getting frustrated by some of the design decisions, I contacted them giving clear details on everything I did not like and what I would change. Ordering my suggestions by priority and giving examples of similar websites such as pathofexile.com/trade or specific component implementations/ergonomic concerns.
To my surprise they reached out to me and asked if I wanted to be a part of the website team to contribute, which I agreed to.
I took part in a short interview process and went on with the onboarding, after signing a NDA specifically about Blizzard D4 features which we would be aware of before launch in order to get the website ready ahead of time.
Being a member of an international team working around such a popular game was a very interesting experience. Seeing your work make an immediate impact on the player base when you fix a particularly annoying bug is refreshing and made me empathize better with game developers even as I was simply working on an affiliated website.
I mainly got involved in fixing every frontend issue I could find on the team's clickup (issue tracker) and creating pull requests accordingly. Some of them had to do with ui consistency and accessibility, some of them with adding new features to the massive item filter.
Technologies
Next.js, Tailwind, tRPC, Jotai, WebSockets (chat integration), NextAuth.js, MongoDB and probably a few more I did not get much into like OCR in order to recognize the screenshot of an in-game item and extract its properties.
Purpose
I did not really expect to be invited as a contributor when I sent my message, so I would say that I went along with the opportunity that presented itself at that point.
My goal then was simply to be useful and learn as much as I could from an entirely new codebase. At that point I had only experienced small projects during my time learning at O'Clock, as well as one decent-sized codebase at work (although using less modern approaches on some repos).
I had no experience with end-to-end API typing with tRPC or the use of a state management library such as Jotai at a decent scale (I did have experience implementing redux at work on a smaller scale). Getting to know these by directly wrestling with them in a living current project with actual performance considerations was very enlightening.
Lessons learned
- Sometimes daring with good intentions can be surprisingly rewarding, I am now less hesitant to reach out or offer help if I know I am competent in a given domain.
- Contributing to this kind of project is time-consuming when you also work full-time. It can lead to mounting expectations, and developer turnover was high. I would probably not do this again, but it was an excellent one-time experience.
- Early design mistakes become entrenched as a project grows and some of the bigger scale issues I wanted to address and that lead me to voice my criticism were never changed.
- It is extremely hard to get this kind of website right, many things were not protected well enough, if I were to work on a similar project in the future I would try to learn a lot more about API protection for instance.