Blog

2016 in Review

by Malin Schibler, posted 12 January 2017 | 3 comments

Illustration of a train coming out of a tunnel representing the 2016 year.

In 2015 and 2013 we looked back on the year in terms of numbers… We counted the number of users, employees and the amount of kilometres covered by train. We gave you all of the details. And certain speculators came up with the wildest scenarios.

This year, we’ve stopped with the numbers. Not because they are less significant than before. Instead we wanted to change the formula to keep in line with what 2016 has brought us: a vast amount of projects, surprises and new additions.

We’d like to thank all of you for this very eventful year, both for your understanding and your outrages too. It’s helped and encouraged us to continue and improve, because it’s you, both the old betas testers and the newcomers, that have paid close attention to what we do.

  • January

    High-speed payments
    We started the year with a bang: your payments launched with a speed of 320 km/h in our machines, so your bookings can always be completed in the fastest way possible. We keep your data and information Snowden-style secure, and you’re able to buy your ticket in just a few clicks.

  • February

    Let’s talk business
    After a beta launch in November 2015, we released Captain Train for Business in February. The features are identical to our booking platform that’s open to everyone, though it has been slightly adapted to suit the needs of professionals and businesses. We think only a single-word description is in order: simplicity.

  • March

    Welcome to Trainline
    In the long and grand history of Captain Train (Capitaine Train), our fusion with Trainline, the number one seller of train tickets on the other side of the Channel, remains of our biggest events.  It provided us with a huge new set of opportunities for us to give you a real travel experience for the entire European continent.

  • May

    All visitors welcome
    We launched a new version of our website, specifically for visitors. This means that you no longer have to create an account to book a ticket with us. In our quest for the simplest and best customer experience, compulsory account creation was our Achilles heel. For our apps this still has a short while longer to go and we will soon also offer bookings without needing to create an account.

  • June

    ¡Vamos a la playa!
    After Germany and Italy, Spain was next to be added to our network of countries for which we sell tickets. At the same time, we are also very proud to offer our website and applications in Spanish. That’s because when we do something, we do it muy bien. 

  • September

    A minty fresh water
    This September, we officially became Trainline and were completed with a new mint green paint job. You may have also spotted us in the Parisian metro with our new ad campaign. This was a big surprise to many of you, especially for our most loyal users. We received a lot of valuable feedback about this and would like to thank you for it!

  • October

    The age of Dog
    This was truly a fantastic announcement for our 4 (or fewer) legged friends. We now proudly also offer animal reservations for any SNCF tickets. Small anecdote: this feature has by far been one of the most asked-for since the beginning of Captain Train. So it was a true milestone for us to meet! Feel free to tweet us any pictures of you and your animal companion when you’re travelling by train…  (0r just any picture of your pet … we don’t mind.)

  • November

    Please mind the gap
    As the colder months of the year approached, we opened our doors to the curious at Startup Assembly [link in French]. A large amount of pastries have been eaten, and plenty of presentations about our payment systems and our spirit for customer service were given to accompany their delicious taste.

  • December

    Fries, waffles and pan-European democracy
    To finish off the year, we were super happy to announce that we now also sell tickets for the Benelux countries: Belgium, Luxembourg and the Netherlands. That means you can now eat chocolate covered waffles (or fries, if that’s your thing) throughout the entire year.

If you’ve kept reading this far, awesome! Here’s a little piece of insider information: we’re already back to work on exciting projects for 2017 and we will of course be telling you all about it, right here.

Train Tickets for the whole of Netherlands, Belgium and Luxembourg are now available on Trainline!

by Malin Schibler, posted 12 December 2016 | 4 comments

Illustration of symbols representing Benelux.

First it was only France, then came Germany, Italy and later on Spain. Now we’ve added the Netherlands, Belgium and Luxembourg – also known as Benelux! – for which we previously could only offer a handful of routes. So now we’re excited to announce that we cover all three countries and have a whole new range of destinations on offer.

The strength of a union

