So…we have to do a 2.0 project and re-architect/re-platform how do you go about selecting new technologies?

The finish line and intermediate goals are clear..the team is in place and ready to go…how do we go about selecting technologies to use for our re-architecture?

For Hailo 2.0 I started by sending out a blank grid like this to opinion holders and the smartest people I had ever worked with in the past asking them what they would look at for each layer.


What Became the Leading Candidates

JavaScript Framework



JSON, protobuf

Above the API



Google golang, Java

Message Queue

RabbitMQ, NSQ, ZeroMQ


Google golang, Java, Scala



                  Data Store                          Cassandra, PostgresSQL

This allowed us to narrow down our consideration space and focus on the most likely contenders at each layer. There was a fair degree of consensus in the responses. Very few of the respondents would have not chosen Google golang or Java for the back end services for instance.

If there is one thing techies love arguing about it is which language/framework and so on is “best”. Of course there is no right or wrong answer so the debate can rage with almost religious fervour for far too long if it is left unchecked.

So how do you run an inclusive, exhaustive, collaborative and objective process selecting new technologies in a timely and effective way?

We put aside the first few two week sprints of our 2.0 project to prototype the various important technology options like this;

Sprint One – Message Queue

Sprint Two – Main Back End Language

Sprint Three – Data Store

Sprint Four – Protocol

This process worked well because it was fair and objective and we were staying true to the agile principle of valuing working software. Advocates of particular technologies had to show how much working software they could create in two weeks and we made a decision on demo day at the end of the sprint.

We learnt a lot during the sprints. Advocates of particular technologies changed their mind having tried to work with it and everyone in the team felt they had been given a fair “crack of the whip”.

It took six weeks but we learnt a lot, bonded as a team over friendly rivalries, built some useful prototypes we built on later and avoided lengthy and unproductive debates selecting new technologies.

So the team was in ready and now the “how” toolkit was was time to attack the first goal.

For the record the team chose protobuf to communicate with our mobile phone apps, Google golang for the API, RabbitMQ as the message broker, and NSQ as the event fire hose queue, Google golang and Java as the services language. (The H2.0 platform supports both but Google golang is definitely the “weapon of choice”). Cassandra is the back end data store.