In the last 2 weeks I’ve ported my leaderboard library, originally written in Ruby, to PHP and Java. It has been an extremely fulfilling endeavor for a number of reasons.


Let’s face it, we’ve all been on epic e-mail threads where someone poses a problem, e-mail armchair development ensues and people argue back and forth about what will and what not work, and at the end of the thread, the original author is left with more questions than answers, more what could be than what should be. That happened to me about two weeks ago. It all started with a Friday evening e-mail to engineering, “We have a vexing leaderboard issue I’m opening up for suggestions.” It was for a property we didn’t write, but one that was in dire need of help. The thread was 20 e-mails in before I responded at 9 AM the next day with (paraphrasing here): “I made this for you. Use it or don’t. At the very least, it can be tested right now as a potential solution.”

And so the php_leaderboard package).

If it had turned out, given the constraints, that php-leaderboard wasn’t going to be a viable solution, it really wasn’t going to phase me. I learned some PHP. I was like Jojo the idiot circus boy with a pretty new pet. Now the pet is my possible solution. Oh, my pretty little pet, I love you. And then I stroke it, and I pet it, and I massage it. Hehe, I love it, I love my little naughty pet, you’re naughty! And then I take my naughty pet and I go …” Wait … what? The point is I found some inspiration to try something new and to present a reasonably complete solution to the problem at hand.


You could say that after the PHP port, I developed Search for it and you’ll find it.


The PHP port was also inspiration for two colleagues to release the python-leaderboard package.


It felt really good to work in a new language and to re-connect with an old language. And for whatever reason, I need that mental disruption to continue. And so it shall. My current in-progress ports of the leaderboard library are to Go. Porting the leaderboard library works for me because of a number of factors:

1. It is well-defined in terms of behavior/functionality.

2. It requires integration of a service and a service client library.

3. It requires some knowledge of control statements, types and higher-level data structures.

4. It has a well-defined set of tests.

I’ve had to become comfortable with being uncomfortable. New syntax, new packaging, new test framework, new release mechanism. Conformity be damned!


I would encourage anyone who feels they’re set in their ways or in need of a change to undertake a similar endeavor. I can imagine this applies to any number of disciplines in the video game industry. Find a well-defined, testable problem that you’ve solved again and again and solve it differently.

It’s that simple.

You can find more hilarity over on my Twitter account, @CzarneckiD.