Situated between the north of France and the west of western Germany, you’ll find “Be” “Ne” “Lux”. It’s a region that finds its name from the three distinct countries that it is made up of: Belgium, the Netherlands and Luxembourg. It is these three countries that formed an economic union at the end of World War II, to join forces against their larger neighbours. And from this Benelux was born.

Harmonising rail travel

Although its purposes are primarily economic, the union also helped to make  the sale of Dutch, Belgian and Luxembourgish train tickets easier. It allowed Benelux to be crossed by train as if it were a single territory. By adding Benelux to our network coverage, we’re not simply adding a single new country – but instead three. So this means that we’ve been able to include three entire new rail networks to our platform.

Heading to Benelux

Brussels

picture of the royal gallery in Brussels

La galerie du Roi — Flickr/Stephane Mignon

As the capital of the low lands, Brussels represents the political heart of Europe and may have once had a reputation for being stuffy or bureaucratic. Yet in fact, Brussels is gaining a reputation as one of Europe’s must-visit cities, with its great nightlife and fantastic shopping as well as its well known beer and chocolate!

Travel to Brussels by train:

Amsterdam

pictures of Amsterdam housses with bikes

By bike

Although Amsterdam is largely known for being liberal in every sense of the word,  it is a city that encapsulates the true spirit of a global metropolitan village. It is lively, innovative and vibrant enough to be considered a world city, yet its quaint houses, historical architecture and never-ending canals all ensure that Amsterdam keeps its down-to-earth vibe. It is a remarkable city that has something to offer for all – as long as you don’t get in the way of the bikes!

Travel to Amsterdam by train:

Luxembourg

Picture of the river in the city of Luxemburg

Luxembourg — Flickr/Flavio Ensiki

Nestled in between France, Belgium and Germany, the Grand Duchy of Luxembourg enjoys a central position in Western Europe, which means this tiny country is able to shine in the financial sector.  It also offers a beautiful scenic railway network. The Grand Duchy can readily be crossed by train: to get to the North, just get off at front of the train. To reach the south of Luxembourg, just exit the train at the rear. The capital of this eponymous country, the city of Luxembourg, is certainly worth seeing, if only to enjoy its walled city – an UNESCO World Heritage Site.

Head to Luxembourg by train:

Elsewhere in Benelux

These new tickets give you the opportunity to discover the lesser-known parts of Benelux. In Belgium, feel free to take a trip to Antwerp, Bruges or Liege. In the Netherlands, we let you discover Utrecht, The Hague, Gouda or Maastricht. Now that we can offer you tickets to all of these places, it would be a shame to miss out!

Taking the train in the Benelux

Picture of Antwerp train station with large door

Inside Antwerp station — Flickr/squawkr

Thanks to Mick’s work,  you can now book tickets to travel all throughout the Netherlands, Belgium and Luxembourg. This makes up a rail network of almost 7000 km in tracks.

Ticket prices and fares

For the Benelux, the ticket prices depends primarily on the length of your journey. The more distance that you cover – the more you pay.  For example, here are some of the costs of an adult priced fare:

Route Second First
Brussels – Bruges €14.30 €22.00
Amsterdam – Haarlem €5.20 €8,20
Eindhoven – Liège €23.00 €37.70
Rotterdam – Antwerpen €22.60 €36.40
Luxembourg – Gand €45.00 €63.80

 

When to book

Contrary to the practice for French, German, Spanish or Italian train tickets, the price of tickets for trains in the Benelux doesn’t depend on when you book. Instead, you will pay the exact same fare regardless of whether you book well in advance or on the day of travel. So the date of booking doesn’t really matter or influence your tickets.

No seat reservations

Unlike tickets for TGV trains or (the optional) seat reservations for Deutsche Bahn trains, there are no seat reservations given for tickets for any of the Benelux trains. This is much like the regional trains in France (TER), Italy, Germany and Spain. So when you receive your ticket, there is no seat number specified and instead you are free to pick your own seats on board, within your booked travel class.

