Elm and Phoenix/Elixir in production for France TV

09-10-2016

Are Elm and Phoenix/Elixir ready for prime time? I'll let you decide: they were both used in live during the main French political show called "L'émission Politique" to help generate a word cloud based on the guest speech. To the date of this writing, the guests were Nicolas Sarkozy (12 millions viewers), Arnaud Montebourg (9 millions) and lately Alain Juppé (13 millions).

tl;dr: Elm allowed me to code a reliable frontend app in a very short time, Phoenix was so easy to grasp that I felt young again while coding the backend administration.

Word cloud Alain Juppe

Context

I'm the CEO (CTO, CSO, <put any cool name here>) of Voxolab, a company providing speech recognition analytics for businesses. Lately I've been working for Voxygen, where I had the opportunity to develop a system to generate a live word cloud, based on the most frequent words pronounced by the guest of a political show.

The requirements:

  1. Record/transcribe the speech of the guest microphone in real time
  2. Generate a word cloud based on the words frequency in real time
  3. If possible, use a computer already available at France TV. It can be a different computer for each show.
  4. Technical people of the show should be autonomous

So, starting from here, I decided to develop a "web solution" that would allow me to record the sound from every computer having a browser installed (to be totally honest, having Chrome or Firefox installed) and to send it to a remote server for transcription.

Here is what I already had:

  1. Google Chrome installed on the computers of France TV with the guest microphone plugged in
  2. A javascript library to send microphone input to the remote server
  3. A live speech recognition system on a remote server
  4. A python script generating word clouds based on text data

Here is what I needed to do:

  1. A human ready interface in order to manage the connection between the browser and the speech recognition server
  2. A backend administration to manage the different shows, the stop words list, …

I decided to use Elm for #1 and Phoenix for #2. I've been writing Elm and Phoenix code in my side projects for only 3 months. Usually, for my business projects, I'm using Python/Flask for my backends and Mithril.js for my frontends. So, why Elm and Phoenix this time?

Why Elm?

In fact this was not the question I did ask to myself. The question was: why Javascript? And to be honest, I couldn't show up with a satisfying answer. So I decided to go with Elm, mainly for those reasons:

  1. I needed something I could rely on. I can rely on Elm compiler, I can't rely on Javascript runtime errors.
  2. I knew I would have to refactor the code a lot during a short period of time. I wanted to be confident while breaking things.
  3. As a business owner/recruiter, I wanted something with a low entry barrier for my future hirings. Elm has a low entry barrier, the JS ecosystem/fatigue/mess doesn't.
  4. I knew I could never get stuck. Interoperation between Javascript and Elm could always save me.

I was not disappointed: it's the first time I felt so confident when running a frontend app in production.

Why Phoenix?

The need for the backend app was pretty simple: some basic CRUD operations. I could have used Python/Flask for this without any problem. But I knew that it was potentially something that would need a lot of live/websockets connections in a near future. Phoenix shines in this domain and provides easy backend generation for CRUD operations. Last but not least, the entry barrier is pretty low too. The community is awesome, and the available resources are really significant now (thanks to Programming Phoenix book).

I placed a bet on Phoenix/Elixir because its ability to scale is rooted at the language level thanks to the Erlang VM.

Conclusion

So yes, Elm and Phoenix are production ready for my needs and were used in a live show with more than 10M viewers. Most importantly, I'm confident I can build my company products using both of them because:

  1. They answer perfectly the main problems in web development: reliability, scalability, ease of use.
  2. Hiring people should be easy: the entry barrier is very low, despite both of them being functional languages.