Tech
Kyrylo Kozlov
Apr 13, 2022
Scala at Wolt: Our Scala Organization (Part I)
Behind the scenes of Wolt we have an engineering team of almost 300 people building the tech powering our products, services and platform. Scala is one the core technologies we use for backend services. Our Scala community is currently over 25 people and the plan is to grow this number further this year. In this article we’ll dive deeper into how we’re building a Scala organization at Wolt.
This blog post is a part of a short series, below is an overview for what you can find in each blog.
Part I:
Why we use Scala at Wolt
How we grow as a Scala organization
How we think about the growth and development of our engineers
How technical decisions are made
How we approach technical debt
An overview of the Scala frameworks we use
Part I — Our Scala Organization at Wolt
In the first part of our story about Scala at Wolt, we’re going to start with our core principles and beliefs on how we can build a great place to work for every Scala Engineer. If you feel a bit impatient you can jump right into the second part of the story to read more about technical details and an overview of our technical decisions.
But let’s first dive into the “why” behind our choice of Scala.
Why we use Scala at Wolt
The adoption of Scala at Wolt started in 2016. We just started developing our delivery subsystem and had decided to use an open-source toolkit for solving our routing problem. As that toolkit, JSprit, was JVM-based we wanted to select a compatible solution. Even though more people were familiar with Java then, our engineers decided to test Scala as they felt that a more modern and advanced language would lead to a faster and more fun development cycle. Since then we’ve replaced JSprit with our own solution (in C++ for those who might be interested), but Scala has earned its place as the main language for our delivery subsystem.
Today the importance of Scala is further strengthened by the JVM job market. There’s a huge number of strong engineers on the job market from the world of Java. Some still prefer Java, but many are moving into Kotlin, some choose Scala, and even Clojure. (Note: Yes, we have Kotlin, and we also use ArrowKT if someone from Kotlin’s functional world is reading this!).
Programmers that do Scala of course know the benefits of the technology, but let’s shed light on this a bit more:
It gives the freedom and power of the JVM world, tooling, and an enormous amount of Java libraries
Allows you to go pure functional if you want – the current set of existing technologies gives you this freedom
You can also go functional to the point you’re comfortable with — allows you to combine the best of two worlds
Fast evolution of Scala — Scala is one of the most dynamically evolving languages (which comes with advantages and disadvantages). Looking at Scala3, the future looks bright!
Passionate community (Sometimes maybe even too passionate if you follow Cats and ZIO communities!)
The last, but definitely not the least of the benefits is language features, which I want to open up a bit more about. First off, type safety – the error capture during the compilation time is great. The ability to design implicit things explicitly — with the power of the type system, we can design data types to describe and solve the problems precisely and concisely.
Also, the power and level of abstraction — functional programming patterns take time and effort to learn, similar to learning anything else from scratch. But when you’re there it feels natural and beautiful. You become native in expressing ideas, solutions, and expressing problems in a very secure way, where the type system covers your back.
And we also have rich and concise syntax, which helps to eliminate boilerplate code. ✨
As we’ve answered “why”, let’s jump deeper into our Scala organization at Wolt.
Our Scala organization at Wolt
Wolt is a fast-growing tech company. In just eight years we’ve grown into a company that operates in 23 countries and over 250 cities. Now we’re over 6,000 people globally and a product development organization of over 400 people, working in 35+ autonomous product teams.
As we grow, we aim to build an environment that backs the growth of our engineers, keeping them engaged and motivated by their work. It’s important for us to scale our teams along the growth to keep our environment healthy and balanced. And with the organization growing, also our level of engineering is constantly growing.
We believe in growing the level of engineering in two ways:
1) Horizontally — by hiring more engineers on different seniority levels and
2) Vertically — by creating an environment where engineers can grow and fulfill their professional and personal goals.
Let’s dive into what this means on a technical community level, such as for our Scala engineers.
How a healthy and balanced Scala environment looks at Wolt:
💙 Engineers are happy with the set of technologies used. We currently review this through feedback loops around our tech stack by doing peer-to-peer sessions between our engineers and competence leads as well as anonymous polls. We’re also looking into measuring this even better in the future.
✨ Our technology stack is up-to-date, or at least technical debt is constantly decreasing. It’s important also that we have a clear sense and vision of where we’re going, together. It’s also important that we have expertise in raising technologies.
💪 We build and strengthen our Scala community. This means that knowledge-sharing is constantly happening through things like Scala Tech Talks, our slack community, demos, workshops, and presentations. Continuous learning is important for us. And of course, it’s important for us that we ensure a healthy engineering culture to keep our current employees and attract new ones.
How we approach building this environment
Tech stack is defined by teams
At Wolt, teams can decide which frameworks and tools they want to use in their work. And with this freedom also comes accountability. It means that teams own the full software life-cycle end-to-end. We believe this motivates everyone to deliver high-quality, stable, and scalable solutions.
We encourage trying new things and sharing learnings
We keep ourselves curious. We’re constantly researching new approaches and organizing tech talks, presentations and workshops. Internally we do Scala knowledge-sharing sessions. Some recent themes we’ve had there include “Effects, functional data types, and effects composition” and workshops around the usage of Scala Steward, Cats+http4s and ZIO.
We encourage our engineers to adventure outside of their usual competence. A lot of our engineers have switched teams during their time at Wolt and you can participate in other team’s projects as long as it doesn’t hinder your own team’s goals. We also encourage and support self-development activities like conferences, courses and pet projects.
We’ve introduced competence leads for main technologies
Wolt has competence leads for our major technologies. Competence leads are essentially dedicated people who organize knowledge-sharing and have their hand on the pulse of our developers’ experience regarding the technology stack. We see competence leading as an important investment as they help us codify our best practices, provide mentoring and review work, while building tech communities within Wolt.
Mentoring and working closely together
Mentoring is one of the most effective ways to grow your skills, it also creates a strong background for the tech culture. Engineers are encouraged to ask and provide help for one another whenever needed. Being helpful and open is one of our core values inside the company and overall we have a very collaborative environment to keep the bar low for asking for help.
Day-to-day we also work very closely together. We practice pair programming, some teams doing this more, some less. It’s a great way to co-operate and learn from each other.
Hiring interns and graduates
We also have our internship and junior programs for fresh graduates and newcomers to the developers’ world. We’ve had Python and frontend interns already, and a few Scala graduates successfully kicked off their careers here.
Wolt is an exciting place to start your career. Everyone at Wolt, regardless of the level they’re at, has a lot of ownership and autonomy over their work. We have a supportive team and are solving interesting problems on a big scale, as the company is growing quickly. If you’re interested, keep your eyes on our careers site for open roles!
The flexibility of the career path as a Scala engineer
Another important mention about the experience as a developer at Wolt is the flexibility of building your career here. You can choose your path. As a Scala developer at Wolt you can:
Dive deep into the Scala tech: great if you prefer to focus more on technology, frameworks, libraries, and language features
Dive deep into infrastructure: nice if you’d like to focus more on the platform solutions
Use the SRE track to focus more on solving stability, monitoring, observability, and scalability challenges
People lead track: for you who want to gain more experience in leading a team and the people side of things
We’re flexible. You can choose one or a few tracks. There are no boundaries — pick your piece of the puzzle and go ahead with it.
Want more responsibility or impact? Sure thing! Join on-call, other teams for fixed projects, SRE activity, architecture and documentation work, people work, interviews, and so on. Opportunities are endless and you can adapt your experience to your personal and professional goals.
And if you’re not sure where to go in the future, maybe you want to try Kotlin, Rust, or another technology? Join existing projects or start a new one at Wolt with the use of technology of interest.
Is that all?
Not really. As you got here, you’ve learned how we look at our Scala organization from a high level. We’ve answered “why” and “what” we’re building for the Scala community here. In the next article, you can learn “how” we reach our goals from a bit more technical perspective: Part II – Technical Decisions.