Pre-book tickets

If you have a Trainline account, you might already know that you can pre-book your tickets by adding them to your cart – if this is permitted by the rail operator. By pre-booking tickets, you can guarantee and secure the price of your ticket and your seat reservations for a certain amount of time. This can range between 30 minutes to more than a week. There’s no obligation to pay and instead the reservation just deletes itself if it isn’t purchased before it expires.

You can do the same with any of your booked Benelux tickets. Yet the pre-booking time unfortunately isn’t as generous as with other tickets – you generally have a few hours before the reservation expires. So think well about your decision, but not too long 😉

Train tickets for the Benelux

Printing E-Tickets

All of the train tickets that we sell for the Netherlands, Belgium and Luxembourg are nominative e-tickets. This means that they are tied to the travelling passengers named and can’t be used by or sold to someone else. The e-ticket must be printed on A4 paper. Displaying the ticket on a phone unfortunately does not suffice – the ticket must be printed.

Refunding or exchanging E-tickets

The E-tickets are non-exchangeable. This simply means that if you wish to exchange your ticket (e.g. change the date or the destination), you can cancel the ticket and then purchase a new one. You can easily and quickly cancel your tickets on our website or with our apps. The ticket counters in Belgium, Holland or Luxembourg unfortunately cannot modify a ticket that has been purchased through us. Though send them our best railway greetings in any case.

Fare conditions

Picture of Brussels Midi train station

Mid-length Brussels — Flickr/R/DV/RS

Like all rail operators, the Benelux operators offer many fares. To make things as simple as possible, we sell two specific fares: Domestic and Standard.  Their conditions are very similar, regardless of whether you’re travelling in Belgium, the Netherlands or Luxembourg.

In general, the tickets:

  • cannot be exchanged
  • can be cancelled (for a fee of  €5 or €15).

Conditions for the Domestic and Standard fares

In Belgium, the fare is called Domestic. The Dutch and Luxembourgish have chosen to call it Standard. Although a difference in the name – they are both the same thing. These tickets are not exchangeable. They are refundable before departure. Either for a fee of €15 if cancelled on the day of departure or for a fee of €5 if cancelled before the midnight of departure.

Travel with your bike

If you’d like to travel within Benelux with a bike, then it’s super easy! First book a ticket online and then you can later buy a ticket for your bike at any ticket counter or ticket machine. Unlike SNCF trains, we do not sell bike tickets on our site for Benelux trains.

Here are the prices of bicycle spaces on trains in the Benelux:

  • €5.00 for a one-way ticket;
  • €8 for an unlimited number of journeys in a single day;
  • for free if you have a folding bike.

Trusting people with admin rights

by Pierre de La Morinerie, posted 02 December 2016 | Add comment

Picture of crossed keys, inspired by the film "The Grand Budapest Hotel" by Wes Anderson

The keys to our servers. / credits

At Trainline Europe it was decided early on to trust employees. Once you’re in, you’re in entirely. We are not going to give you gradual access to the code, partial access to some systems, editing rights on a case-to-case basis. As much as possible, everyone can use anything, right from the start.

This has many concrete advantages. It lets people be creative: when you don’t have to ask for permission, many creative experimentations and solutions are possible. It reduces friction and paperwork: when the administrator of a system leaves for vacation, work can still be done without waiting for their return to perform the required tasks. It gives greater responsibility to people: when you are given the rights to a system, you tend to be responsible with it.

Let me give you some examples.

C’mon newcomer. Follow me.

On your first day at Trainline Europe, we’ll spend a few hours giving you access to every system.

Are you a Customer WOW Engineer, supporting our customers? You get access to OTRS, our tool for answering customer support emails, of course. But also to GitLab, the tool used by developers to write and host the code for all our software. You’ll be able to see our issues boards and comment on our code or mock-ups. We’ll even train you for this. You can use this knowledge to better respond (“Yes, we have an open issue about unsellable tickets to Eu-La-Mouillette right now”), and report problems to developers.

