We’ve wanted to make MetaMask available to an international audience for a long time, but the adoption rate in Ethereum got to a point where we were really forced to spend much more of our time doing essential maintenance, like bug fixes, and getting the application working more smoothly, so translation initiative always seemed like something we weren’t going to get around to until the project was either much more mature, or we had a much bigger team.
We’ve been trying to hire, as I think everyone in this space has been, and it’s been really challenging to get people with the skill set to fully contribute to our project. Meanwhile, we’ve been gradually learning to post bounties to Gitcoin on outstanding issues, and have had some pretty great early results with that strategy.
It has been important for us to learn that bounties have well defined acceptance criteria.
The first type we had great success with was bug bounties. A bug bounty is a classic way of creating a sort of incentivized diligence that can last beyond your immediate attention. Bug bounties are not the easiest to write criteria for, but if you have a suspected bug that you can’t keep looking for, writing those terms is least you can do.
The second type is fast bug fixes. When a bug is really bad, and causing people distress, you really can’t fix it fast enough. Also, a bug fix is usually really easy to write acceptance criteria for (which turns out to be a big deal for a bounty), usually something like “reproduce the bug with a test, get the test passing”. In these situations a fix bounty can make sense, although it’s important to communicate to these bounty hunters that they’re very much in a race, you’re trying to fix it first, and they will only get paid if they deliver before you.
The third type of bounty we’ve begun to use is for small features. Lately, I think our experience with the other types of bounties (and some larger features, which have been a little messier to accept) has helped us develop a sense of what features are more bounty-achievable. We’ve started using Github tags to mark these issues for discussion, and eventually posting bounties.
I think our first feature bounty was a very small feature that lets people choose their account icon type in settings. Most people don’t know about that feature yet, and honestly most people don’t care, but some people care a lot about their icon type, so it was a nice gift to that community. A feature like that wasn’t likely to make it high up our priority list, but someone was willing to complete it for a surprisingly small bounty, so it really got us thinking more about what old features might be bounty-able.
Our roadmap has had to become a bit dynamic, to deal with the constantly changing ecosystem, but one thing that we’ve always known we needed to do is translate to other languages. We posted the bounty mid-December, and by mid-January Nick Doiron had picked up the issue, and had his PR open a day later. That was it!
It’s a little sad, but we were so wrapped up with launching the beta for our new user interface, that we didn’t even get to properly validate his contribution for another month after that, and after a few small tweaks to make sure it was working well, we merged it.
Once we had merged in multiple language support from a bounty, it unblocked the path to all other translations, and what better way to get lots of different translations than with bounties from our community? A single tweet of publicity and we had something like 20 language requests, and 10 language pull requests. It’s been total magic. Translating has easily been the easiest, and most community-involving bounty program we’ve run so far, and I think the experience just has us asking more and more: What other issues could be bountied?
MetaMask’s translations are undergoing final merges and will appear in the beta UI of our next release. Our first internationalized release will include translations in French, Japanese, Vietnamese, Spanish, Italian, Tagalog, and probably more. If you’re interested in contributing a a translation to MetaMask, see the outstanding requested languages on GitHub here.