Introducing Project ‘Dice Championship’

What if a voice app of non-trivial complexity would be implemented with different approaches, and all of it would be open source? This is exactly what the ‘Dice Championship’ project is about, and I hope it provides some educational value to the voice developer community.

What exactly does ‘different approaches’ mean, for this project?

I intentionally left it vague because I plan this to be as accomodating as possible. Some lines of approaches I mean:

  • Different ways to implement leaderboards, e.g. DynamoDB, MySQL, GameOn and Google Spreadsheets
  • Different programming languages, e.g. Javascript, Typescript, Python, PHP, .NET/C# and Java
  • Different SDKs/frameworks, e.g. Jovo framework and ASK SDK
  • Different development platforms, e.g. VoiceFlow and BotTalk
  • Different assistants, e.g. Alexa, Google Assistant and Bixby
  • Different extensions, e.g. APL 1.1, ISP, voiceover etc.

And what’s the benefit of having all these different versions of the same voice app?

I recently read (in the excellent book ‘Range’ by David Epstein) that while specialization is great at making us more efficient in repetitive tasks, it prevents us from seeing solutions from adjacent fields. Seeing how a different tool (and its community) solves the same task can be highly elucidating, at the very least by making us aware that different approaches exist. My hope is that it will broaden the horizons of voice developers from different camps, so they can better choose the right tool for each job.

I also imagine that it can serve as a nice entry point for learning a different approach — A bit like how a translation of a familiar text can make it easier to make sense of a different language. For this reason, I chose the subtitle ‘The Rosetta Stone of voice app development’ for this project. :)

That makes a lot of sense! Now tell us about the actual voice app.

Sure, with pleasure! In fact, you can try it out if you want — It’s published to the Canadian, German and US Alexa Skill stores.

I wouldn’t be me if I’d pass on the opportunity to make this a #VoiceGame, but it’s a very simple one: In each round, the app rolls ten dice for you, adds up the face values to your score, and compares it to both your own highscore and a global leaderboard. If you improve in either of both, you get a positive message and sound, otherwise you get a soft negative response and are urged to try again.

My personal tech homezone is obviously the Jovo framework (in Javascript), and I use i18n response keys even for monolingual voice apps (to separate content from logic). So here’s a chart with a typical ‘Dice Championship’ Skill dialog, and a breakdown of the response keys and handler functions that generate each part of the response:

What’s the deal with the handler functions? Is this relevant?

Only in so far as it helps you making sense of the source code. As a seasoned developer, this is certainly obvious to you, but I really want this project to be accessible also for non-coders like the VoiceFlow community.

In this sense, I plan to provide extensive documentation on how to set up each version. In case of Jovo projects, I can even provide instructions and code to operate the Skill in different stages (local development, Lambda development and Lambda production), but that’s not something I can promise for approaches I’m less familiar with.

Which versions of ‘Dice Championship’ exist at this point?

This is a living project which I hope will grow according to interest. Right now I’m starting small with three versions, and provide more in the next days and weeks.

Here are the versions that are available right now:

  • Base Version
    I like to think of this version as the ‘prototype metre’ that defines the original set of features and against which to compare the different versions. It’s also more heavily documented than other versions. It uses the Jovo framework in Javascript (there’s no agenda behind this decision, that’s just what I’m most familiar with), implements the leaderboard with AWS DynamoDB (because that’s what I perceive as the vanilla choice for providing voice apps with between-session persistence), and uses sounds from the ASK Sound Library.
  • Live Alexa Skill Version
    This is the version that got published to the Alexa Skill stores. It’s technically similar to the Base version, but has all the features to get the Skill through certification (whereas the Base version is somewhat simplified), has all information (model, manifest and translation resources) for the en-US, en-CA and de-DE locales, and uses licensed sound effects from Audiojungle.
    You can expect this to be the version that gets the most attention and updates from me over time.
  • GameOn Version
    I already built and published this when the Skills GameOn SDK was newly released, but re-structured it to fit into this project. This version is like the Base version, but uses Amazon GameOn instead of DynamoDB to implement the leaderboard.

OK, and what’s next?

Versions I’m actively working on at the time of writing this are an AWS Aurora, a MySQL (via AWS RDS) and a Google Spreadsheet version.

I have such big plans for this project, but I think I will go by what’s popular for now and tackle MongoDB (as another implementation of a leaderboard), ASK SDK v2 and VoiceFlow.

What if I wanted to see ‘Dice Championship’ in my favorite language or platform?

I love that question! You have two options:

  • Get in touch with me and let me know! If I know there’s demand, I can prioritize your favorite approach.
  • Implement it yourself and share it! I am particularly fond of this option, because the result won’t be influenced by my own (cross-platform) coding conventions. If you want to coordinate your effort with me, you’re welcome to, but it’s not required.

By the way, is this a Jovo project?

It’s not — I’m doing this in my free time, and there’s no hidden agenda of promoting the Jovo framework. If you perceive any bias in this direction, it’s simply because I’m more familiar with Jovo’s approach. I want to be clear about the fact that I don’t think any approach is superior to another (each one is built for one or more use cases where it excels)!

Thanks for reading all the way down to here! If you like the idea of this project and look forward to seeing it grow, please consider spreading the word by sharing this article, engaging (clapping/liking/staring/commenting) or contributing. Looking forward to this! :)

Ah, yes. The featured image needs to go somewhere. :D

Maker, with a focus on Arduino, LEDs & 3D printing. There’s a range of other topics I’m also engaged and/or interested in, most notably Alexa skill development.