Are you a software developer? You’ll get access to GitLab, but also to OTRS, our tool for answering customer support emails. You can use it to handle job applications, but also to answer real customer questions. We’ll even train you for this. Seeing real issues first-hand that customer face will help you to have a better sense of what to do to improve our product, or the tools used by WOW Engineers. You’ll also get rights to deploy software into production, from day one. What better way to on-board new developers than to make them push their own improvements into production?

You’ll also get access to our blog. You can write anything, and you have access to the “Publish” button. Want to talk about something great around you? Just sign-in and start writing a blog post. Of course you should probably get it proof-read by someone else, and ask for the person managing the editorial timeline for the right moment to publish a new article. But you won’t get stuck because “Sorry, the person with publishing rights is in Antarctica for three weeks”.

We use Slack for internal discussions. Many things happen there: work, notifications, random chatter… feel like an emoji is missing? Add it yourself right away. This is how the conventions for deploying our software emerged organically, using one custom emoji per project. Want to coordinate the work on a new feature? Just create a new public channel. Nobody will restrict this – and if the channel remains empty, there is still the possibility to archive it later.

Something is missing on our servers? You need a new package, or changing some settings? The Ansible recipes for configuring our servers are accessible – so that everyone can read, understand and improve the recipes.

Speaking for myself

A few years ago, we migrated from GitHub (a source-control website) to GitLab, a free alternative. Although GitLab is now a pillar of our development process, the beginnings were rough, with some features not working as well as we’d hoped.

After complaining for a few hours about this, I started editing GitLab source code and improving the major pain points. Once the changes were ready, I asked our CTO if he could deploy them. He answered by giving me administrative access to the machine running GitLab. Wow, that was more than I asked for.

I deployed the code, it worked well, solved our issues, and even got merged in the official project. Yay! With these rights, I started to feel responsible for it. I started upgrading GitLab regularly, following progress of new features, and making other improvements. I became the de-facto GitLab maintainer – just because someone, at some point, gave me full rights.

This wasn’t planned, but giving the rights was surely a productivity boost for us. And it worked the same way for many other people working on different topics: one day, someone gave them full rights.

Rewriting our software pipeline

Earlier this year we wrote about how we transitioned from one software pipeline to a new one, based on GitLab. This gave us a significant productivity boost: we run tests quicker and earlier than before, changes get accepted faster, and idea-to-production cycle is reduced.

This project started partly because transitioning a project to this new improved system didn’t require any permissions. Our old system wasn’t configured to give access to everyone – which means few people knew how to configure it, or could make changes. The new one can be used safely by anyone, without requiring specific permissions – and that’s how it started.

Security

This doesn’t mean we compromise anything on security; quite the contrary. Access to production servers are restricted to a limited number of people. We use configuration templates, to keep away production credentials from the public recipes that configure our servers. We also peer-review all changes to new code or configuration. And as we use versioned configuration systems, we always know who did what.

But apart from this, once you’re in, we trust you. To not only to do the right things, but to use these rights to do amazing things.

Conclusion

This is why when we set up new software, we usually give admin rights to as many people as possible.

  • It allows people to solve real organization issues in a spontaneous way.
  • It removes single-points-of-failure, so that we can work even when the system administrator is not there.
  • It gives responsibility to the people, which they then may use for amazing things that weren’t even planned.

Give them access, and you’ll see what people can really do.

Standardizing interfaces across projects with Makefiles

by Pierre de La Morinerie, posted 30 September 2016 | Add comment

If you are working on a non-trivial software solution, you probably have several projects. Maybe one for the frontend, and one for the backend? Maybe one for managing data, or secrets, or deployment? Or did you drink the micro-services kool-aid (please don’t), and have now dozen of projects, each one containing a small server?

In this case, the README file for these projects probably have a common structure (“How to setup”, “How to run”, “How to test”) – but all of them will contain different invocations. Sometime the project needs to be started with npm run, or node server.js, or ember server – and some other project with bundle exec rails server, or maybe ./bin/server.

