Scaling Fast – Engineering Lessons From ~15 Years of Tech Startups – Swizec Teller, TechLeadConf

JavaScript Conferences by GitNation
29 Jun 202419:25

Summary

TLDRСкрипт видео предоставляет уроки масштабирования технологических стартапов, основанные на 15-летнем опыте. Автор подчёркивает важность поймать момент экспоненциального роста в гонке Красной Королевы, где нет места для стояка. Для масштабирования бизнеса, команды и технологий необходимо сосредоточиться на увеличении продаж, улучшении цен и избежать сверху насыщения. Команды должны быть вертикально организованными, чтобы обеспечить независимость и экспертизу в доменах, что улучшает взаимодействие с продуктами и приоритизацию результатов. Инженеры должны сосредоточиться на простоте и упрощении архитектуры, сохраняя при этом долгосрочную владение и знание своего домену.

Takeaways

  • 🏁 Начало взрывообразного роста - это ключевой момент для стартапа, когда необходимо быстро реагировать на рыночные возможности.
  • 🔄 В технологической сфере существует 'гонка Красной Королевы', где необходимо улавливать момент роста, так как ни один тренд не продлится вечно.
  • 📈 Для масштабирования бизнеса необходимо увеличивать продажи, расширять аудиторию или повышать цену продуктов.
  • 🔄 При масштабировании бизнеса важно учитывать 'S-криву', когда рост достигает точки насыщения и начинает замедляться.
  • 👨‍💼 Инженеры должны понимать, что рост бизнеса - это их топливо, так как это дает им больше возможностей для профессионального роста и новых вызовов.
  • 🛠️ Инженеры должны стремиться к тому, чтобы не стать узким местом для роста компании, сосредоточившись на быстрой разработке.
  • 💬 При масштабировании команды важно решать технические проблемы через общение, а не только через код.
  • 🔄 Вместо горизонтальных команд, которые часто блокируют друг друга, следует создавать вертикальные команды, работающие в рамках определенной бизнес-области.
  • 🌟 Команды должны обладать самостоятельностью, отвечать за свои решения и понимать свой домен, чтобы предоставлять ценность пользователей.
  • 🔧 При масштабировании технологий следует использовать известные решения для известных проблем, минимизируя инновации там, где это не требуется.
  • 🔗 Архитектура кода должна быть организована вертикально, чтобы уменьшить взаимосвязи и сложность, сосредоточившись на данных и структурах.
  • 📚 Автор планирует написать книгу, основанную на данной презентации, и предлагает узнать больше через QR-код.

Q & A

  • Что означает фраза 'красная королевская гонка' в контексте технологических стартапов?

    -Фраза 'красная королевская гонка' используется для описания ситуации в технологической индустрии, где компании должны постоянно развиваться и инновировать, чтобы удерживать свое лидерство на рынке, иначе они могут быть отставлены конкурентами.

  • Какие три части компании нужно масштабировать для поддержания экспоненциального роста?

    -Для поддержания экспоненциального роста необходимо масштабировать бизнес, команду и технологию. Это охватывает увеличение продаж, улучшение команды и оптимизацию технологий для эффективной работы компании.

  • Почему автор считает, что рост бизнеса важный для инженеров?

    -Автор считает, что рост бизнеса важный для инженеров, потому что он приводит к большему количеству продвижения, новых инженерных вызовов и улучшению карьеры. В растущих компаниях возникают новые возможности, в отличие от стабильных или слабо растущих бизнесов, где карьера может оказаться в состоянии нулевой суммы.

  • Что означает S-круг и как он связан с ростом бизнеса?

    -S-круг - это концепция, описывающая жизненный цикл продукта или бизнеса, где рост доходов достигает пикового значения, а затем замедляется из-за насыщения рынка. Компания должна искать новые продукты или аудитории, чтобы преодолеть этот потолок и продолжать расти.

  • Почему автор предлагает создавать вертикальные, а не горизонтальные команды?

    -Автор предлагает создавать вертикальные команды, потому что они могут работать более независимо и эффективно, сосредоточены на конкретной области бизнеса и не блокируются другими командами. Это позволяет командам быстрее принимать решения и реализовывать изменения.

  • Что такое 'собственность проблемы' и почему она важна для команды?

    -Собственность проблемы означает, что команда несет ответственность за свое кодооборот, включая его разработку, тестирование и поддержку в продакшене. Это важный концепт, потому что он заставляет команду заботиться о своих продуктах и процессах, что, в свою очередь, улучшает качество и эффективность работы.

  • Почему автор считает, что быстрые рецензии кода важны для масштабирования команды?

    -Автор считает, что быстрые рецензии кода важны, потому что они сокращают время ожидания и ускоряют процесс разработки. Это позволяет команде быть более гибкой и реагировать быстрее на изменения, что особенно важно в условиях экспоненциального роста.

  • Какие рекомендации автор дает по управлению сложностью в инженерии?

    -Автор рекомендует бороться с сложностью, используя вертикальное разделение кода, тип- или контрактное программирование, а также сосредоточение на данных и структурах данных. Он также поддерживает идею 'не повторяйся' (DRY), но только в той мере, в которой это не приводит к чрезмерной сложности архитектуры.

  • Что автор предлагает делать с кодом, который не соответствует идеалам?

    -Автор предлагает принимать код, который работает, даже если он не совершенен, поскольку 'код, который работает, всегда лучше, чем идеальный код'. Он также рекомендует делать короткие запросы на вытягивание (PRs) и минимизировать время, затрачиваемое на рецензии кода.

  • Почему автор считает, что данные и структуры данных играют ключевую роль в инженерии?

    -Автор считает, что данные и структуры данных играют ключевую роль, потому что правильное управление и организация данных могут значительно упростить процесс разработки и поддержки кода. Если данные и структуры данных не соответствуют домену приложения, это может привести к ненужной сложности и повторному коду.

