From zero to a million users: how to quickly grow a successful tech team
Badi is a growing startup with one clear mission: improve urban living by connecting people with shared spaces. Our company’s achievements led to $46M VC funding so far and to the WIRED nomination among the hottest startups in Europe for 2 years in a row.
As Chief Technology Officer at Badi, my main focus has been crafting the tech and the team that built it from the ground up.
In the past 2.5 years, we scaled up our tech services from 0 to 1 million users. We delivered hundreds of millions of monthly transactions with an average response time of under 100ms while maintaining a constant 99.9% service uptime.
This has been possible thanks to a data-driven tech strategy and an engineering culture based on trust and ownership, that is also reflected in our engineer-turnover rate, which has been equal to zero so far in a very competitive tech ecosystem.
As a tech leader working in a fast-paced environment, how do you successfully scale a company from the ground up to millions of users?
Here are some tips for tech leaders working in an environment where turbo growth, quality and execution speed are the main requirements.
Hire, hire, hire!
Work alone only if you are building your first MVP. After that, you’ll need to start hiring. Any other way, you might find yourself stuck in an infinite loop where you’ll never have enough time to hire because you are coding.
Your team is your best asset. Talent seeking can take up to 50% of your time (yes, you read well) in very early stages of a company.
If your initial budget doesn’t allow you to attract seasoned engineers, get junior developers. My first hires at Badi were junior developers fresh from a coding bootcamp and I couldn’t have been happier with them! Junior engineers are typically very motivated and excited about their first jobs. You wouldn’t imagine what they can achieve with just the right amount of guidance.
Trust & delegate
Thou shall not micromanage. This is my motto. Oversee, but don’t try to control everything. It’s counterproductive and you don’t have time for that.
Do not hesitate to give ownership and responsibilities to your team. If they fail, they’ll learn from their errors.
Most engineers are naturally inclined to take up new challenges and solve complex problems. You will be surprised at what they can achieve when you give them your full trust. On top of that, by doing so you will also foster your team’s professional growth, which is one of your main goals as a tech leader. Your team will soon realize that and they’ll be thankful to you.
Working in tech requires constant training. Your team needs access to learning resources, as well as your support and encouragement towards the attendance of relevant events.
This is not optional. Make sure you allocate time and budget for technical training. When the company grows, set a budget for each one of your engineers for training and business traveling.
Tech events are also perfect venues to network and scout new talent!
Tech Stack and Infrastructure
A tech leader fully understands the business strategy and converts it into high-level tech specifications and requirements that can be executed by the team. This ability requires upfront thinking where scalability is the key.
During the first years of a company, it is completely normal to change roadmap a few times per year and tweak objectives. Your team might not like it, but you have to be ready for that.
One approach to tackle this challenge is investing time since day one in the creation of a solid tech infrastructure that can support business growth. This can be achieved today by focusing efforts on building a modular cloud-based architecture using providers such as AWS and GCP. By doing so from the beginning you will:
- develop your services according to a distributed systems paradigm, as opposed to mono-instance software monoliths. This will make it easier to identify bottlenecks and implement solutions when scaling up;
- be able to temporarily throw hardware at the problem. A couple of years ago, at Badi, we had our first multi-million dollars TV ads campaign. By increasing the number of instances running our core API and our DB flavor, we made sure we could successfully deal with high-user peaks. This was far from being an ideal situation from a purely engineering perspective, yet it was perfectly fine in terms of business strategy.
Design your systems with scalability in mind.
Monitor your Services
There is a difference between chance and luck. You cannot control chance (so don’t worry about it), but you can shape your luck.
For the past 2.5 years at Badi, we had a constant average 99.9% uptime. Not bad for a startup! The reason for this achievement was the data-driven strategy we promoted, which consists of advanced monitoring of all services and continuous analysis of their behavior over time.
By using products such as NewRelic, Dynatrace or Datadog, you can gather quantitative data about the performance of your systems. You can then optimize your services and predict potential bottlenecks. By using NewRelic, for instance, we were able to identify an important memory leak that affected our API and solve it before it became a real issue.
Monitoring your services and infrastructure can be expensive, however, it’s an investment with a high return that should be part of your tech strategy. After all, our job is solving problems before they actually occur.
The simpler, the better
How many times have we been tempted to try out the latest programming language, framework or database engine to ship our new product? Prior to doing so, as a tech leader, it is your duty to take a step back and separate your natural excitement from the actual business requirements.
Do not try to build a spaceship if what you really need is a bike!
While upfront thinking is a required skill for any tech lead, so is avoiding over-architecting.
My favorite choice? Shipping the simplest solution possible, and later build on top of it.
A colleague once asked me why I chose a MySQL database for the core services at Badi instead of a “more modern” non-relational counterpart. I simply went for the most optimal solution, here’s why:
- our main business logic included users, rooms and pictures. A user can have N rooms and a room N pictures… There is nothing more relational than that;
- MySQL has been around for over 20 years, it’s a solid choice and it has a great performance with little optimization required up to hundreds of millions of records;
- as a plus, most analytics and data visualization tools require SQL-based queries. A relational DB makes life easier for data scientists and BI units in early stages of a company (eventually you will build them a data warehouse).
While we should always try out the latest technologies, let’s not adopt them on a production level just because they are fancy. Make sure that you have a real-world business case that can actually benefit from them.
The first rule of technical debt is… you talk about technical debt.
Building solid technology in a company requires the right balance between quality and delivery speed. This often implies a trade-off, and there’s no shame in that.
It’s OK to accumulate technical debt up to a certain degree as long as you and your team are fully aware of it and have a concrete plan for improvement in the short- and mid-term.
In some cases, consciously accumulating some tech debt can even be a part of your business strategy.
One of the early tech challenges at Badi, for instance, was the creation of an in-house chat system to allow users to communicate in real time. This was one of the core features of our product, which was directly connected to the most important KPIs of the company. We had limited time (less than 1 month!) and resources (2 backend developers). After some initial thoughts, we decided to use Actioncable, the websocket integration that comes out of the box with the framework powering our API (RoR).
This approach would present some future limitations in terms of concurrency and latency. We were all aware of them, and that’s precisely why we already had a plan to eventually build a state-of-the-art microservice for our chat, possibly using Node.js or Go.
By choosing Actioncable, we were able to ship our first websocket-powered chat system in only two weeks. It was not the best chat implementation we could have built; however, it was fast and reasonably good for the time being and it directly contributed to close a $10M Series A funding round. Not bad!
A tech leader must be able to always find the right balance between scalability of the solutions and business strategy.
Ask for more $$$
No matter how hard you work with your finance department to plan a budget, in early-stage companies (especially during the first year) you might realize halfway through the quarter that your budget is tight.
If you know precisely what you need to grow faster (e.g. a new service, extra talent, etc.) and your only obstacle is the lack of budget, don’t think twice and simply ask for more money.
You won’t be always granted the extra expenses, yet you will at least create a future need.
At Badi, I soon realized that we needed an external QA service to crowdsource beta testing for our mobile apps. Our team used to sit together and test our product every Friday for a couple of hours. This was not efficient mainly due to the limited time we had and to the small number of devices we owned.
Switching to an external QA service was the right thing to do to boost the team’s productivity and to improve the overall product quality. Tens of real users would test our apps during weekends using a heterogeneous pool of devices and they would systematically report bugs via our issue tracking software.
For a company which had $1M total funding at the time, this QA service was pretty expensive. You can probably imagine the expression of our CFO 😱 when I unexpectedly asked for an extra 50 to 100k for it. I didn’t get the money at first; however, we were able to secure them a couple of months later.
The results of this new investment became soon evident and, since then, expenses for testing and QA were simply taken for granted by everyone, no questions asked.
Your non-tech peers won’t read your mind. When you need something, ask for it.
Ask for discounts
Some third-party services and SaaS offer startup pricing plans, while others don’t. In any case, always reach out to sales executives and ask for discounts.
Whenever I believe that the pricing of a new service I want to adopt is too high, I request a quick call where I introduce myself and my company. I then explain how much I would love to use their product and why. Then I explicitly ask for possible discounts.
You would be surprised at how many providers are willing to offer a discount, free credits or non-standard/hidden pricing plans, at least for some time. In my experience, 8 out of 10 vendors were more than willing to lower their price when asked. In some cases we saved up to 75% from the original cost during the first year.
After all, it’s a win-win situation for both parties: if your company grows so will the services you use.
There is no shame in asking for discounts or free credits. This will also prove to your finance department that you actually want to save the company’s money, thus reinforcing further your credibility when requesting a higher budget in the future.
Empathy and emotional intelligence are the most important skills every leader should possess.
Be empathetic with your team and with your colleagues. This is the best way to foster clarity in communication at any level, as well as to persuade others to follow your guidance and recommendations.
Empathy might not be natural for some people at first. It’s just a matter of putting yourself in someone else’ shoes and try to understand what the other person is feeling and why.
Master the art of empathy and you will have a great career as a leader.
Be a part of the local tech community
Be active in the local tech community by regularly taking part in events and meetups.
Every major city hosts daily a wide range of tech-related events which are often followed by networking sessions. You meet new people, share ideas and catch up with new and old colleagues. During such events, you might also discover new talent to hire.
In our city, we organize a meetup called “CTOs &co”. Our community counts more than 1 thousands members and brings together professionals in the local tech ecosystem that help each other by exchanging ideas and tips. There I shared for the first time our experience in building a successful tech team from the ground up.
Work is about having fun doing the things you enjoy the most. Successful achievements inspire people and create bonds. No matter how hectic your days are, always take some time to celebrate important milestones with your team.