What if we could instead express standard shortcuts for all these commands?

That’s what Unix project maintainers have been doing for ages – and also what we eventually did with Captain Train projects: we used Makefiles.

Read more »

Captain Train changes its name and becomes Trainline

by Malin Schibler, posted 06 September 2016 | 24 comments

Alea iacta gare de l’Est. The die is cast – our old name too. After many years of good and loyal service, we brought out old name to the depot station, in order to replace it with that of Trainline, as we announced a short few weeks ago. Since the acquisition of Captain Train by Trainline in March, both of our teams have been working closely together on a joint booking platform for Europe. To ensure that everyone finds their way around, it only made sense to have the same name and the same visual identity throughout all of Europe.

A new name and new colours

On our website:

search_en_shrink Our website is now accessible at www.trainline.eu. We’ve changed the logo and the colour schemes, though the interface and the product remains exactly the same. You still won’t find any ads or booking fees.

In our apps:

Screenshots of our mobile apps Our Android and iOS apps have also received a new paint job, in order to adapt to Trainline’s colour palette and logo. Though the functionality remains exactly the same. In the App Store and in the Play Store we’re now called Trainline EU. This helps us distinguish ourselves from the British app, which is called Trainline UK (and is for train tickets in the U.K.).

On social media:

While we were already at it, we also changed our name everywhere online. You can now get in touch with us at , @trainline_eu on Twitter, and Trainline Europe on Facebook. Feel free to come by and say hello!

A future with prospect

In time, our website and apps will merge with the services of Trainline, to offer a single and comprehensive booking platform for all trains in Europe. Whether your departing from Manchester, Dyffryn Ardudwy, Dijon, Barcelona or Rome, you’ll have all of your tickets in the same app. There’s still a long road ahead, though we’re at least now working towards our goal whilst sporting the same colours. Thank you to everyone who has been using Captain Train, especially our loyal customers. With all of our heart do we want to make this collaboration with Trainline successful for you.

What to Expect in September

by Brice Boulesteix, posted 22 August 2016 | 8 comments

We wanted to give you some news and let you know what we’ve been up to in the months following the Trainline acquisition last March. In brief, the past five months have been five very good months for Captain Train: our sales have rocketed, our European network has expanded and the Trainline team has warmly welcomed us each time we’ve visited them in London—although the same can’t really be said about the weather.

What we’ve accomplished

In France

picture of captain train team in the metro In the Hexagon, we hung our posters up in the Parisian metro and train stations for a few weeks.  As you can see, we were pretty excited about that.

In Europe

map of spain with railway network In Europe, Spain has joined the list of countries where we sell all types of train tickets. Like France, Italy and Germany, our site and applications are now practical for every day living in Spain. Spain’s network is very similar to France since only one carrier operates the trains there: Renfe.

What remains to be done

Becoming Trainline

Since the takeover by Trainline, the Captain Train managers have been leading a double life and juggling two business cards at a time: some with the Captain Train logo, others with the Trainline logo. To lighten their pockets, as well as establish one single brand across Europe, we’ve decided to adopt the name Trainline. From September on, Captain Train will be known as Trainline. Our site and our application will change name and colour, but soon you will see that Captain Train is just getting a mint green paint job. We have no plans to move a single pixel, it’s just a simple coat of paint, so that the appearance of Trainline services are the same on both sides of the Channel.

Don’t lose touch

We are now part of the group Trainline, certainly, but our mission and our values have not changed. We will continue our efforts to become the favourite site of people throughout Europe who wish to purchase train tickets. Clearly, everything at the heart of Captain Train remains more relevant than ever with Trainline. Trainline wants to simplify ticket sales like us. They are eager to promote train travel and, like us, they want to conquer Europe—in the geographical sense, anyway.

Moving forward

A new chapter has opened for Captain Train. Trainline is now part of our daily life and we’re still doing what we always wanted to do: become the largest window to Europe. Thanks for reading. If you have any questions or comments, we’d like to hear them, so leave us a note below or send an email to realpeople@trainline.eu.

