Journeyman: Twingly

For the longest period of time, all I knew was that I had been invited to visit and work with a team by Shadowman. Well, at least that's his avatar.

Shadowman alias dentarg

My Google-fu skills failed me and as much as I tried, I couldn't quite remember how Shadowman, alias dentarg, alias Patrik Ragnarsson, looked in real life. Slightly embarrassing as I know that I've met him at at least one previous Ruby meetup a few years back. On the flip side, I was pretty sure that he wouldn't run around with shurikens so it felt like an easy and safe bet to hop on the train to Linköping where Twingly is located.

Almost, but not quite described as "Google for blogs", Twingly as a company has been around since 2006. Their core system was primarily built on .NET, but in recent years, more and more has been written and added using Ruby. As such, there are three things that make them stand out among the typical Ruby shops.

Firstly, they don't use Rails at all which I found to refreshing. Sinatra is the norm rather than the exception.

Secondly, given that the core system still is mostly built in C#, adding functionality usually entails building small services in Ruby, plugging them in where needed. Building a new product or expanding the capabilities of an existing one is typically done in a microservices-oriented fashion.

Thirdly, maintaining consistent behaviour between the .NET and Ruby sides is not only desired, but required.

In one such case, handling URL:s consistently, had led to the creation of a Ruby library. It was in ensuring that the behaviour indeed was synced between .NET and Ruby that we would spend the majority of our time during my stay.

During my journeys, several of the teams I've visited have been eager to try two things: mob programming and Elixir. Twingly was no exception and in preparation, the team had tried mob programming on their own for an hour and a half the week before I arrived. This made it very easy to dive into the task at hand as most of the equipment was already tried and tested.

Speaking of arriving, as I walked into the office I was greated by Patrik, who looks nothing like Shadowman. At least he wasn't sporting Shadowman's armour that day.

The first afternoon was mostly spent with Patrik, Robin, and Mattias, going through the overall system architecture, introducing me to Twingly's business, and getting me acquainted to the task that we as a team would mob up on. As we got started in earnest the next day, I found out that the team seldom, if ever, practiced pair programming. Despite this, or perhaps thanks to this, they embraced mob programming swiftly. To this date I've yet to see another team so seamlessly and effortlessly start mob programming. The usual knowledge sharing began to flow; initially editor shortcuts, then language features, then domain knowledge.

The mob

When visiting a team and introducting it to mob programming, I hope, but don't expect my entire stay to be in that format. At Twingly there seemed to never be a question of doing it any other way, which I found very encouraging. Later still I would find out that the team still practice mob programming now and then. It's wonderful to learn that the practice isn't a one-off thing, never to be used again after I've left.

On the third day the team was reinforced by Johan that had recovered from a cold, and by the end of that day we had mostly wrapped up the work on synchronising the behaviour of the Ruby library with that of the existing .NET system.

Johan joins the mob

We also celebrated that Twingly had reached the milestone of indexing ten new million blog posts in a week. Celebrations are important!

The cake is not a lie

Much as we had planned from the beginning, the last day had been freed up to be all about Elixir. Still using the mob programming format, I had the pleasure of introducing the team to the language.
While I had to leave before we finished the exercise at hand - building a small web crawler - it felt like the team were making good progress and had fun tinkering with a new language.

Introducing Elixir

I recall getting on the train back home being somewhat perplexed. Where had the week gone? I had had so much fun working with the Twingly team that it felt all too soon to leave Linköping. Pondering this, I think it was their palpable eagerness to try something new, not just individually, but as a whole team that so completely won me over.

Five stars. Would work with again.