November 08, 2016

Exercism: Behind the Scenes—A grab bag of fixes, heaps of gratitude

Compiled Chaos

A while back one of the Heroku buildpacks stopped working. It wasn't an official one. In fact, it was a hacked fork of an unofficial one. The buildpack in question was taking our incredibly janky and non-standard CSS and JavaScript along with a dash of CoffeeScript, and compiling, transpiling, minifying and whatever else seemed like a good idea. Between the pressures of a day job and trying to keep up with issues and pull requests on Exercism, I couldn't bear the thought of debugging the hacky fork of the unofficial buildpack.

So I did something incredibly convenient and ridiculously stupid: I yanked out the buildpack, and just committed the compiled assets to the repository.

It let us deploy, but boy is that dirty. And I can't tell you how often we had really silly conflicts. Often.

I think matters remained unchanged for a long time. A year? More? Then Tejas Bubane tackled the problem and with much digging and experimentation, figured out exactly what was wrong, and exactly how to fix it using only official buildpacks. Now (finally) we have trashed the compiled assets, gitignored them, and the deploy takes care of everything.

Broken Metrics

Jeremy Walker helped me dig into some of the numbers (does Exercism work? If people join, how long do they stick around—that sort of thing) and noticed that the Google Analytics numbers were impossibly low. The simple proof was that we had more new users in the database for the month than Analytics was reporting as total visitors.

Tejas Bubane dug into it and figured out the problem, and the fix, and we are now back to measuring real numbers.

Mentorship Feature

For years people have been asking for a mentorship feature. It would work something like this: I invite my mentor to see all my solutions on Exercism, and they can see them even if they've not submitted them.

A couple of weeks ago I realized that we already have this feature. it's called Teams.

So with zero new code, we now have a mentorship feature. Have the mentor create a new team, and add the mentee as a member. The mentor will get access to all of the mentee's solutions, even if they've not solved the exercise themselves.


tetchi reported some accessibility issues... and then went right ahead and fixed them, cleaning up so screen readers are less noisy, and making it easier to navigate.

Track Icon Attributions

The icons for each language track used to live in the main repository. That was kind of annoying, because the people most likely to update or fix or add or tweak a language track icon are the people contributing to a language track... and that happens in the language-specific GitHub repository.

So we migrated those icons out of the main repo and into the bajillion other repos—a bit of work, but worth it because that's where people will look for them.

Some of these logos are modified or simplified versions of the official language logos. In those cases we need to comply with their license, and provide attribution.

We did that—we had attribution for all the icons (except the ones were we just made something up ourselves). Unfortunately when I wrote up the issue to move the language icon into the track repositories I forgot that we should also move the attributions.

catb0t has taken the time to submit pull requests on every language track, including the tracks that aren't officially launched yet, moving the attribution into the track repo's README.

Arithmetic Identity

If you've ever solved the Largest Series Product exercise and wondered how on earth the value of the largest series for an input of "" would be 1, then you're in for a treat. Peter Tseng wrote up a great, thorough, helpful explanation in a comment on an issue in the Go track repository.

New Track Maintainers

Daan van Berkel and Stephen Bastians have taken on maintenance of the OCaml track.

Bryan Mulvihill has joined the team who is maintaining the Ruby track.

Ryan Hartlage, Patrick Jackson, and Barrett Brown are taking on maintenance of the C track. There's been a bunch of activity, and it looks like it could launch soon.

If you're interested in getting involved in any of the tracks, I've been writing some documentation about how to do that. It's still in a pull request, and I'd love your feedback about what is confusing or what is missing or what could be improved:

The Chat Room

If you've spent any time in the chat room, you'll probably have gotten help and feedback from Victor Goff. If you run into him, thank him for all the time and mentorship he's put into Exercism.

That's it for this week—happy hacking!