Building our web-app on GitLab-CI

by Pierre de La Morinerie, posted 21 July 2016 | 3 comments

The railway world is a fast-moving environment. To bring you the latest improvements and fixes as quick as possible, Captain Train’s web-app is often updated, sometimes several times per day.

Did you always wonder how we manage building and deploying all of this without a jolt? Then read-on: here is a technical peek into our engineering process.

GitLab at Captain Train

From Jenkins to GitLab-CI

We used to build our web-app using Jenkins. A robust and proven solution—which was polling our repositories every minute, and built the appropriate integration and production branches.

However we recently switched to a new system for building our web-app. To host our source-code and perform merge-requests, we’re using a self-hosted instance of GitLab. It’s nice, open-source—and features an integrated build system: GitLab-CI.

See it like Travis, but integrated: just add a custom .gitlab-ci.yml file at the root of your repository, and GitLab will automatically start building your app in the way you specified.

Now what’s cool about this?

Reliable dockerized builds

Jenkins builds were all executed on a resource-constrained server—and this made builds slow and unreliable. For instance, we observed several times PhantomJS crashing randomly during tests: apparently it didn’t like several builds running on the same machine at the same time—and a single PhantomJS process crashing would bring all of the others down.

So the first step of our migration was to insulate builds into Docker containers. In this way:

  • Every build is isolated from the others, and processes don’t crash each other randomly.
  • Building the same project on different architectures is easy, and that’s good news, because we need this to support multiple Debian versions.
  • Project maintainers have greater control on the setup of their build environment: no need to bother an admin when upgrading an SDK on the shared build machine.

It scales.

GitLab-CI allows us to add more runners very easily. And now that builds are performed in Docker containers, we don’t have to configure the runners specifically with our build tools: any out-of-the-box server will do.

Once a new runner is declared, scaling is automatic: the most available runner will be picked to start every new build. It’s so simple that you can even add your own machine to build locally.

We’ve already reduced our build time by switching to a more powerful runner—a migration that would have been more difficult to do using Jenkins. Although we regularly optimize the run time of our test suite, sometimes you also need to just throw more CPU at it.

Easier to control

With Jenkins, the configuration of the build job is stored in an external admin-restricted tool. You need the right credentials to edit the build configuration, and it’s not obvious how to do it.

Using GitLab-CI, the build jobs are determined solely from the .gitlab-ci.yml file in the repository. This makes it really simple to edit, and you get all the niceties of your usual git work-flow: versioning, merge requests, and so on. You don’t need to ask permission to add CI to your project. Lowering the barrier to entry for CI is definitely a good thing for engineering quality and developer happiness.

Tests on merge requests

GitLab-CI makes it really easy to build and test the branch of a merge request (or a “Pull request” in GitHub slang). Just a few lines added to our .gitlab-ci.yml file, and we were running tests for every push to a merge request.

Still testing – but just hit the "Merge When Build Succeeds" button and move on

Still testing—but just hit the button and move on.

We get nice red-or-green-status, the quite useful “Merge automatically when the build succeeds” button—and, as branches are now tested before being merged, much less build breakage.

Ready to merge.

Ready to merge.

A slick UI

GitLab-CI provides “Pipelines”, an overview of all your build jobs. This points you quickly to a failing build, and the stage where the problem occurs. Plus it gets you this warm and fuzzy feeling of safeness when everything is green.

All Pipelines are green, ready to deploy.

All Pipelines are green, ready to deploy.

In a nutshell

We found the overall experience quite positive. Once the initial hurdle of making the build pass in a Docker container, integrating it into GitLab-CI was really easy. And it gave us tons of positive signals, new features and neat integrations. 10/10, would build again.👍

Our Android team also migrated their pipeline, and are now building the integration and production Android APK with GitLab-CI.

For further reading, you can find on the official website a nice overview of GitLab-CI features, and some examples of gitlab-ci.yml files.