Outlines

00:00

🚀 Быстрый рост и необходимость масштабирования

Спикер начинает с обсуждения необходимости масштабирования бизнеса, команды и технологий при быстром росте компании. Он подчеркивает, что в условиях стремительного роста важно не стать узким местом для компании и упоминает о 'гонке Красной Королевы', в которой, несмотря на прогресс, приходится постоянно бежать, чтобы оставаться на месте. Важно понимать, что успешный бизнес приводит к карьерному росту и новым вызовам для инженеров. Основные показатели, на которые стоит обращать внимание — стоимость привлечения клиента и его пожизненная ценность, так как их разница определяет успех компании.

05:00

📊 Вертикальные команды: путь к эффективности

Спикер объясняет важность вертикальной организации команд в отличие от горизонтальной. Он утверждает, что горизонтальные команды создают узкие места, так как разные отделы зависят друг от друга, что замедляет работу. Вертикальные команды, организованные по бизнес-доменам, позволяют быстрее доставлять ценность пользователям, обеспечивают автономность и ответственность за весь процесс разработки, включая запуск и поддержку продукта. Такая структура способствует лучшему пониманию проблем пользователей и улучшает взаимодействие между продуктом и инженерами.

10:01

🔄 Ускорение процесса код-ревью и минимизация блокировок

В третьем параграфе обсуждается важность быстрой и эффективной проверки кода для поддержания темпов разработки. Спикер советует избегать долгих проверок кода, так как это приводит к накоплению 'несвежего' кода и усложняет его интеграцию. Рекомендуется проводить обсуждения дизайна и решений до написания кода, чтобы минимизировать возможные задержки. Также подчеркивается важность коротких, но качественных проверок, что позволяет быстрее обнаруживать и исправлять ошибки, если они возникнут в продакшне.

15:03

🛠 Масштабирование технологий и упрощение решений

Спикер рассказывает о масштабировании технологий, отмечая, что это проще, чем кажется, так как обычно решаются известные проблемы с помощью проверенных решений. Он призывает не усложнять задачи и избегать чрезмерной гибкости, которая может привести к увеличению сложности архитектуры. Вместо этого он советует использовать проверенные решения и адаптировать задачи под них, а не наоборот. Спикер также рекомендует избегать создания сложных универсальных решений, если можно обойтись простым и прямым подходом.

Mindmap

Keywords

💡Технологические стартапы

Технологические стартапы - это молодые компании, специализирующиеся на разработке и использовании инновационных технологий. В контексте видео, автор обсуждает, как стартапы могут достичь экспоненциального роста и как инженеры могут эффективно работать в таких компаниях. Примеры в скрипте включают различные стратегии роста и масштабирования, которые могут быть применимы для технологических стартапов.

💡Масштабирование

