Scaling Fast – Engineering Lessons From ~15 Years of Tech Startups

Rate this content
Bookmark

Building a business is a slugfest to see who gets more customers first. You have to adopt that mindset when writing code. As an old boss told me once: Clean code won't matter if we're dead. You have to shift your mindset from best practices to getting shit done. But you can't go too wild or the tech debt will kill ya. 

This talk has been presented at React Advanced 2024, check out the latest edition of this React Conference.

FAQ

When scaling a startup, focus on scaling the business, the team, and the technology.

Vertical teams allow for faster development as they can control and ship features from start to finish without being blocked by other teams.

Teams should be structured based on their goals or purpose, such as an admin team for admin tasks or a growth team for product growth, rather than based on technology.

You can scale a business by making more sales or making bigger sales, often through subscriptions or targeting enterprise clients.

Innovation should be reserved for core product features because applying known solutions to common problems saves time and resources, allowing focus on areas that truly differentiate the product.

Engineers can reduce architectural complexity by using vertical modules, focusing on data structures, and avoiding unnecessary code deduplication that adds complexity.

Discussing code approaches before implementation ensures clarity, reduces lengthy PR discussions, and speeds up the development process.

Feedback helps in iterating and improving solutions quickly, leading to faster development cycles and better alignment with user needs.

A common mistake is implementing microservices too early, when the team is small, which adds unnecessary complexity. It is better suited for larger teams.

Engineering is crucial because it builds the right solutions at the right time, ensuring it is not a bottleneck for the business. However, without a solid business foundation, better technology cannot save a failing business.

Swizec Teller
Swizec Teller
27 min
28 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hey, we'll discuss scaling fast and engineering lessons learned in the last 15 years of tech startups. Scaling involves three things: business, team, and tech. Business scalability relies on sales and customer acquisition costs. Engineering is a tool the business uses. Scaling the team is vital as tech problems are often people problems. Team structure affects architecture and product development process. Organize teams based on purpose, not technology. Spend less time being blocked by other teams. Ship features without getting blocked. Own your own mess. Focus on product engineering partnership. Build faster using feedback cycles. Build appropriate solutions for your use case. Let go of ego and experiment with different approaches. Engineers own their own mess. Avoid work in progress. Finish the work and focus on fixing it later. Have a conversation before writing code. Scaling the tech is easier than you think. Pick an off the shelf design. Save innovation for core parts. Pick existing solutions. Focus on solving the problem. Don't waste time trying to predict future scale. Scale will surprise you. Do what works for your business. Push back on unnecessary complexity. Understand the cost of ideas. Modify the situation to fit existing design. Architecture is like a dependency graph on your code. Reduce architectural complexity by organizing code based on what it does. Use vertical models and avoid creating excessive dependencies. On the client, use vertical modules. On the back end, consider a service-oriented architecture. Start with a monolith and transition to microservices if necessary. Use folders instead of microservices when you have a small team. Use vertical models and contract or type-driven development to define clear APIs and interfaces. Avoid highly interconnected code and duplication. Focus on data structures to avoid complexity and the need for translation layers. Building translation layers can lead to slow user experience. Vertical teams aligned with vertical code allow for fast problem-solving, full control of features, and efficient data handling. Understanding the entire domain enables faster development with fewer bugs.

1. Scaling Fast and Engineering Lessons

Short description:

Hey, we'll discuss scaling fast and engineering lessons learned in the last 15 years of tech startups. Scaling involves three things: business, team, and tech. Business scalability relies on sales and customer acquisition costs. Engineering is a tool the business uses. Scaling the team is vital as tech problems are often people problems. Team structure affects architecture and product development process.

Hey, I'm Swiss, and we're going to talk about scaling fast and some of the engineering lessons I learned in the last 15 years of doing tech startups.

You've built something that people want, and it's growing super fast. Now what are you going to do? There's three things you're going to need to scale. You're going to have to scale the business, the team, and the tech.

