Another common question I’m answering working with scaling tech companies is…

Q. What virus infects growing engineering orgs the most?

A. Layerinitis. Let me explain... 🧵 (1/27)
2/ As your eng org grows you have to organize into teams. Companies start with shared ownership of the code base and small project teams that form and disband. It's a good model, but past 50+ engineers that falls apart...
3/ In 2015 at Shopify there was a busy file called api_client.rb. I spoke to the last 20 committers. Everyone was adding new attributes, but when asked why the answer was "I was just following what the previous committer did" an "had a deadline".
4/ The design philosophy of that entire area of Shopify was shared across everyone. But there was no real owner or steward. As they say... the fastest way to starve a horse is to ask two people to feed it.
5/ So as you'd expect, as your org grows, you create teams that have stewardship for areas of your product.

There's a lot of research that shows that code ownership increases the quality of software. microsoft.com/en-us/research…
6/ At this point you think you've got everything figured out. You define boundaries in your software, modularity is good. You can reduce dependencies with good APIs, DDD, and increase the overall quality all at once. You're winning! That was easy... right?
7/ We modularized somewhat retroactively at Shopify (read about it shopify.engineering/deconstructing…) and we started with a modular architecture at Eclipse.org in 2000.
8/ But what you didn't realize is that layerinitis has been lurking just waiting to attack your org. It's triggered right at that moment when you think you have the perfect architecture and team structure. And it hits hard.
9/ You also likely have PMs matched up to each team and you want them to be as independent as possible. You want to stay fast and nimble and your incentives are aligned for that (promotions, raises)...
10/ Then you realize that 80% of the projects that introduce new features or capabilities look like this:
11/ But the code is always added at the top of your stack. This is a very human response by teams, you have incentives aligned to ship fast at the teams level and it's much easier to measure that vs if the code in the right spot for the long term health of your system.
12/ The technical definition for layerinitis is teams putting code where they are most comfortable while optimizing for speed vs putting the code where it belongs when considering a longer term perspective on the overall software system.
13/ It's very easy to diagnose, so that's great news. Ask teams where the code should go for their project if they break down the capabilities they are introducing with their project into the model introduced here:
14/ Let's pause a second. Layerinitis isn't bad, it's a virus that every org will get. We've all been there. But there are cultural, process, and tooling tricks you can implement that will prevent layerinitis from crippling your teams.
15/ Starting with culture, ask yourself, do teams have permission to learn and build confidence with different parts of your software stack?
16/ One memorable experience at Shopify was when we tried to add subscriptions to the platform for 2 years. The team who owned the featured owned the UI parts of the online store. So every solution ended up a very UI focused solution.
17/ I took the team into a boardroom, they were all extremely smart engineers. They were stressed. I changed the goals of the project: 1) your mission is to find the best place to build subscriptions into Shopify 2) build a prototype / fork any repo and we will throw it away.
18/ A big lesson from this is that the team had the skill to do the work, but never had permission to deeply build confidence in other areas of the code base. They didn't see their role as stewards of the overall architecture of Shopify vs shipping the feature.
19/ We often forget that prototyping isn't just about finding a good architecture or figuring out how long something will take to build. One of the most important benefits of prototypes is increasing the confidence in your engineering teams to work and understand layers.
20/ I've seen so many teams that replace prototypes with roadmaps. Then they stop building to learn. And now they have roadmaps with no substance. It's a vicious circle.
21/ There's another big side effect of using prototypes as a way to dampen layerinitis. Often the prototype team end of digging into platform / infra level areas that are often owned by small teams. Those teams really appreciate having more people learn about their areas...
22/ ...over time I've seen a healthy growth of morale and committers across different layers just by encouraging more cross-layer prototype at the start of large projects. And that builds more long term resiliency of knowledge across your teams.
23/ Once you have a few good cultural habits, the next change that helps is a process one. Ensure you have enough flexibility in your roadmaps to put people from across different layers of your stack onto the projects that need them...
24/ ...this may sound trivial, but every company has an army of people managing crazy gantt charts that will explode when re-jiggle people. But do it anyway.

