Introduction
There are a lot of articles about the role of the CTO over time as the company goes from a Startup to a Big Tech. You can read some of them here awesome-cto.
This article will focus on my experience in being a CTO in an early-stage fast-growing Startup.
Every problem that happens is your problem. This is the extreme ownership principle.
If the MVP is not working it is your problem. If you have a bug in production it is your problem. If you have some scaling issues, it is your problem. If you have a regression in production it is your problem. If your product is hard to use, it is your problem. If your onboarding is complicated, it is your problem. If your team is not writing quality code it is your problem. If you need to hire or fire, it is your problem.
If your API provider is not reliable, this reliability problem is your problem.
Building the MVP
A CTO in an early stage Startup needs to wear many hats to make their product succeed.
After you decide the market, the problem, and what product you want to build. The first task of the CTO is to be able to ship a product MVP (Minimum Viable Product) to validate all these assumptions.
I recommend only hiring developers after you ship your first MVP and validate a bit your market, product, and problem space. This will ensure you won't increase your cash burn until you see a bit of traction.
The landing page and onboarding can also be included in the MVP.
Hiring the Team
The first hires are critical to shaping the culture of your Startup. Prefer to hire A players that you don't need to give every single detail of how to build. Only bring them problems and let them propose solutions to them.
You are responsible for the hiring interviews and for deciding who to hire or not.
You are also responsible for the training of your hires and onboarding of them.
Likewise, you need to make them productive as fast as possible.
Software Architecture and Scaling
You are responsible for creating the foundations that you let your product scale as needed. You don't want to overengineering, but you want to make sure that scaling will going to be easy.
You need to invest time in everything that will reduce the cost of software development and the product over time.
Here are a few things that reduced the cost of building software:
Monorepo
A monorepo lets us organize code in domains, creating explicit boundaries from one context to another. This will simplify how each domain interacts with each other. And it will also reduce the cognitive load for developers. It will also be helpful when you are scaling your team to use squad formation.
Automated Testing
Everybody says to move fast and break things. However, nobody says that adding automated testing enables you to move fast, and also reduces the chances of breaking things.
Automated testing also lets your code converge to the right solution faster.
They are also necessary to catch second-order effects when refactoring or adding new features. They will make sure you won't break what is already working.
Incidents and bugs in production are bad for your company and product reputation, your churn will increase and the morale of the team will go down. It is also very unproductive and stressful. You can lose days of development if you need to keep solving bugs in production as they show up. It is like coding twice.
Design System
A design system adds constraints to what UI components we have available to build our product. This makes us build our product faster just by combining existing components. Another benefit is that we have a more consistent product that it is easier to use and a simpler codebase.
Written First and Documentation
We moved most of the communication and discussion to the written first approach.
Every single piece of knowledge is written down in our documentation.
We use issues to discuss bugs, improvements, and feature requests.
We use RFC (Request for Comments) for changes in the software architecture.
We write written updates for each meeting we have, and our daily and weekly progress.
Documentation lets us scale our knowledge sharing without needing to make a lot of sync calls.
Automation and DX
We focus a lot on Automation and DX.
We release automatically to staging and production using our CI/CD.
We automated most of our common tasks, so we could focus on our product.
Observability
As your system grows, it will become harder and harder to understand how they work in production.
Each feature that you add can bring unexpected side effects to the use of the system.
Adding a very complete observability with tracing capability and error monitoring will let you sleep well at night.
Error monitoring lets you know all the bugs your users are having, and you can proactively fix them.
Observability lets you understand how your system works in production, it can catch performance regressions and weird behavior. It is also a powerful tool to solve faster harder and complex bugs.
Resource Optimization
As your startup grows your costs can skyrocket. You need to be frugal. Every decision needs to be cost-aware. You should always revisit every single cost to improve your unit economics, and more profitable.
Your cloud costs can increase a lot, do a drill down to understand what costs you can cut. Move off the cloud to your development or staging environment as you don't need high availability in this environment. Move some SaaS or services to open-source self-hosted solutions.
Your third-party services costs can increase, design software to make it easy to switch from a provider that it is costing too much. Rebuild some of these services in-house if needed.
Optimize your code, reduce database queries, and use a materialized view for analytics queries.
Leadership and Vision
You are responsible for the execution, and the operation work of the day-to-day. However, you are also responsible for the strategy vision of your company.
You need to make clear the vision of your Startup to your team, and where you want to get. You lay a plan of how to get there.
You need to coordinate the technology plan with the other areas of the company: sales, marketing, product, and customer success. The CTO needs to support all the other areas of the companies based on their needs.
You need to talk to customers daily to understand if your product is going in the right direction, and your vision is correct. Pivot and adjust your plan as you go.
This is the real agile methodology, rethink your decisions and priorities on a daily basis. New information can change your prior probabilities.
Overall
Being a CTO in a Startup can be very challenging as you are going to have a lot of responsibilities in a lot of different areas. You won't be able to excel in all of them, but in the beginning, being good enough is enough. You can hire more people over time to help you deal with all these responsibilities.
I do believe many more responsibilities are not listed in this article, but it can give you a start of what they are expecting from you if you take a CTO role at a Startup.
About my Startup Woovi. We are innovating in the instant payment sector providing payment solutions for merchants.
If you want to chat, ping me on Twitter @sseraphini
This article came in the right moment for me! Great article!