Planning Poker Online

Lorenzo Sinisi bio photo By Lorenzo Sinisi Comment

I wanted to learn Elixir and Phoenix Framework

After reading a few books about Elixir and testing it creating some basic library, I decided that was a moment for some practical experiment that would include HTTP requests, deployment and some basic user interaction.

In my last post I wrote about starting this project about Scrum and Story Points link here. I wanted to create a Planning Poker Online using Phoenix and Elixir. All I needed came out of the box with the Phoenix Framework and the only external library that I have included was Coherence (for user authentication and sessions management).

A few things about Phoenix, that I didn’t like

Everything was fantastic. Websockets and Channels are easy to use and setup, thank you José! Just lovely compared to the struggle you face when implementing this kind of things in other frameworks such as Ruby on Rails. But what I really hated the all time was the use and abuse of abbreviations. From args instead of arguments to the the CLI of Phoenix was recently renamed from phoenix.gen. ... to phx.gen. ....

And I totally disagree with this decision, once we have letters, why don’t we use them? But this is not just a matter of naming and style, the two versions of the command (phx and phoenix) are not compatible with each other and this sucks.

A few things about Coherence, that I also didn’t like

I have opted for Coherence as plugin to manage user sessions and authentications. Everything was working perfectly and was easy to setup. Big thanks to all the people that contributed to it. But again I wanted to have a look at the source code to know if it was possible to have custom paths for my users (i.e. /account/new instead of /sessions/new) and when I opened the code I saw that every path was hardcoded with a bunch of if/else statement. This is something that the community of Elixr should definitely improve.

Note: for instance, instead of doing:

if Coherence.Config.has_action?(:registerable, :new) do
  get "/registrations/new", Coherence.RegistrationController, :new

We could have something like that:

Enum.each(Coherence.Config.registered_controllers, fn(controller) ->
  get controller.path, controller.module, controller.action

And avoid a bunch of if/else in the source code. But this is something where each one of us can contribute.

And so welcome to!

The application went well and the development with Elixir what nothing but a pleasure. I decided to take a step forward and publish the online version of the application online at and have it free for everyone to use it. The application is running on Heroku and the code is public and hosted on GitHub.

So, if you were looking for a Planning Poker Online, here you go:

Feel free to leave a comment here or open a issue on this project on GitHub.

comments powered by Disqus