Scaling engineering teams can happen in a lot of different ways.
Let’s take a look at a real-life example, how Fleetio scaled their product and team over the years.
Their Principal Software Engineer, Richard Young shares what challenges they faced, the strategies they implemented and gives valuable tips to those who consider joining or scaling a startup.
This blog post summarizes the main points of episode 93 of the Level-up Engineering podcast hosted by Karolina Toth. Make sure to check out the full interview through your favorite podcast platform or Youtube.
This post covers:
Initially, we didn't really face scaling challenges, particularly in team expansion. Fortunately, our efficiency allowed us to delay hiring more engineers for a while. This gave us enough time to grow and learn from the inevitable missteps of being a small team. Consequently, we could focus on scaling other aspects of the company like marketing, design, and sales.
However, as time passed and our customer base expanded, we encountered performance issues related to scaling. Our infrastructure wasn't fully equipped to handle the growing volume of data we were processing and presenting to users. We had to get creative to address these challenges, often resorting to unconventional solutions like server restarts to keep things running smoothly.
In terms of team growth, we took a deliberate approach, delaying the hiring of our third engineer for several years. During this time, we prioritized scaling our code base and conducting extensive refactoring. One of my earliest initiatives was establishing a robust test suite. While some startups prioritize speed over testing, I firmly believed that a comprehensive test suite was foundational to Fleetio's success and scalability.
Maintaining a solid test suite facilitated the onboarding of new engineers, as they could confidently write code without fear of breaking existing functionalities. We also evolved our deployment practices over time. Initially, we directly pushed code to production—a practice that became untenable as our team grew. We used Heroku as a platform-as-a-service solution from the beginning to streamline deployments and to autoscale based on traffic. Leveraging Heroku pipelines, each code push triggered builds in a staging environment for testing before deploying to production.
Additionally, we embraced the concept of review apps to streamline testing in development environments. Review apps, provided by Heroku, allowed engineers to test their code changes in environments mirroring production with real data. This expedited testing, enhanced product management, and simplified quality assurance processes, facilitating the efficient delivery of features to our customers.
Over the years, we integrated extensive linting into our codebase to standardize coding practices and streamline code review processes. Automating linting through GitHub actions eliminated the need for manual nitpicking of coding style and syntax, ensuring consistency and efficiency in our development workflows.
Fleetio has consistently sought senior-level engineers with a strong focus on product development and customer satisfaction. Every engineer, myself included, gets a homework assignment as part of the recruitment process. This assignment serves to assess their skills and provides insight into their coding approach, aligning closely with the qualities we value at Fleetio.
When hiring, we always look for team-oriented individuals. We prioritize candidates who demonstrate a willingness to collaborate, contribute, and work towards the common goal of delivering exceptional products to our customers.
While some startups opt for hiring junior engineers for cost-effectiveness and potential growth, we prioritize the recruitment of seasoned professionals capable of making autonomous decisions and requiring minimal supervision. These senior engineers possess a deep understanding of both our customers and our product, a quality that has been instrumental in shaping Fleetio's culture and product evolution from the outset.
At Fleetio, we don't have a structured mentorship program in place. Informal mentorship naturally occurs, with senior engineers engaging in weekly one-on-one sessions with junior team members to tackle challenges, brainstorm solutions, and navigate project features.
In the early days, we relied heavily on each other for learning and development. As senior engineers, we recognized our individual strengths and weaknesses. For instance, while I struggled with SQL initially, the first engineer hired at Fleetio excelled in this area and other backend technologies. Through collaboration and mutual support, we honed our skills and refined our codebase, continuously striving for improvement.
Our sole formal training session at Fleetio occurred during the transition from AngularJS to React for our frontend codebase. This React training initiative ensured our engineers were equipped with the necessary skills to navigate the transition effectively. Overall, our engineering team demonstrates remarkable self-sufficiency. With access to resources like Slack for seamless communication and support, our engineers adeptly navigate challenges and find solutions autonomously.
Unlike many startups driven by external investor pressure to rapidly expand, Fleetio charted its own course, prioritizing autonomy and organic growth. This autonomy allowed us to make decisions aligned with our vision and pace of development, a significant draw for me when I joined the company.
Navigating the demands of a small engineering team posed its own set of challenges. With just a handful of us, balancing the delivery of customer features with support across various departments like sales, marketing, and product marketing became crucial. Our engineering efforts weren't limited to coding; we had to be nimble in assisting other teams to ensure customer satisfaction and sustained growth.
Performance scalability emerged as another hurdle as our customer base expanded and data volumes surged. This growth often led to database strain and occasional timeouts, necessitating swift optimization and downtime management. Despite the challenges, we persevered, implementing strategies to enhance performance and minimize disruptions.
Moreover, managing technical debt, a common pitfall for startups, took on a different dynamic at Fleetio. Rather than accumulating significant technical debt over time, we prioritized ongoing refactoring and maintenance, ensuring a clean and efficient codebase. This proactive approach enabled us to keep technical debt at bay, facilitating smoother integration of new engineers without burdening them with legacy issues.
At Fleetio, product marketing is very important. Our marketers need to understand our users and how to group them into categories. Sometimes, they need our engineering team's help to send user details to another tool we use. Whenever they ask for assistance, we prioritize their requests.
For example, when I introduced a new webhook feature, our customer success team wanted to promote it. So, I hosted a webinar explaining how to use webhooks, aiming to attract customers to our advanced plans. It was a great experience, and I believe more engineers should consider engaging in such marketing efforts.
In addition, every early hire would be part of a rotating schedule to work one day supporting our customers. We called it the “Support Chief” role, and it allowed everybody to better understand the product and our customers. If customers called in and reported a bug or had a small feedback item, our engineering team was able to help them immediately and deploy the change into production in a few minutes. We would call these “quick wins” and these sorts of things really delighted our early customers.
Take the time to find the right fit when hiring. Make sure you have engineers on your team who prioritize the product and the customers. Give them enough autonomy in their day-to-day work, and if anything goes wrong, follow a blameless post-mortem approach. Establish a culture of open communication rather than just pointing fingers.
Have a chat with the CEO or founders to grasp their vision and the real-world problems they're solving. Look for startups tackling practical issues rather than aiming to be the next big thing like Facebook or Google.
Beware of startups that expect excessive hours. In my experience at Fleetio, not all startups demand long hours and sacrifice work-life balance. We value flexibility and don't pressure employees to overwork.
Richard Young joined Fleetio as their 2nd engineering hire over 9 years ago. He has played a major role in helping Fleetio grow from a small company to the most well-known product in the fleet maintenance space. In his current role, he writes code and delivers solutions to Fleetio’s customers and partners, assists teams and mentors other engineers, and provides support to non-engineering teams.
In his free time, Richard enjoys traveling, reading and playing video games.
You can follow Richard’s work by visiting Fleetio’s website.
At Apex Lab, we're experts in end-to-end digital product development. Our remote-first company operates with a flexible schedule, allowing us to help clients tackle difficult challenges worldwide.
Want us to build your next idea or upgrade your existing product? Our experts cannot wait to work with you. Get in touch with us and let's make this happen. 💡🚀