11 Oct 2021
7 min read
Go is fast… Really fast, developer-friendly, and built-in concurrency and parallelism. Τhe growth in the maturity of Go, the strong user base, and the fact that more and more companies have decided to move to Go after successful benchmarking has been increasing more and more. At Beat, we write world-class APIs and microservices using Golang. My professional experience with the Go programming language started with Beat and in this post, I want to share my journey so far.
A quick recap:
I joined Beat almost two years ago. Before that, Python was my go-to language for the past 5–6 years. Prior to that for more than 5 years I have been developing with C# and the .NET Framework. Do you see a pattern there? Most probably because it is part of my DNA to continuously learn something new. Fortunately, we share the same DNA as Beat.
So, I started reading more about Go. Actually, my interest in Go flourished when we started utilizing cloud-native technologies like Kubernetes and Rancher in my previous job. I took a look at the source code of Kubernetes, and that was it. I knew that I wanted to learn Go and use it as my primary programming language. I was determined to learn Go and on the lookout for my next opportunity. At that time, Beat had just opened their Amsterdam Hub and had an opportunity for a Go developer. I couldn’t pass on this opportunity.
I applied to Beat driven by my desire to learn and work with Go and I decided to join based on the excellent experience I encountered during the four stages interview process, from the screening call to the take-home test and review call to the System Design.. But my decision to join was ultimately driven by my experience in the interview process.
There were a total of 4 tech interviews + 1 behavioral.
THA and System Design calls were closely related to the tech challenges Beat was missioned to solve as a company, which provides great insights into the challenges you can potentially be part of solving. From the very first screening call, I enjoyed the discussion with the recruiter testing my knowledge with exciting and relevant questions (no brain teasers here!), but at the same time, she was able to talk about the complex problems Beat faces and the engineering culture, and I loved it. The next step was the Take Home Assignment (THA). I was asked to write a simple Go application, and before that, I only had a few months of experience with Go.
Over the next few days, it took me a few hours a day to work on the THA. First, I started learning more about Go-specific concepts like concurrency principles and end-to-end testing with Go. Then, I started working on the final application, where I also added some other things like Docker for black-box testing. Luckily, my THA was accepted, leading to a very productive code review-style discussion. One of the feedback I received was that it works very fast, which earned me some additional points.
Once I passed the first two stages, I was ready to fight the final boss 😎 — the system design interview. Initially, it was planned for ~1 hour, but we overran due to the conversation flowing and the interesting design problem; it didn’t feel like an interview but more like a meeting with colleagues. Having completed my final interview, I got a great sense of the strong engineering culture at Beat, was excited about the focus on learning (especially to pick up Go), and the software problems they were committed to solving. When I received the offer, it was a no-brainer that I want to be part of the Beat Engineering team, since we were sharing the same culture and core values, constant learning being a rather important one.
I joined the Pricing team at Beat, building our next-gen backend services (more on this later). Early days at any organization have their challenges. Familiarize yourself with new processes, company culture and team structure. Moreover, the Amsterdam Hub was a new office with many recent joiners like myself, which had its unique challenges.
Luckily, I had lots of talented new colleagues to help me during my onboarding. However, what made the process easier was the fact that we had exciting challenges to tackle. Precisely, we needed to:
When it came to improving my Go-lang knowledge, we also had complex and exciting problems to solve, especially for an engineer just starting with the language:
One of the biggest reasons I like being part of the Beat Engineering team is our internal culture which promotes giving back to the software engineering community.
You might already know that we contribute to open-source, host meet-ups, and more — some of our colleagues have even written books. Talking about inner motivation, this was it! About 50% of the developers we hire come from a ‘non-Go’ background like me, however, we also hire super experienced gophers who bring even more expertise to the team. Their strong Go knowledge and production experience are beneficial for everyone in their team (namely, I learned a lot from my team members like Stanislav and Rashad) and they’re also really engaged in the Go community.
In my first months, we hosted our first Amsterdam Hackathon. Together with my colleague Serdar, we came up with an idea like “PIP for Go”. It was a fun and exciting project to work on together, which led to us open-sourcing it and then presenting it in one of our meetups… kudos to the time when we could gather together and have nerdy conversations in person!
Inspired by my colleagues and my day-to-day work, I also recently published the DBUI open-source project, which was well perceived by the community.
Since joining Beat, my skill set has elevated. Not only my problem solving and technical skills but also people skills by building an engineering culture, working with highly experienced engineers, and leading and managing large-scale projects impacting our millions of users. Personally, these opportunities alone are a good enough reason to join a company!
In my current role as an engineering manager, I am very proud of my team’s achievements. We have a mix of engineers with prior Go and some like me who joined with no-Go experience. Despite these different backgrounds, they’re all adding value to our projects and the wider business. I believe this also says a lot about our onboarding process and our internal culture to support each other. Here are some of the projects we worked on last year:
Our internal A/B Testing Platform
Pricing Surcharge Fee component. Before joining Beat, the price in ride-hailing applications was a single-scalar value. But when you look in detail, the final price consists of multiple parts like base fare (see below), surge (depending on the area, supply & demand), and others. And Surcharge Fee is one of these components formed based on the pick-up and drop-off locations of the ride. This component required us to build a separate service deeply integrated with our internal geospatial and rule engine sub-systems to deliver an accurate final price.
Pricing Base Fare component. Base Fare is the core part of the final fare (aka final price). And, it is part of our monolith (everyone has one 🙂). So, our goal with a new component was to extract this logic from the monolith and improve the operation of the base fare component (like configuring base fare for each city). It is in final tests now but soon to be released full-scale in all of our markets.
Internal dashboard for setting base fare configuration in different markets.
Ride order screen with the final fare price (we operate in LatAm hence the language 🙂).
Our newest joiners like Deepika and Túlio have already gotten hands-on experience with our internal systems and delivered high-quality results since their first days. Not to miss any of our team members 😉, we have one more rockstar — Karan. He joined our team as a Software Engineer a little more than one year ago, and he recently got promoted to Software Engineer III.
As a ride-hailing company, Beat has a lot of challenges. Competing with much larger organizations in the same field requires that we are creative, agile, and focused. That alone raises many exciting engineering problems to solve. And our team of talented engineers is the key to achieving high results. At the end of the day, it is not technologies but people who form the company and its culture. I genuinely believe that it is possible to solve any technical and business challenge with a highly motivated team. The people I mentioned above are another reason I am here, and why you should join us.
Do you think you have what it takes to help us achieve our goals? Want the opportunity to learn Go as I did? Then we have many exciting openings for you. Check them all here.
And if you have any questions, feel free to reach out to me directly on LinkedIn. I will be happy to help you.
I saved the best for last! Here are some public resources I used in my first days to learn more about Go:
Tutorials and examples:
Patterns & Idioms:
Project structure examples:
If you found this article interesting and looking for your new challenge, check out our open roles. Join us on the ride!
About the author
Kanan Rahimov is Engineering Manager at Beat for Pricing and Experimentation teams. He is also a hands-on software engineer with a genuine interest in Go, Python, Distributed Systems, and Open Source.
Tech and Product recruiter working for Beat [thebeat.co] we're the fastest growing ride hailing business in LatAm, 24M users, 700,000+ drivers, available in 6 countries, Greece, Argentina, Chile, Peru, Mexico and Colombia. Come and talk to me about engineering roles, EM roles and opportunities in product & product design.
See other articles by Daniel
Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ
108 E 16th Street, New York, NY 10003
Join over 111,000 others and get access to exclusive content, job opportunities and more!