Масштабирование означает процесс увеличения размеров или объема чего-либо, в данном случае - бизнеса, команды и технологий. Видео посвящено методам масштабирования в условиях экспоненциального роста, что включает увеличение продаж, улучшение команды и технологические решения. Автор подчеркивает важность масштабирования для поддержания роста и конкурентоспособности.

💡Команда

Команда в контексте видео относится к коллективу людей, работающих вместе в компании для достижения общих целей. Автор говорит о том, как правильное масштабирование команды включает в себя создание вертикальных команд, которые могут работать в автономном режиме и не блокируют друг друга, что способствует эффективности и производительности.

💡Вертикальные команды

Вертикальные команды - это группы, организованные вокруг конкретной бизнес-функции или продукта, а не по технологическим специализациям. В видео автор предлагает организовывать команды таким образом, чтобы они могли вносить свой вклад в проекты от начала до конца, что упрощает их работу и повышает уровень ответственности.

💡С-кривая

С-кривая (S-curve) - это концепция, описывающая жизненный цикл продукта или бизнеса, где рост начинается медленно, ускоряется, достигает точки насыщения и затем замедляется. Автор использует этот термин для объяснения, что компании должны быть готовы к разработке новых продуктов или поиску новых рынков, когда они достигают точки насыщения.

💡Цена за клиента

Цена за клиента - это сумма, которую компания тратит на привлечение одного клиента. В видео автор подчеркивает важность определения этой метрики для оценки эффективности маркетинговых и продажных усилий и для определения, какая часть бизнеса является прибыльной.

💡Жизненный цикл клиента

Жизненный цикл клиента - это общее время, в течение которого клиент остается клиентом компании и генерирует доход. Автор говорит о важности понимания этого показателя для планирования стратегий роста и определения, как долго компании нужно поддерживать клиента, чтобы обеспечить выгоду.

💡Архитектура

Архитектура в контексте видео относится к структуре и организации программного обеспечения, включая классы, модули, сервисы и их взаимодействие. Автор говорит о том, как правильно выбранная архитектура может упростить разработку и поддержку программного обеспечения, а плохая архитектура может привести к сложностям и дополнительным затратам.

💡Кодовый ревью

Кодовый ревью - это процесс, при котором другие разработчики проверяют код на ошибки, стилистику и соответствие стандартам перед его внедрением. Автор говорит о том, что быстрый и эффективный процесс кодового ревью может существенно ускорить разработку и уменьшить количество ошибок в коде.

💡ДРЯ