Scaling the business is pretty simple, but it's still hard work. There's really only two ways that you can scale. You can make more sales or you can make bigger sales. And that's why everything is either a subscription or going after enterprise these days. The reason you care about this as an engineer is because without the business, there is no engineering. Engineering is all about building the right thing at the right time for the right situation. And no matter what you try, you can't save a bad business with better technology. And it's also the business is the fuel for everything you do. The numbers you want to know are cost of acquiring customer and their lifetime value. And your goal is to build tech that fits these numbers. But honestly, that's mostly what the business folk are going to be doing. What you're really doing is this. You're building the tracks before the train stops. And you're trying to go, you're basically trying to go as fast as possible to make sure that engineering is never the bottleneck that stops the business. And no matter what you hear on Twitter or the internet, engineering is just a tool that the business uses to achieve its goals. It's not the main thing that for the most part, it's not the main thing that the business is doing. What you're trying to do is you're building that flower. But what you're selling to the users are new users who can do awesome stuff. I know I love my technology, but users don't give a shit about what you're doing. They just want to use your thing and move on with your life. So that's about scaling the business.

Scaling the team is also kind of important, even though we don't get to talk about it that much as technologists, because a lot of tech problems are secretly people problems. Your architecture and the process that you use to build products is going to reflect your team structure. So for example, if you put QA in a separate team, you're going to be spending a lot of time waiting for QA to give you your feedback. And you're going to have engineers that are throwing things over the wall instead of making sure their code works. And then you get a lot of back and forth at the end after the code is written, which slows you down and is really annoying for everyone, for everyone involved.

2. Vertical Teams and Engineering Ownership

Short description:

Organize teams based on purpose, not technology. Spend less time being blocked by other teams. Ship features without getting blocked. Own your own mess. Focus on product engineering partnership. Build faster using feedback cycles. Build appropriate solutions for your use case. Let go of ego and experiment with different approaches. Engineers own their own mess.

And the worst thing I've seen startups do is that they organize teams based on the technology instead of based on the goal or the purpose of what you're building. So if you organize your teams like that, you're going to end up spending a lot of time being blocked. You're mostly going to be waiting. You build the thing, you build your part of the thing, and then it goes to another team and then another team and you end up with a very linear, slow process.

Whereas if you can orient your teams based on their purpose, based on their goal, so like an admin team that owns admin users, a buyer team that owns buyers, a growth team that focuses on growing the product, you're going to spend a lot less time being blocked by other teams and being able to build projects or new features, start to finish as part of a single group. The goal of doing that is that you want to deliver value without being blocked. And there's many different names for this sort of team structure. Some people call them empowered teams, extreme aligned teams, business capability-centric teams. It's all consultant capability book, and it just depends on whose book you read.

The main goal, the main point everyone is trying to convey when they talk about this is you want a team that can ship features from start to finish without getting blocked. And part of that, my favorite part of that is that you get to own your own mess. So I used QA as an example. Um, if you have engineers that get that on their own mess and that they're, that are accountable for the things they ship, you're going to have a lot fewer bugs. It feels slower, but you're actually going to have a lot fewer, a lot fewer issues. So for example, a couple of days ago, I got paged at like 3am, kicked out of bed, went to look at the alerts, and it was something incredibly stupid and dumb. Now guess what I've made really sure was fixed the very next day. Um, you know, I got paged, I fixed the bug in one day and the bug, and that's not going to happen anymore, which is a lot faster than how a lot of, a lot of teams get to do it. Also a bit more stressful. Uh, the other part of having vertical teams that can own their domain is that you can focus on a better product engineering partnership where engineers work on getting us across the water, not just building the bridge.