You had one job as a manager... put the right skills on the right projects. Period.
25/ The next layerinitis defence is standardizing access and setup of any code base in your company. You should have the same command to setup a dev environment, test, tools for every code base.
26/ You need amazing READMEs that assume that those reading are new and want to learn how to contribute vs just use. Again, sounds trivial but some many teams have crappy READMEs that make it hard and intimidating to setup and contribute.
27/ That's the short summary of why I think that layerinitis is the worst virus that will eventually infect your engineering org and the defences you can start to build now.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Jean-Michel Lemieux

Jean-Michel Lemieux Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jmwind

14 Dec 21
Another common question I’m answering working with scaling tech companies is…

Q. How much of your r&d spend should be focused on platform work?

A. 50%, and most teams are way off what it should be. Let me explain…🧵 (1/21)
2/ This question is a proxy question for many underlying issues…

✳️ Lack of trust in the engineering team
✳️ Lack of understand of your strategy
✳️ Lack of long term thinking and culture
✳️ Lack of understanding of compounding technology investments
3/ This comes up is often in panic situations, “the engineering team says that there’s too much technical debt and can’t work on features”… but the problems started way before.
Read 21 tweets
15 Nov 21
This is the most common question I'm answering in recent fireside chats...

Q. How do you handle/manage the stress of working in a hyper-growth company where there's always too much to do?"

A. It's a mindset change: problems upgrade but don't go away. Let me explain... 🧵
2/ The reason this problem mindset is hard to develop is our human bias that gets in the way...

From childhood we are trained to see work equate with problems diminishing over time. You finish your assignment, and it's done. You complete your courses, you finish a sports game.
3/ The Agile development process is the worst for this as the coveted "burn down" chart is what you use to see if you're doing a good job as a team.

You equate progress with "less story points". You measure your self-worth with problems going away.
Read 11 tweets
1 Dec 20
Congrats to the entrepreneurs who survived and thrived. @ShopifyEng was here for you. A year of BFCM traffic every day with a $5.1B ending.

So much more to build... I’ve decided to double our eng team in 2021 by hiring 2,021 new technical roles. 🙌🏼

shopify.com/careers/2021 1/ Image
We’ve hesitated to grow too quickly, we’ve moved fast and scaled with a relatively small team. @ShopifyEng has definitely been lean and mean. But from web stores to warehouses, banking, logistics, shop, fulfillment network we are ready to double down and scale bigger. 2/
If you’ve read our engineering blog, you know that we are building the planetary commerce platform for entrepreneurs to start and scale their businesses. Our traffic is doubling every year and we’re redefining the primitives of commerce. 3/
Read 6 tweets
30 Nov 19
How about some nerd stats for #BlackFriday2019 with @ShopifyEng?

128,000 Unicorn workers served 90m unique sessions at a steady 17M RPM (requests/min) throughout the day. Over 1b webhooks sent, transformed 280m webp images at the edge and 34b requests to CDNs. 74m Flows ran.
36% of traffic was http/1.1 and 64% http/2

#BlackFriday2019 with @ShopifyEng
28m transactional emails sent

#BlackFriday2019 with @ShopifyEng
Read 6 tweets
1 May 19
1/ So great, thanks @Eli_White for the being open and honest about how hard it is to build a platform. You prioritized dog fooding and taking the raw/hash feedback about performance and addressing was the right move. Here's why i'm bullish on RN...
2/ Companies that are focused on Apps&Products have to do dev gymnastics to ship anything across the matrix of platforms. It's slow and bad for our entire industry.
3/ The ratio of companies that are focused on Apps&Products vs platforms is 25,000,000:2. Apple and Google being the 2. And they don't care enough about our pains in App land and instead favour their platform winning over developers solving problems quickly for the planet.
Read 8 tweets
23 Apr 19
1/ Compared to web, mobile CI/CD has been in the dark ages. Waiting 15+ minutes for builds, testing PRs hard, and complex app-store submission. But the amazing team of @sanderlijbrink @pepibumur @markrcote @Alexrs95 fixed this for @ShopifyEng. Let me share the story...
2/ Like for web apps, each mobile commit has its own dedicated @buildkite build and to speed up CI build artifacts are shared between parallel testing steps. This takes developer machines and gives us fast and reproducible environments. More later on what this enables.
3/ iOS automation can be particularly tricky. Using a cluster of Mac minis in MacStadium and Anka virtualization, we provide disposable macOS environments to build our iOS apps in a fast and reproducible way. Read more in engineering.shopify.com/blogs/engineer…
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(