Babbel Bytes

Insights from the Babbel engineering team

How Travis CI helps us deploy to AWS Lambda


Want to simplify your infrastructure and reduce your operations overhead? Consider using AWS Lambda, and let Travis help you with the deployment.

If you don’t know AWS Lambda, here’s how Amazon describes it:

AWS Lambda is a compute service that runs your code in response to events and automatically manages the underlying compute resources for you.

Put simply, you write the code and AWS runs it for you. The “runs it for you” part can be either event-driven, scheduled, or via a manual trigger.

If you’re on the move to a more decoupled service architecture like we are, this can be a big help.

Continue reading…

Retrofit 2 and Rx Java call adapter error handling

Frederico Gonçalves

If you’ve kept yourself up to date with the latest in Retrofit you’ve soon came to the question “Should I or shouldn’t I update to Retrofit 2?”. At Babbel we’ve already answered the question, we updated our new Android app to use Retrofit 2.

Although still in a beta stage, Retrofit 2 already offers a lot. However, there are some crucial changes. Perhaps one of the changes that affected us the most was the removal of RetrofitError. There are more than one reason why this class was removed, but we weren’t ready to give up on it so fast. As an intermediate step we needed to port its behavior to Retrofit 2 while using RxJava.

The new Retrofit design helps you define call adapters that can help you customize how you handle errors in your calls.

Continue reading…

Babbel 4th Hackday - our review


Twice a year we break out of our everyday routine and meet somewhere in Berlin to form ad hoc teams working on our own project ideas and hacks. Some of them eventually become actual Babbel projects.

As the Babbel family is growing pretty fast lately – and so is the list of the Hackday attendants – the venue research can get really hard; this time we had an exciting option, though…our future office!

A completely empty 5–storey building close to Alexanderplatz just for us and during the Halloween weekend. Creepy!? Scary!? Exciting!

We took over its big empty open space and we brought tables, chairs, sofas, bin bags, lights, super Wifi, coffee, snacks, Club Mates, beers…and last but not least, 110 Babbel – Hackers; 110 people from Product, Engineering, Data Analytics, Marketing, Customer Support, Design, Didactics, Internal Communication worked from 10 am to 19.30 pm on 26 different projects.

4th Babbel Hackday

Continue reading…

How we upgraded a big Ruby on Rails monolith with Zero Downtime


In September 2015, we started taking the Rails upgrade of our monolith seriously. We were running Rails 3.2 up to that point, and with Rails 5 on its way, we ran into the risk of using an unmaintained version of the web framework. This was not an option. Hence, the upgrade to a current Rails 4 version was inevitable.

Continue reading…

Evolution of Babbel’s data pipeline on AWS: from SQS to Kinesis

Kirill Shirinkin

Various data storages have seen increased growth over the last few years. There are now so many of them that it becomes overwhelming to choose the right tool for the job. Among all of the Big Data ready replacements for traditional relational databases (think Cassandra or HBase), there are also a few tools that try to solve a slightly different problem: to provide a centralized log of data, that is both writable by multiple producers and easily readable by multiple consumers.

Continue reading…

Continuous integration for mobile


Sven Kroell, Mobile QA Engineer at Babbel & Thanos Karpouzis, Senior Android Developer at Babbel held a talk about Continuous integration for mobile at this year’s Droidcon conference.

The video recording is now to available on Youtube.

API versioning at Babbel


Alex MacCaw from Clearbit has written a nice overview about approaches for API versioning. Today we want to elaborate how we deal with API versioning at Babbel.

From the three wide-spread options (using the URL, using a request header, using a dynamic date), we have chosen to go for using URLs. This is the most straightforward solution with minimal overhead for clients.

In addition to a major version, we opted to use a Semantic Versioning approach.

Continue reading…