ДРЯ (Don't Repeat Yourself) - это принцип программирования, при котором разработчики стараются избегать повторения кода, чтобы упростить поддержку и изменение. Однако автор видео высказывает точку зрения, что иногда повторение кода может быть предпочтительнее излишней обобщенности, особенно в случаях, когда это может снизить сложность и увеличить ясность.

Highlights

Tech startups require scaling business, team, and tech to handle explosive growth.

Tech is a 'Red Queen's race' where you must adapt quickly to maintain growth.

Scaling the business involves increasing sales or product prices, but be aware of the S-curve and saturation points.

Business growth fuels engineering challenges and career progression.

Engineers should focus on not being a bottleneck during the growth phase.

Scaling the team should prioritize vertical teams over horizontal to reduce blockages and improve autonomy.

Vertical teams should be organized by business domain for better domain expertise and collaboration.

Delegating decisions to those closest to the problem can significantly improve scaling.

Code review processes should be as short as possible to avoid work-in-progress bottlenecks.

Discussing solutions before coding can expedite the code review process.

Scaling tech is about solving known problems with known solutions, not over-engineering.

Adopting standard designs and adjusting problems to fit solutions can accelerate development.

Avoiding complexity in architecture is key to maintaining manageable codebases.

Vertical code organization can reduce complexity and improve maintainability.

DRY (Don't Repeat Yourself) can be detrimental if it leads to overly complex and intertwined code.

Focusing on data and data structures can simplify code implementation.

Control over API, data, and UI by vertical teams leads to better problem-solving.

The speaker is turning the talk into a book for further exploration of the topics.

Transcripts

play00:01

[Applause]

play00:07

[Music]

play00:10

he

play00:12

[Music]

play00:20

[Music]

play00:31

scaling fast engineering lessons from

play00:34

about 15 years of tech startups uh I may

play00:38

be old so your users are going now what

play00:42

do you do what happens next what happens

play00:44

at that inflection point where you go

play00:47

from slow growth to a lot of growth

play00:51

first thing you got to remember is that

play00:53

Tech is a red Queen's race that means

play00:55

that you have to catch that explosive

play00:57

growth right now while it's happen

play01:00

happening because no mode lasts forever

play01:03

and if you found something that's worth

play01:05

chasing there's at least five other

play01:07

companies trying to do the same thing

play01:09

while you are chasing this growth so to

play01:13

keep up with the growth you're going to

play01:14

have to scale three parts of your

play01:16

company you're going to have to scale

play01:18

the business the team and the tech now

play01:21

scaling the business is pretty simple

play01:24

forget what all the business people are

play01:25

telling you there's only two things you

play01:27

can do here you can either sell more

play01:30

products to to more people that's like

play01:33

uh that's why everything is a

play01:35

subscription these days or you can sell

play01:37

products for a higher price that's why

play01:39

every company you see starts as b2c and

play01:42

then they go to B2B and Enterprise or if

play01:45

you follow any influencers or uh Indie

play01:48

creators they start with like a $10

play01:51

ebook and then eventually they have a

play01:53

multi thousand video course that's the

play01:55

same thing but when you're scaling the

play01:58

business you have to be Ware of the S

play02:00

curve every business or product hits a

play02:03

saturation point where your churn and

play02:06

your customer acquisition start to

play02:08

balance out and you kind of stop growing

play02:11

and that's when you have to figure out

play02:12

something new you have to either release

play02:14

more products find new audiences or just

play02:18

you got to figure out something new to

play02:20

do when you hit the saturation point but

play02:24

as an engineer I think we're all

play02:25

Engineers here why would you even care

play02:27

about any of this that's because the

play02:30

business side is your fuel the you want

play02:33

the business to grow because uh because

play02:37

fighting the market means you're not

play02:39

fighting each other within the company

play02:41

when your business is growing that's

play02:44

where the promotions come from that's

play02:45

where more engineering challenges come

play02:47

from uh your career grows your CV looks

play02:51

more impressive all the good stuff comes

play02:53

from growing the business and having

play02:55

those business

play02:56

results um and if you don't have growth

play03:00

if you're in a stable Z low growth

play03:03

business your career kind of turns into

play03:05

a zero sum game you have to steal your

play03:08

promotion from somebody else who's not

play03:10

getting promoted you have to you know

play03:13

everything becomes a zero Su grain yeah

play03:15

zero some game so the main numbers that

play03:19

you have to care about when you're

play03:21

thinking thinking about the business

play03:22

side is your customer is your cost of

play03:25

acquiring a customer and their lifetime

play03:28

value the Delta between th those two

play03:30

numbers fuels everything else in your

play03:33

business now while the business people

play03:35

are taking care of that side you're

play03:38

looking like this as an engineer you're

play03:39

just trying to build as fast as possible

play03:42

so that you're not the bottleneck for

play03:44

the company the only goal you have as an

play03:47

engineering team at a startup going

play03:50

through that inflection point is to not

play03:52

be the reason that the business has to

play03:55

slow down and remember engineering is

play03:58

the tool not the goal you're building

play04:01

that flower but what you're selling is

play04:04

those awesome people who can do cool

play04:06

that they weren't able to do before

play04:09

so one thing this this brings us to

play04:12

scaling the uh scaling the team because

play04:15

many Tech problems when you squint a

play04:17

little are actually people problems uh

play04:20

cuz yes you can write some really

play04:23

amazing code that does wonderful things

play04:26

and makes you feel super smart but it

play04:29

would be so much easier to just have a

play04:31

5-minute conversation and be like yo why

play04:33

is the API not returning the data I need

play04:36

cuz if you can solve it that way you you

play04:39

like that five minute conversation can

play04:41

save you a week's worth of work and it's

play04:44

a lot faster uh it's a lot faster to

play04:47

solve technical problems that way so how

play04:49

you scale the team really impacts

play04:52

everything else in your uh in your

play04:54

company in your engineering

play04:56

processes and the pro um the mistake

play05:00

that many companies make at this stage

play05:03

is that they build horizontal teams

play05:05

instead of vertical teams so you end up

play05:08

with a front-end team and a backend team

play05:10

maybe some CIS admin people and this is

play05:13

a really great way to ensure that

play05:16

everyone is always blocked by somebody

play05:18

else you're always waiting like the

play05:20

front end team is always waiting on the

play05:21

backend team to get their work done the

play05:24

backend team is always waiting on the

play05:26

front end team somebody is always

play05:27

waiting on the CIS admins and the only

play05:30

way that those teams wouldn't get

play05:32

blocked by each other is if their uh

play05:35

road maps are carefully in sync and

play05:38

nothing ever takes longer than you plan

play05:40

because you know engineering Pro

play05:42

engineering projects always take exactly

play05:45

the amount of time you plan for them

play05:46

right um so instead what you really want

play05:50

are vertical teams um they should be

play05:52

organized by the business domain that

play05:55

they're tackling the idea here is that

play05:59

you should you organize your teams by

play06:01

what they're doing not how they're doing

play06:04

it the there's different names for this

play06:07

some cons like every consultant that

play06:10

talks about teams and stuff has a

play06:11

different name for this concept some

play06:13

call them empowered product teams stream

play06:16

aligned teams business capability

play06:18

Centric teams but whatever you call it

play06:21

it's all they always have the same goal

play06:23

it's how can we have teams that deliver

play06:26

value on their own without being blocked

play06:29

by their by other teams the goal is that

play06:32

each team or you in a team should be

play06:35

able to own your destiny own your mess

play06:38

and understand your domain owning your

play06:41

destiny means that you can ship value

play06:44

from idea to production you get an idea

play06:47

like your team comes up with an idea and

play06:49

can get it all the way to production

play06:51

delivering value to users owning your

play06:53

mess aligns incentives and means that

play06:56

you are in charge of keeping your code

play06:58

running in production ction making sure

play07:00

it works uh and all of that stuff

play07:03

there's no writing some code and

play07:05

throwing it across the wall to QA and

play07:07

deployment teams and so on you should be

play07:09

in charge of that because that way you

play07:11

care about it more and you get to feel

play07:14

proud of the stuff you've built because

play07:16

you're there to see the impact it has on

play07:19

your users and with that longterm and

play07:22

with that long-term ownership what you

play07:25

get is domain expertise where you really

play07:28

understand the the uh the users that

play07:31

you're solving problems for and the

play07:33

problems that they're that they have

play07:35

which then unlocks a really good

play07:37

collaboration between product and

play07:40

Engineering where you can work in this

play07:43

uh product development cycle where you

play07:46

can focus on getting us across the water

play07:50

not just building a bridge the idea here

play07:53

is that engineering teams especially

play07:55

product engineering teams get involved

play07:57

early in the process as early as

play08:00

possible and ideate together with the

play08:03

product to develop the best solution to

play08:05

the problem not just a solution that

play08:08

somebody else thought of you can do this

play08:10

because you understand the domain and

play08:13

understand your whop I didn't mean to

play08:16

press that yet um

play08:19

so what you get from this is that

play08:23

Engineers understand why they're

play08:25

building what they're building which

play08:27

then lets them prioritize business

play08:30

outcomes over just writing full code and

play08:32

getting distracted in Long debates about

play08:35

what is the best way to write a for Loop

play08:37

or whatever you know all the stuff that

play08:40

you see on Twitter most of those debates

play08:42

don't actually matter at all um and when

play08:47

you have those Engineers that can that

play08:49

understand their domain you can start

play08:52

delegating decisions not just tasks and

play08:55

this is probably the biggest the biggest

play08:59

lever you can pull when you're scaling a

play09:02

team or scaling a company is that the

play09:05

people who are closest to the problem

play09:07

the people who are closest to the domain

play09:09

they're working with probably know best

play09:12

what is the right solution because

play09:15

ultimately you can't have one Central

play09:18

decision maker who is doing the thinking

play09:20

for everybody on the team when um that

play09:24

that's very common early in startups

play09:25

like the founder or eventually like the

play09:27

head of product comes up with all the

play09:29

ideas and everyone else is just building

play09:32

and what you get is a very strong

play09:34

bottleneck that has to get involved in

play09:36

every little thing and is blocking the

play09:39

entire company or the all of the

play09:40

products and everything you're working

play09:42

on from

play09:43

advancing and unfort fortunately or

play09:47

unfortunately this also means that

play09:49

you're going to have to eat your ego

play09:52

when you're dealing with code uh code

play09:55

review and you're going to have to merge

play09:57

some unperfect code because it is okay

play10:00

it's fine code that works always beats

play10:04

code that is perfect uh just have short

play10:07

PRS what what was it going to say so

play10:10

have have quick PRS uh as short of a

play10:13

code review process as possible and

play10:16

raise your hand if you measure your code

play10:19

review time in

play10:21

minutes two hands nice hours few okay

play10:25

who has been in a code review that has

play10:27

taken multiple days or weeks to get

play10:30

something

play10:31

merged I feel sorry for all of you um

play10:35

work in progress is the fastest way to

play10:39

kill all of your progress when you have

play10:41

stale code lying around it becomes

play10:44

harder and harder to merge and resolve

play10:47

that uh code like merge conflicts all of

play10:50

those things especially when you're in a

play10:52

situation when you have multiple teams

play10:54

working on the same product together or

play10:57

you have multiple or you have teams

play10:59

working on different microservices that

play11:00

all talk to each other if you have code

play11:03

that's just lying around in purgatory in

play11:05

code review it gets harder and harder to

play11:08

get that landed

play11:10

so uh one way you can speed that up is

play11:14

to talk to each other before you write

play11:17

the code before any code get so what we

play11:20

like to do in my team is to get together

play11:23

for every new project agree on the

play11:25

design agree on the solution ahead of

play11:27

time before any code is being written so

play11:30

that by the time we're making code

play11:31

reviews it's just a very quick check we

play11:34

can do most of our code reviews in like

play11:35

2 or 3 minutes you get two people to

play11:38

look at it smoke test maybe and be like

play11:41

okay cool looks good to me if it's

play11:43

broken in production we'll just fix it

play11:44

later so that's scaling the team now how

play11:48

do you scale the

play11:50

tech don't think too hard about the tech

play11:53

the tech is it's kind of the easiest

play11:56

part of scaling a business for the most

play11:59

part you're just solving known you're

play12:02

solving known problems with known

play12:05

Solutions um this is in how big things

play12:07

get done this is a really good book it's

play12:09

not about software engineering but it's

play12:11

about large scale engineering projects

play12:14

and it talks about how China is able to

play12:18

ship a bazillion Bridges and power

play12:21

plants per year whereas the USA isn't

play12:24

and the main factor they talk about is

play12:26

that in China they have like 10 standard

play12:29

designs for everything and then the

play12:31

engineers come in look at the situation

play12:33

and just pick the most appropriate

play12:35

design to apply to that situation and

play12:37

then here's the thing they tweak the

play12:41

situation to fit the design they don't

play12:43

tweak the design of an off the shelf

play12:45

component to fit the situation it's the

play12:47

other way around change the problem so

play12:50

it fits the solution you already have

play12:52

and that way you can build much faster

play12:55

and you're saving your Innovation tokens

play12:57

for the things that are actually new and

play13:00

differentiating in your

play13:01

company which brings us to just solve

play13:05

the problem not a different more

play13:07

difficult problem uh the hardest thing

play13:10

to do in software engineering is to

play13:12

build a generic solution especially when

play13:16

all you have is a specific problem it

play13:20

is generally a good idea or rather I'll

play13:24

say it this way the older I get the more

play13:27

my code looks like a a very simple

play13:30

step-by-step process it doesn't impress

play13:32

anyone it's super boring to look at and

play13:36

honest personally I think the biggest

play13:38

compliment you can get on your code is

play13:40

when somebody looks at it and goes wait

play13:43

that's it if damn right that's it it is

play13:46

simple it's easy to understand and it's

play13:48

easy to maintain because you always have

play13:51

to push back on

play13:53

complexity um engineering is an endless

play13:57

fight against complexity and

play13:59

sometimes that means saying no to an

play14:01

architecture as astronaut who's trying

play14:04

to build a generic framework to solve a

play14:07

problem forever when you just need you

play14:09

know we need to ship this code tomorrow

play14:11

we don't need we don't even know yet

play14:13

what we're building in 10 days and

play14:15

you're trying to build a framework just

play14:17

fix the problem solve it uh and move on

play14:21

and it this also means that again

play14:23

because you understand your domain

play14:25

because you have long-term ownership of

play14:26

the stuff you're building you can push

play14:28

back on your product as well on your

play14:30

product managers very often you have

play14:34

like One requirement that blows up the

play14:36

entire story and makes it way harder

play14:38

than it needs to

play14:39

be you can usually push back on your pm

play14:43

and be like hey this one thing is making

play14:45

is making our work a lot harder and

play14:49

they'll go oh yeah no we don't

play14:50

actually need that we don't care just

play14:52

drop that requirement and now you can

play14:54

use a very simple solution

play14:57

and where most complexity comes from in

play15:00

a software engineering project is not

play15:02

actually the code you're writing it's

play15:05

the architecture you're creating so if

play15:07

you think about your code as a series of

play15:10

interconnected boxes the boxes are uh

play15:13

like your code those are like those are

play15:15

classes modules Services whatever you

play15:18

want to call them and the lines are how

play15:20

they talk to each other the more

play15:22

connected these lines are the more the

play15:25

more intertwined everything gets the

play15:27

more complex it is and and one lesson

play15:30

that I've learned is that you can always

play15:33

change how a self-contained box works

play15:35

you can rip out all of the code and

play15:37

write new code that's cleaner or better

play15:39

or whatever but it's very hard to change

play15:41

those

play15:42

connections

play15:44

and uh one way to to limit that

play15:48

complexity is to use vert to organize

play15:51

your code vertically instead of

play15:53

horizontally so instead of splitting

play15:55

components hooks types utils or

play16:00

uh or whatever you have in your uh I I

play16:04

don't know what stack you use but if you

play16:07

if you instead split your code by

play16:09

everything that goes into a dashboard

play16:10

anything that goes into a user profile

play16:12

into a to-do list you then have modules

play16:16

or like you have boxes that aren't as

play16:19

intertwined and it's those clear apis

play16:22

that make everything easier so one trick

play16:25

I like to use is to use type driven or

play16:28

for contract driven development where we

play16:31

ahead of time we talk about what are the

play16:34

different moving pieces of a story we're

play16:35

building and then we talk about how

play16:37

they're going to talk to each other and

play16:39

then everyone who's writing the code is

play16:42

empowered to build the internal

play16:43

implementation whatever way they

play16:46

want unfortunately or

play16:49

fortunately um using vertical vertical

play16:52

modules May mean that you will have to

play16:55

copy paste some code and this is

play16:58

probably one of my most uh controversial

play17:00

takes is that drying code do not repeat

play17:03

yourself is actually bad and whenever

play17:06

possible you should lean on separation

play17:09

of concerns more than you do on drying

play17:12

up your code because when you dry up

play17:15

your code your architecture ends up

play17:17

looking like this uh if you dry it up

play17:19

too much everything is overlapping you

play17:21

get components or services that get that

play17:25

take 10 billion parameters to configure

play17:27

their uh their Implement their behavior

play17:30

and you change one thing over here and

play17:32

suddenly something completely different

play17:34

that you weren't even thinking about

play17:36

breaks that when that's happening to you

play17:38

that means that your I'm running

play17:42

out of time that means that your code is

play17:44

interconnected in a way that uh that

play17:48

causes problems for you so one of the

play17:51

things that uh one of the things that I

play17:55

like to focus on especially when talk

play17:57

talking about architecture is to focus

play17:59

on your data and your data structures uh

play18:03

how you organize data in your database

play18:05

how you organize data access patterns uh

play18:09

stuff like that because it turns out

play18:12

that when you get the data right your

play18:15

code is so easy to implement that it

play18:18

almost feels like you have nothing to do

play18:20

all day and when you get your data wrong

play18:23

when it doesn't fit your domain model it

play18:26

feels like you have to keep bending over

play18:28

back WS to make things fit together and

play18:31

that is why you want to write ver you

play18:33

want to use vertical teams that write

play18:35

vertical code because it means that you

play18:38

as a team are in control of your API in

play18:41

control of your data in control of your

play18:43

UI and you get to design everything so

play18:48

that it fits together solves your

play18:50

problems uh and not some generic straw

play18:54

man that you find on the internet uh and

play18:57

people are talking about

play18:59

so that was my talk uh I'm turning all

play19:02

of this into a book uh if you use that

play19:05

QR code you can learn more about what

play19:08

I'm doing and um thank you

play19:16

[Music]

Rate This

5.0 / 5 (0 votes)

Связанные теги
технологиистартапымасштабированиестратегияростинжинирингкомандыбизнесразработкаменторство