Toss speeds dev and cuts hours of testing time
Korea-based personal finance app developers adopt concurrency and Docker layer caching with CircleCI for CI/CD
The challenge
It’s not often that users of financial apps call the experience “happy” – but the developers of the Toss app aim for customer happiness every time they create and test code. In fact, the developer experience is closely tied to the Toss user experience, explains Sojin Park, Lead Front-end Developer at Toss. The 65 frontend developers on the Viva Republica take pride in their role of delivering happy users.
However, the company’s organizational structure complicated developers’ goals to build the app to be as user-friendly as possible. Toss has a designated product team for every app function, such as payment services.
“Most of our services are deployed independently,” says Park. “In our code repository, there are over 200 services for internal and external use that are built and deployed independently. We also have very high coding standards, and every time code changes, we want it to be checked.”
The Toss code repository has tens of thousands of files. Park says the repository’s size is why developers needed concurrency and parallelism to deploy code – and why the company sought a new CI/CD solution.
The solution
Toss was using Jenkins for CI/CD, which made it difficult for developers to run tests in parallel. In seeking a new CI/CD solution, Toss considered GitHub Actions and Travis CI, along with CircleCI.
CircleCI stood out among other solutions because of its features for completing runs on hundreds of Docker tasks at once using parallelism and test splitting. “CircleCI provides various Docker images and they’re all open source,” Park says. “So it’s very easy to customize.”
“With CircleCI our testing and deployments are running at about two minutes.”
Sojin Park | Frontend Developer at Toss
How CircleCI powers Toss’s business
In keeping with the development team’s goal of creating happy users of the Toss app, developers also want to deploy frequently – as Park notes, as many as 40 to 50 times a day. This approach allows developers to test features that users may enjoy, and weed out code that isn’t working.
“We believe that experiments lead to better decisions,” Park says. “That’s why we deploy very frequently – but in order for the code to be deployed, it has to be checked. Waiting for 15 to 20 minutes for tests and deployment to complete is unacceptable for us. With CircleCI our testing and deployments are running at about two minutes.”
In Jenkins, complex tests and deployments could take as long as two or three hours, Park adds. But with CircleCI’s scaling concurrency, those jobs take a fraction of the time.
The extra speed is essential to the Toss work model of separate teams, since fast testing and deployment helps teams move ahead rapidly with their highly defined goals for product success. CircleCI tools like orbs, customizable compute, and caching strategies also pay off for Toss in terms of time saved and improved agility.
Speed and the ability to experiment also help Toss compete in the South Korea financial services market.
“Toss deploys to production 70 times per day.” Park says. “That amounts to almost 10 deployments every hour.”
Benefits of using CircleCI:
- Parallelism helps manage large code repositories
- Scaling concurrency reduces testing time from hours to minutes
- Code is deployed more frequently
About Toss
Toss is a South Korea-based mobile financial service platform operated by fintech startup Viva Republica. Its application offers peer-to-peer money transfers, manages credit scores and bank accounts, access loan and insurance plans, split bill options, QR payment, and other similar services that enable users to manage their finances. Viva Republica was established in 2013 in Seoul, South Korea.