Journeyman: Elabs

Let me preface this instalment of my journeyman tales by this: if I was living in Gothenburg, I would eagerly spend my working days at Elabs. But more importantly, I would want to spend a lot of my free time with them as well. To the outside world Elabs might be a powerhouse when it comes to building and designing web applications, but up close that notion is secondary to a welcoming warmth and familiar familiarity. This is a collective of individuals that truly care about one another; a second family.

At the heart of this is CJ who without fault took excellent care of me during my stay. He and his wife and partner Lilly are the epitome of hospitality. Though always impressed by the meticulousness applied to the Nordic Ruby and True North conferences, it became more evident than ever that it stems from a genuine wish to make people at ease and enjoy themselves. Given such an environment, is it at all surprising that Elabs has attracted the kind of friendly talent it has? Hardly.

Setting up

Why visit Elabs, you might ask. As I told CJ, Elabs are renowned - especially in the Ruby community. Not only for the many, many open source tools and libraries that have been released over the years, but also for the conferences. To this day, the format, atmosphere, and overall experience are what I measure all other conferences against.

Setting it all up was a breeze. A few days after announcing my journeymanship, I reached out to CJ enquiring about the possibility of spending a week at Elabs. Not only was he very receptive to the idea, but also offered to provide lodging. A month and a half later I took the morning train from Stockholm to Gothenburg, arriving just in time to settle in and have lunch with CJ and Lilly.

Pairing up

Early on in the company's existence, Elabs decided on making pair programming the rule rather than the exception. As such, fitting me in took a little bit of reshuffling the current pairs, but eventually I would spend the remainder of the day and the next with Nicklas at one of the office's pairing stations. Indeed, the developers don't have individual offices and office computers, but instead there are a number of iMacs set up with dual keyboards and mice. The computers are configured to cater to all developers when it comes to editors and other tools, making it easy to swap rooms and pairing partners alike. By all means, it's quite possible for a developer to use the same pairing station for extended periods of time, but there's no real notion of mine when it comes to computers and rooms. I found this to be quite refreshing.

A typical pairing station

Touching up

Niklas and I worked on the frontend of an application used by a client combatting climate change. As developers we don't always get to work on something used for such a worthy cause, so this was another refreshing experience. Since the vast majority of the application was in CoffeeScript and I was quite rusty in the frontend department, I initially had some fears that I would be less than useful, but for the next day and a half, Nicklas and I squashed bugs and closed issues. Above all, it was an absolute joy to pair with Nicklas as he was very verbal and careful to explain things. As the week progressed I would experience the same traits with all my pairing partners.

Working in Atom I could also draw upon my Sublime Text skills to be productive. As the Atom team has mostly copied the keyboard shortcuts from Sublime Text, I also got to show a few editor tricks. After all, the whole point about my journeyman tour is for it be a two-way street of knowledge flowing in both directions. On occasion I would try something that Atom still lacks, but overall I found it to be a rather decent alternative to Sublime.

We ended the second day on this project with a conference call with the client, followed by mocking up the next feature to be added.

Tidying up

With Nicklas taking a few days off in order to move to a new apartment, it was time to find a new pairing partner. After another round of reshuffling the pairs I ended up working with Kim. Given that Gothenburg is considered the Swedish capital of puns, I had set my mind to out-Gothenburg the Gothenburgians. Imagine my dismay when CJ told me that the punniest in the office was Kim, coming from Vaxholm outside of Stockholm.

Kim had been working on fixing a nasty authentication bug in a Ruby on Rails application. For a non-obvious reason some users signing in using Facebook's OAuth could end up being signed in as the wrong user. Tracking this particular bug down and reaching a point where it could be understood and reliably replicated took most of the day, but in the end we prevailed. Half-way through, another pair working on an elusive bug popping up in a Celluloid-based application asked for help to troubleshoot. It didn't take very long for Kim to work out the race condition likely responsible for the problem. Impressive.

Unfortunately the fix we deployed for the authentication problem revealed another problem, caused by the client's iOS application not honouring the API contract. Naturally, the quickest way around this problem was changing a few lines and redeploying. Pragmatism trumps all when your code is already in production. Plus, a few of us were heading out for dinner and drinks. Georgian wine and an Italian white tasting suspiciously similar to a dry cider from Normandy, were new acquaintances to me.

Interesting wine

As it was my last night in Gothenburg, CJ and I ended up back at the office conversing over a 40-year-old whisky. I shared my impressions of the week and as we drifted into talking about the Elabs team it became quite obvious that CJ is not only a proud father of two daughters. Elabs is his baby and the people working there are also part of his family.

Levelling up

As my final day with Elabs happened to be on one of their fortnightly lab days, we all gathered in the morning to come up with ideas on what to work on and pair up as desired. While you're here, it'd be nice to do something in Elixir, Jonas said. I proposed extending it to a mob if more were interested in hacking Elixir. Thus CJ and later also Kim joined us. Figuring out a suitable hack, we settled on building Othello using Phoenix and WebSockets. The week after, this would prove invaluable as it gave me enough experience to facilitate a similar exercise at Transmode.

Naturally, since we were in the land of puns, the project was named OTPhello. How could it not be?

The Elixir mob

As the day drew to an end, the team held demos and talked about what had be learnt. Apart from showcasing our mob's massive multiplayer online reversi game board, others had been experimenting with everything from Angular to Julia. Those of us who had been playing with Elixir mused on the utility of it in past and present projects, before I had to take my leave of the team and rush to my train. A round of hugs later I was on my way again.

Lab day demo

Finishing up

Going to Elabs I expected to find a bunch of dedicated, talented people. While true enough, this only tells a part of the story. I found people that honestly enjoy each other's company. Having left a tightly knit team at Mag+, I find it heartening that given the right circumstances and the right people, the world can be full of second families.

My deepest thanks Elabs for letting me play with you. Let's do it again soon!