So you end up with this circular feedback cycle instead of a linear process where you get to work together with product to build the, to build those flowers that, um, that customers want to move faster. It lets you, it lets you build faster, um, uh, using feedback cycles, and you can iterate on solutions. I, I personally find it very rewarding as an engineer where, when I can talk to the customers, understand their needs, design, uh, design my code and my products as a way to solve those user needs and then, um, give it back to them and iterate on those solutions. The idea is that you can build stuff that you can build the appropriate solution for your use case, not just something you heard about in the talk. And that's what engineering is really about. What that means is that yes, sometimes you're going to have to merge really bad code that sucks, uh, because at the end of the day, your code doesn't need to be perfect. It just needs to work. So you're going to have to let go of your ego and let other people experiment with different approaches. It's okay if somebody writes code in a way that, uh, in a different way than you would write it because it's fine, as long as it works. And as long as those engineers own their own mess, uh, if it breaks, they're going to fix it. If it works, it's great.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Next Generation Code Architecture for Building Maintainable Node Applications
Node Congress 2023Node Congress 2023
30 min
Next Generation Code Architecture for Building Maintainable Node Applications
Today's Talk focused on code architecture, modularization, and scaling in software development. The speaker discussed the benefits of separating code by domain and using tools like NX to improve productivity and enforce modular architecture. They also highlighted the importance of automating library creation and configuration. Additionally, the Talk covered code scaling and deployment strategies, including caching and automated code migrations. The speaker emphasized the flexibility and scalability of Fastify and the advantages of using a monorepo for front-end and back-end development.
How I Automated Code Changes for 100 Repositories: Getting Started With Codemods
React Day Berlin 2022React Day Berlin 2022
28 min
How I Automated Code Changes for 100 Repositories: Getting Started With Codemods
This Talk discusses automating code changes for Android repositories, utilizing tools like JSCodeShift and Abstract Syntax Tree. The speaker shares a real use case example of maintaining a design system library and making changes to a component. The talk emphasizes the importance of automating repetitive tasks and using the power of abstract syntax tree for code changes. The Q&A session covers topics like source code formatting, TypeScript support, and cultural embedding of code mods. The talk concludes with insights on when automation is worth it and the limitations of code mods for monorepo changes.
The Future Stack of Code Review
JSNation 2023JSNation 2023
22 min
The Future Stack of Code Review
The Talk discusses the challenges of code reviews and the need to redefine the code review process in light of changes in software development. It emphasizes the importance of collaboration, security, performance, and clean code in the new stack of code review. The Talk also highlights the benefits of automating code review comments and optimizing the code review process. Overall, the Talk aims to build a better code review process that promotes collaboration and improves the quality of software development.
Accelerating Code Quality with DORA Metrics
JSNation Live 2021JSNation Live 2021
27 min
Accelerating Code Quality with DORA Metrics
This Talk discusses the Dora Metrics and their relation to continuous code improvement. High and elite performers deploy more frequently and have a lower change failure rate. Continuous code improvement involves identifying and fixing bugs in real time. Rollbar is a continuous code improvement platform that provides visibility into actionable errors. It helps organizations reduce the risk of losing customers and optimize developer productivity. Rollbar's unique error fingerprints and advanced features enable a deeper understanding of issues and faster resolution.
Road to Zero Lint Failures: Tackling Code Quality Challenges at Scale
React Summit US 2023React Summit US 2023
11 min
Road to Zero Lint Failures: Tackling Code Quality Challenges at Scale
Watch video: Road to Zero Lint Failures: Tackling Code Quality Challenges at Scale
This Talk discusses the journey from thousands of Lint failures to zero in a codebase at Linton that is over 80 years old. The approach involved implementing rules, incentives, and tooling to address the issue. The tool called Checkup was used to visualize ESLint failures by team and lint rule, providing accountability and responsibility. The efforts resulted in cleaning up over 6,000 lint failures, with 55 contributors, and a 30% increase in perceived code quality.
What I Learned About Software Quality From The 10 Most Popular Javascript Projects On Github
TestJS Summit 2023TestJS Summit 2023
27 min
What I Learned About Software Quality From The 10 Most Popular Javascript Projects On Github
The Talk discusses the code review process and the importance of software quality. It emphasizes the need for maintainability in code and the use of guidelines tailored to the team. The Talk also highlights the significance of functional suitability and the challenges of code review. Automation and documentation are recommended to improve code reviews and ensure software quality.

Workshops on related topic

Bring Code Quality and Security to your CI/CD pipeline
DevOps.js Conf 2022DevOps.js Conf 2022
76 min
Bring Code Quality and Security to your CI/CD pipeline
WorkshopFree
Elena Vilchik
Elena Vilchik
In this workshop we will go through all the aspects and stages when integrating your project into Code Quality and Security Ecosystem. We will take a simple web-application as a starting point and create a CI pipeline triggering code quality monitoring for it. We will do a full development cycle starting from coding in the IDE and opening a Pull Request and I will show you how you can control the quality at those stages. At the end of the workshop you will be ready to enable such integration for your own projects.