A first look inside TransferWise engineering

Hello, fellow engineers! We're kicking off our blog with a brief history of TransferWise and a look into how we're cooking up our systems. Our band of blogging brothers is queueing up to let you know of our learnings and experiences in more detail.

The Big Bang

TransferWise was born out of frustration. Taavet Hinrikus and Kristo Käärmann are two friends who believed that money is meant to flow freely. Taavet got paid in euros, but was living in London. Kristo was paid in pounds, but had a mortgage in euros and often spent time in Belgium. They devised a simple scheme. Each month the pair checked that day’s mid-market rate on Reuters to find a fair exchange rate. Kristo put pounds into Taavet’s UK bank account, and Taavet topped up his friend’s Belgian account with euros. Both got the currency they needed, and neither paid a cent in bank fees.

Fast-forward 3 years - oh boy, has the idea grown. We've transferred over £1bn and have 100+ employees.

What does it run on?

TransferWise is built on top of the Grails framework and uses the MySQL database for data storage. How was Groovy/Grails chosen ? Well, Kristo knew that banks have used Java and was looking around what would be the best Java/JVM based framework for rapid development. He ended up with Grails and actually wrote the first few thousand lines of code. Even as our codebase is getting close to 100 000 lines, there are still some classes and methods written by our CEO working their magic here and there, and he still likes to keep an eye on the source code.

We use the MySQL database because it has proved to be fast, has gone through a lot of optimization and new features in the latest versions (we use the latest 5.6 version). It has proved to be well scalable as used by Facebook & eBay and also has gotten some nice improvements from Facebook engineers. Another good reason for MySQL is that it's widely known and it's easy to get started with for most engineers. We are not planning to put any logic inside the database, just use it as a storage engine. All the business logic is in the application code.

Like with any start-up company, our key criteria for choosing the technology stack is the ability to prototype fast, time to market and getting the feedback from our customers. In other words, the ability to build an MVP - Minimum Viable Product. It doesn't matter what technology stack to use if you are building something which customers don't need.

For TransferWise, this is not the case, our customers love us and we are growing at a rate of 10x a year - we are having one hell of a ride.

How do we process the next £9bn?

All our biggest engineering challenges are related to growth - hiring super-engineers, improving scalability, and of course, implementing support for new currencies and markets. As the volumes increase, we need to redesign different parts of the system to handle bigger amounts of data. The current TransferWise system is a monolithic web application. As around 70% of our business logic is behind the scenes, we've taken a direction towards service oriented architecture and separating data processing logic into services.

We are starting to reach the volume of data that makes us think about scalability. As we like to give back to the engineering community, we are going to share what we have learned - and are going to learn - about Groovy, Grails, GORM, Hibernate and testing aspects in the upcoming blog posts.

Feel free to ask questions.

Rain Johanson @ TransferWise engineering