Shawn Swyx Wang - The Coding Career Handbook-Softcover

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 460

The Coding Career Handbook

Guides, Principles, Strategies, and Tactics –


from Code Newbie to Senior Dev
swyx

Foreword by Quincy Larson


In 2012, I left behind my career as a school director. I sat down at
my kitchen table with some programming books from the library.
And I slowly started learning to code.

It was a lonely, ambiguous process. But I stuck with it.

Within 6 months, I won a hackathon. Within 9 months, I got a job as


a software engineer at a local tech startup. And within 4 years, I
started freeCodeCamp.org to help other people get into software
development, too.

Along the way, I met developers who’d entered the field from a lot of
different backgrounds. Accountants. Nurses. Soldiers. Fire
fighters. But I never met anyone quite like Shawn Wang. The guy
was full of surprises.

For example, I interviewed Shawn for a podcast last year. And I


discovered that before he learned to code, he had worked as a
financial analyst on Wall Street. He left his $350,000 salary behind
and started over at the bottom of a new field as a junior developer.

And this week, I discovered something else about Shawn: he can


write a 500-page book that summarizes an entire profession, all in
just a few months of deliberate effort.
How does Shawn do it? Through a combination of “learning in
public”, starting from “first principles”, and never accepting a “zero
day”.

If you’ve never heard those terms before, you’re not alone. But in the
next few pages, you will. You’ll learn all about these approaches to
creative thinking and productive doing. And you’ll learn something
else, too: the tacit knowledge that so many experienced developers
carry around in their heads.

Nobody had written all this down in one place. That is, until Shawn
turned his indomitable will toward this task, sat down at his
computer, and grinded it out.

In many ways, a book like this could only be written by someone with
Shawn’s combination of Wall Street pragmatism, Silicon Valley
ambition, and a lively Singaporean upbringing.

Even though I’ve worked as a software engineer for several years –


and run a technology education nonprofit – I still learned quite a few
new things from Shawn’s book.

I recommend this book for anyone who is thinking of getting into the
field of software development. And I also recommend it as a
reference for experienced developers. Shawn has structured this
book in a way that you can easily come back to it and fill in the gaps
in your knowledge.

This book is stuffed to the gills with landmark studies and insightful
quotes from developers at the top of their field. Make time to absorb
the many articles and tech talks Shawn links to throughout. Sure,
you’ll encounter many of these canonical works sooner or later in
your developer career. But the sooner you grok their teachings, the
longer their insights will compound for you.

Rome wasn’t built in a day. Likewise, it will take you years to build
out your developer career and reach your final form.
This book will help you work smart. How hard you’re able to work is
ultimately up to you. As Shawn is quick to point out, this is a
marathon, not a sprint. So pace yourself.

And remember to slow down once in a while and take in the thrill of
creation that comes with coding something new.

- Quincy Larson

The teacher who founded freeCodeCamp.org

Preface: Real Talk


The code will always be the easiest part of a coding career.

The more I talked to my friends about their careers, and the more I
progressed in my own career, I increasingly realized that the non-
code part of coding was both a hugely important, and under-
discussed, topic. It is under-discussed because nobody else is as
invested in your career as you are.

And so the idea for this book was born.

There are a lot of books teaching you specifics of frameworks and


languages. There are a lot of books on quitting your job to do your
own thing. There are a lot of books on becoming an engineering
manager. This book is none of those. This is a book about
getting coding jobs, and doing well at coding jobs.

That is an ambitious goal, which presents its own problems. It’s


scary writing a career advice book - I’m just one person, and I
haven’t made a career of coaching developers. I can’t guarantee
success, and you can’t verify that everything I tell you is right. All I
have is hundreds of hours of listening to people’s stories, and living
my own. I have biases that make my situation different from yours -
I am a US-based, Asian male web developer, seeing decent success
after career change at age 30.

But I think the bar is very low. I’ve met with developer career
success advisors and read conventional career advice. You deserve a
more intelligent discussion than fits in a 15 minute YouTube video or
yet another Medium blog post. That’s why this is NOT going to be a
conventional career advice book.

This is a linear discussion of Career Guides, followed by a nonlinear


collection of Principles, Strategies, and Tactics - independent
essays of ideas that you may or may not agree with, but are worth
considering anyway. Please skim and skip. This book is a buffet, not
a five course meal. You will see some repeated ideas, because the
ideas are strongly interlinked. Unfortunately we can’t normalize
this; this book isn’t a relational database!

I have designed this book to last. A typical Code Newbie to Senior


Developer journey might take 4-8 years. I want you to discover the
full context of everything I’ve researched, with me as a guide rather
than omniscient narrator. I’ve embraced the digital format, and
made heavy use of links to original sources. Feel free to pause
at any chapter, go down those rabbit holes I lay out for you, and see
for yourself. Don’t try to read this book in one sitting.

My job here isn’t to tell you things others already do. I will cover
important points, but if other people do it better, I will simply link to
them rather than regurgitate. My job is to introduce you to
things you might take years to learn, and to honestly discuss
this industry like an older brother who is just a few years ahead of
you, acknowledging that what works for me might not work for you
but giving advice anyway.

This book is a conversation starter, not a conversation


ender. I am not an expert, this is not the final word on How to
Make It in Tech. There are multiple ways to succeed at a coding
career, and I cannot possibly cover them all. Consider me simply
another companion on your own career journey.

With all that disclaimed, it’s time to have some Real Talk about your
Coding Career.

TL;DR ToC v1.0.0


The autogenerated Table of Contents is a bit too long, so here are the
chapters broken into the four parts of the book!

Chapter 1: Careers
A linear series of career guides of the three early career roles
covered in this book (Code Newbie, Junior Dev, Senior Dev),
and the three major transitions after each stage.

Chapter 2: Code Newbies


Chapter 3: Job Hunt
Chapter 4: Junior Dev
Chapter 5: Junior to Senior
Chapter 6: Senior Dev
Chapter 7: Beyond your Coding Career

Chapter 8: Principles
A non-linear list of essays discussing ideas for Always-On
Principles that you can use to supercharge your career.

Chapter 9: Learn in Public


Chapter 10: Clone Open Source Apps
Chapter 11: Know Your Tools
Chapter 12: Specialize in the New
Chapter 13: Open Source Your Knowledge
Chapter 14: Spark Joy
Chapter 15: The Platinum Rule
Chapter 16: Good Enough is Better than Best
Chapter 17: First Principles Thinking
Chapter 18: Write, A Lot
Chapter 19: Pick Up What They Put Down

Chapter 20: Strategies


A non-linear list of introductions to Learning Strategy, Career
Strategy, and Tech Strategy for the ambitious developer
making big, one-off decisions. A comprehensive overview
of the business of software and betting on technology, and
where you fit in the bigger picture.

Chapter 21: Intro to Strategy


Chapter 22: Learning Gears
Chapter 23: Specialist vs Generalist
Chapter 24: Betting on Technologies
Chapter 25: Profit Center vs Cost Center
Chapter 26: Engineering Career Ladders
Chapter 27: Intro to Tech Strategy
Chapter 28: Strategic Awareness
Chapter 29: Megatrends

Chapter 30: Tactics


A non-linear list of tactical advice for the ambitious developer
making small, repeated actions that advance their skills
and grow their network.

Chapter 31: Negotiating


Chapter 32: Learning in Private
Chapter 33: Design for Developers in a Hurry
Chapter 34: Lampshading
Chapter 35: Conference CFPs
Chapter 36: Mise en Place Writing
Chapter 37: Side Projects
Chapter 38: Developer’s Guide to Twitter
Chapter 39: Marketing Yourself
Chapter 40: The Operating System of You

Contents
Foreword by Quincy Larson
Preface: Real Talk
TL;DR ToC v1.0.0
Chapter 1 Part I: Your Coding Career

1.1 Principles over Titles


1.2 Company Types
1.3 Career Layers
1.4 Diversity
1.5 The Five Career Stages
Chapter 2 Code Newbies
Chapter 3 The (First) Job Hunt

3.1 Do the Math


3.2 Do the Work
3.3 Staying Motivated While You Search
3.4 Getting the Interview
3.5 Types of Interviews
3.6 Outside the Interview
Chapter 4 Junior Developer

4.1 Finding Your Groove


4.2 Making Mistakes
4.3 Adding Value
4.4 Growing Your Knowledge
Chapter 5 From Junior to Senior

5.1 Acting For the Job You Want

5.1.1 Technical Expertise


5.1.2 Career Strategy

5.2 Marketing Yourself as a Senior Engineer


5.3 Junior Engineer, Senior Engineer

5.3.1 Code
5.3.2 Learning
5.3.3 Behavior
5.3.4 Team

5.4 To Stay or To Go
Chapter 6 Senior Developer

6.1 Solutions vs Patterns


6.2 Velocity vs Maintainability
6.3 Technical Debt

6.3.1 Prudent Debt


6.3.2 Reckless Debt

6.4 Mentorship, Allyship & Sponsorship


6.5 Business Impact
6.6 Recommended Reading
Chapter 7 Beyond your Coding Career

7.1 Engineering Management


7.2 Product Management
7.3 Developer Relations
7.4 Developer Education
7.5 Entrepreneurship
Chapter 8 Part II: Principles
Chapter 9 Learn in Public

9.1 Private vs Public


9.2 Getting Started
9.3 But I’m Scared
9.4 Teach to Learn
9.5 Mentors, Mentees, and Becoming an Expert
9.6 Appendix: Why It Works
9.7 Appendix: Intellectual History
Chapter 10 Clone Open Source Apps
Chapter 11 Know Your Tools

11.1 Avoid FOMO


11.2 Beyond the Tool
Chapter 12 Specialize in the New

12.1 Technology Complements


12.2 Lindy Compounding
Chapter 13 Open Source Your Knowledge

13.1 Open Knowledge


13.2 Open Source Knowledge
13.3 Personal Anecdote
13.4 Why Open Source YOUR Knowledge
13.5 Tips
Chapter 14 Spark Joy

14.1 What is Sparking Joy?


14.2 Why It Works
14.3 Examples

14.3.1 Sparking Joy in Code


14.3.2 Sparking Joy in PRs and Issues
14.3.3 Sparking Joy in Docs
14.3.4 Sparking Joy in Demos and Products

14.4 The Extra Mile


Chapter 15 The Platinum Rule

15.1 The Platinum Rule


15.2 The Silver Rule
Chapter 16 Good Enough is Better than Best

16.1 Why It Matters


16.2 The Problem with Seeking “The Best”
16.3 False Confidence: Accuracy vs Precision
Chapter 17 First Principles Thinking

17.1 Logic
17.2 Epistemology
17.3 Applications
17.4 Systems Thinking
17.5 Further Reading
Chapter 18 Write, A Lot

18.1 Why Developers Write

18.1.1 Documentation
18.1.2 Career Capital

18.2 What Writing Does for You

18.2.1 Scale
18.2.2 Structure
18.2.3 Power

18.3 How to become a Good Public Writer

18.3.1 Getting Started


18.3.2 Going Public
18.3.3 The DIY PhD

18.4 Committing to Writing


Chapter 19 Pick Up What They Put Down

19.1 Pick Up What They Put Down


19.2 What happens when you do this?
19.3 Why does this work on them?
19.4 Why does this work on -you-?
19.5 Your call to action
Chapter 20 Part III: Strategy
Chapter 21 Intro to Strategy

21.1 What is Strategy?

21.1.1 How Do I Use Strategy?


21.1.2 Don’t Stress Too Much
Chapter 22 Learning Gears

22.1 Explorer
22.2 Settler
22.3 Connector
22.4 Miner
22.5 Why “Gears”?
22.6 What do I do now?
Chapter 23 Specialist or Generalist?

23.1 Leverage vs Self Sufficiency


23.2 The “Full Stack” Developer
23.3 “T Shaped” and “Pi Shaped”
23.4 Look Inside, Not Out
23.5 When In Doubt, Specialize
23.6 Specialist in Public, Generalist in Private?
Chapter 24 Betting on Technologies

24.1 Never Betting On Anything


24.2 Data Driven Investing
24.3 How To Be Early

24.3.1 Managing Risk


24.3.2 Know What’s Missing
24.3.3 Evaluation
24.3.4 Don’t Surf Every Wave
24.3.5 People

24.4 The Value of Values


Chapter 25 Profit Centers vs Cost Centers

25.1 A Disclaimer
25.2 Definitions
25.3 “Close to The Money”
25.4 Profit Center, Cost Center
25.5 The Developer’s Choice
Chapter 26 Career Ladders

26.1 When and Why to Ladder


26.2 Our Approach
26.3 What Companies Want

26.3.1 Most Junior


26.3.2 Most Senior
26.3.3 Other Dimensions

26.4 Individual Company Ladders


Chapter 27 Intro to Tech Strategy

27.1 Tech Strategy and Your Career


27.2 Software is Eating the World
27.3 Horizontal vs Vertical
27.4 Business Models

27.4.1 Agencies
27.4.2 Advertising
27.4.3 Subscription
27.4.4 Marketplaces
27.4.5 Gaming

27.5 Platforms and Aggregators

27.5.1 Aggregators
27.5.2 Platforms vs Aggregators

27.6 Other Strategic Perspectives


Chapter 28 Strategic Awareness

28.1 Concern vs Influence


28.2 Levels of Concern
28.3 Bias to Action
28.4 Understanding Technology Adoption

28.4.1 The Rogers Curve


28.4.2 Crossing the Chasm
28.4.3 The Gartner Hype Cycle
28.4.4 The Perez Surge Cycle

28.5 Technology Value Chain

28.5.1 The Law of Complements


28.5.2 Wardley Maps

28.6 Systems Thinking


28.7 Other Strategies for Strategic Awareness
Chapter 29 Megatrends

29.1 Definitions
29.2 Examples
29.3 Building Your List of Megatrends
Chapter 30 Part IV: Tactics
Chapter 31 Negotiating

31.1 General Advice


31.2 Summaries of Experts

31.2.1 Patrick McKenzie on Salary Negotiation


31.2.2 Haseeb Qureshi on Ten Rules for Negotiating
31.2.3 Josh Doody on Fearless Salary Negotiation

31.3 Further Good Reads on General Negotiation


Chapter 32 Learning in Private

32.1 Improving What You Consume


32.2 Getting More Out of What You Consume
32.3 Go Meta
32.4 Further References
Chapter 33 Design for Developers in a Hurry

33.1 Spark Joy Repo


33.2 Frameworks
33.3 Layout
33.4 Typography
33.5 Color Palette
33.6 Backgrounds
33.7 Icons and Illustrations
33.8 Animations and Video
33.9 Easter Eggs
33.10 Learning Design
Chapter 34 Lampshading

34.1 When you’re very senior


34.2 When you’re new
34.3 Storytime!
34.4 Lampshading
34.5 The Stupid Question Safe Harbor
34.6 Advanced Lampshading
Chapter 35 Conference CFPs

35.1 Who Am I to Advise You?


35.2 Watch a lot of talks
35.3 Speak at a Meetup
35.4 Pick a Conference
35.5 Pick a Topic
35.6 Pick a Genre
35.7 Pick a Title
35.8 Write an Abstract
35.9 Building a CFP Process
35.10 Example CFPs and Peer Review
35.11 Next Steps & Recommended Reads
Chapter 36 Mise en Place Writing

36.1 Mise en Whatnow?


36.2 Writing isn’t Just Writing
36.3 Components of Pre-Writing
36.4 The Pre-Writing Workflow
36.5 The Infinite Kitchen
36.6 Writing
36.7 Improvisation is OK
36.8 Editing
Chapter 37 Side Projects

37.1 Why Side Projects?


37.2 Code-Life Balance
37.3 Project Ideas
37.4 Project Advice
37.5 Further Inspiration
Chapter 38 Developer’s Guide to Twitter

38.1 Getting Started


38.2 What Do YOU Want?
38.3 What I Want From Twitter
38.4 Your Twitter Feed
38.5 Join the Conversation
38.6 Being Helpful on the Internet
38.7 Twitter as a Second Brain
38.8 Dealing with Haters
38.9 Definitely Bad Ideas
38.10 Final thoughts
Chapter 39 Marketing Yourself (without Being a
Celebrity)

39.1 When to Use This Tactic


39.2 Introduction
39.3 You Already Know What Good Personal Marketing Is
39.4 Personal Branding

39.4.1 Picking a Personal Brand


39.4.2 Personal Anecdote Time!
39.4.3 Anything But Average
39.4.4 Brand Templates
39.4.5 Brand Manifestation
39.4.6 Consistency

39.5 You Need a Domain

39.5.1 Planting Your Flag


39.5.2 Picking A Domain
39.5.3 Claiming Your Domain
39.5.4 Give Up Freedom — For Now
39.5.5 Blogging

39.6 Marketing Your Business Value vs Your Coding Skills

39.6.1 Business Value


39.6.2 Coding Skills
39.6.3 Portfolios vs Proof of Work

39.7 Marketing Yourself in Public


39.8 Marketing Yourself at Work
39.9 Things That DO NOT MATTER
39.10 Recap
39.11 Bonus: Marketing Hacks
Chapter 40 The Operating System of You

40.1 Your “Applications”


40.2 Coding Career Habits

40.2.1 Your “Firmware”


40.2.2 Your “External Devices”
40.2.3 Your “Scheduler”
40.2.4 Your “Kernel”
40.2.5 Recap

40.3 The Emotional Journey of your Coding Career


Chapter 1
Part I: Your Coding Career
Congrats on choosing a coding career! Demand for software
engineers has never been greater, and it can be a very rewarding and
lucrative journey.

While there are many resources on how to code, from beginner to


advanced, there aren’t enough covering everything else. This book is
dedicated to solving that. It will give you principles, strategies, and
tactics for the five stages of your early coding career:

Code Newbie: Just learning to code - via a bootcamp, college,


online course, or self-teaching.
Job Hunter: Landing that first developer job!
Junior Developer: Surviving and thriving in your new job.
Junior to Senior: Getting promoted or hired as a Senior
Developer.
Senior Developer: Growing into your own as a Senior in the
industry.
and we will end with some insight into things people do
Beyond their Coding Career.

Note: we use “Developer” and “Engineer” interchangeably


in this book. Some studies suggest that you would make
about 20% more money with an “Engineer” title. I suggest
that shallow minds fixate on shallow causes. This book is
not for shallow minds.
For most people, this covers the first 4-8 years of their career as a
developer. There are, of course, many titles and stages beyond that,
but that is out of scope for this book. Our primary objective is simply
to give you as good a start as possible, with the expectation that it
will compound later into your journey.

We also focus on the coding career. The part of your career where
you are primarily expected to write code as an “Individual
Contributor”. Sometimes, coding careers end as developers move up
into management, entrepreneurship, and other “code-adjacent” roles
(Chapter 7).

1.1 Principles over Titles


The first recommendation is that you don’t take titles too
seriously.

Welcome to tech, where the roles are made up and titles


don’t matter. - Kelly Vaughn

Everyone is junior at some things, and senior at others. You don’t


magically stop needing to learn new things once you’re a Senior
Developer, and even Code Newbies can practice all of the tactics
available to the professionals.

Which is why this is the only part of the book that is linear - offering
point-in-time advice for each career stage - while the rest of the book
lets you skim and jump and revisit it over the next X years of your
coding career.

Titles do matter - mainly because that’s how salary and responsibility


get assigned. Companies establish career ladders with specific
expectations you must meet to reach each level (not always true,
especially for early stage startups). But the point remains that you
ought to keep working on your principles, strategies, and tactics
throughout your entire coding career.

1.2 Company Types


As you progress from Code Newbie to Senior Developer, you will also
have the opportunity to explore careers with different types of
company and employment situations. It’s impossible to account for
all the types that you might encounter, but here’s a quick list together
with some things you should know:

Startups (Especially before Series C): You’ll have high


autonomy and responsibility, but get ready for things to change
on a dime. It’s rare for startup stock options to actually turn into
a life-changing amount of money. The career capital you’ll gain
from doing great work at a high-growth startup is more
bankable. Process is minimal, which is either a pro or a con
depending on what you need to do your best work.
Bootstrapped Startups and Indie Hacking are increasingly
popular alternatives to VC-backed startups, emphasizing
profitability over growth.
Agencies: You’ll learn a lot by working on a diversity of
projects, often with a handoff date. This affords you a lot of
room for experimentation, especially since many projects will be
greenfield. You’ll gain experience with project/client
management, but sometimes at the cost of long hours and high
stress. Work can also be sensitive to economic cycles. Starting
pay can be very low (and rates differ a lot by country – see this
agency survey), until you start landing high-profile clients,
winning industry awards, and building a reputation that can get
you 5x to 10x the average. Freelancing and Consulting are
similar to this, on an individual scale.
BigCos: You’ll have high pay and high impact (often impacting
millions of users). You’ll encounter unique problems that show
up only at massive scale. People often talk about FAANG, but of
course there are thousands of great tech employers that are no
longer startups. Some BigCo/enterprise tech work involves
working with older technology, which is also why it pays well.
You’ll learn to evolve legacy code to clear technical debt, while
still maintaining a great experience for users throughout.
BigCos can be great for juniors as they offer more support and
structure. Some people thrive with the scale; others dread being
a cog in the wheel.

Whenever you change jobs you will have a chance to jump between
one of these types of companies (of course, there are more types than
I listed). It’s important to learn what kind of environment you thrive
in - finding your best fit is going to be more rewarding for
your career in the long-term than chasing pay or prestige in the
short-term.

Tip: See the Intro to Tech Strategy Chapter (Chapter 27)


for a deeper discussion of tech business models and how
that translates to what you work on.

1.3 Career Layers


The third dimension you will want to explore is where in the stack
you want to work.

Here we can explore a mental model inspired by the OSI Model. The
OSI Model provides a mental framework for how different
technologies like HTTP, TCP, IP, and 802.11 come together, each
solving their assigned problems, and (for the most part) seamlessly
interoperating (with the help of some Narrow Waists).

You can divvy up the universe of software jobs along the same lines.
I always think of how the value chain for humans is kind of similar to
our underlying tech. From the folks who write firmware that
provides raw Hardware capability, all the way up to End Users who
create software with software, and all the interesting software jobs in
between.

So without further ado:


My focus here is on people who are primarily expected to code for
their jobs. If you’re a founder or a PM or a developer advocate, you
might code every so often, but during that time you’ll be acting in a
coding role rather than doing it as your main job.

Because I primarily work at the App layer, you may see some bias
due to my lack of knowledge. For example, there are other guides to
careers in Data Science and Cybersecurity. I’ve reviewed many and
the advice in this book represents what stuck.
Descriptively, I see the primary axis of software jobs as adding value
from Machines all the way to End Users:

At the lowest level, we have people who work with Hardware.


They still code, but their task is to design the chips, firmware,
and operating systems to expose raw Capability for us hungry,
hungry software devs to eat up.
Then, we have the Cloud/Datacenter people, who are
technically not required but a practical reality these days. Their
main job is Availability, often with Distributed Systems, which
also helps offer easy Scalability. They basically fight CAP
theorem for a living. Arguably you could view them and other
Cloud Distros as providing distributed “virtual hardware” for the
rest of us devs to run on.
Next, we have people who make Runtimes. This includes
Browser Devs, Language Designers, and Framework, Tooling, or
Infrastructure Devs that are basically responsible for all the
Developer Experience we enjoy.

The three layers we just covered I call Platform


development. They don’t have anything specific to do with
the Products that the next three layers create, but they do
make it all possible.

Backend developers create internal/private/non-user-facing


Services that encode the secure Business Logic of the apps.
I’ve taken a rather expansive definition here, including Machine
Learning, Research, Process Automation, Security, Compliance,
and Billing. The idea is that UX isn’t their focus - it’s more about
the functionality.
Then, we have developers who work on Applications of all the
prior layers. This is everyone else who codes - from Game Devs
to Plugin Devs, to Sales/Support engineers and Mobile/Web
Devs. They are uniquely responsible for creating a great user
experience.
Lastly, we have end users who create software with the software
we give them. End User Computing lets users create
software, but without traditional coding. This includes everyone
else from Business Analysts working in Excel to productivity
geeks setting up #NoCode automation.

The assertion is that these jobs get more numerous as we get closer
to users, who are more diverse and therefore require more
customization. Work is also “further away from the metal.” When we
code at higher layers, we’re increasingly encouraged to pretend that
the resource constraints of the below layers don’t exist (for developer
experience). This is, of course, a leaky abstraction – but it works a
lot of the time.

Some parts of the software industry are so self-contained that they


don’t match this model at all. For example, with gaming you’re often
working with game AI, procedural generation, physics engines, and
massively multiplayer realtime backends – none of which are
common tasks in any other stack. At the end of the day, software
jobs appear whenever there is money to be made writing software.
And they don’t have to conform to any layer model – think of this as
an illustration rather than a precise map.

1.4 Diversity
Often the only people who ignore diversity issues in a career
discussion are cishet white men. For everyone else, it colors every
job, every interaction, every moment of self-doubt. Regardless of
your political persuasion, you should recognize that tech
objectively does a worse job at diversity than any other well paid
white collar industry. This isn’t mere perception – it is greatly
statistically significant by any measure.
Today only 17% of Computer Science majors are women. We do
worse than medicine, law, and the hard sciences! This effect worsens
once you get into the industry - industry surveys of programmers
regularly come in around 8-12% non-male. This means there is
40% average attrition of non-male coders relative to male ones,
which is indicative of problems in the industry and a problem in
itself for diversity in senior ranks. You will see this happen in your
own career journey.

It wasn’t always like this. You can see in the chart we used to have
twice as many women in the college pipeline in the 1980’s. The first
professional programmers in the 1940s were female. The first
compiler was created by Rear Admiral Grace Hopper. Before Charles
Babbage’s Analytical Engine even existed, Ada Lovelace was
programming for it.
Programming ability isn’t limited by gender or race or sexual
orientation or age. It is far more likely to be human factors – the
non-code parts of coding careers – that systematically alienate our
fellow humans from this lucrative, powerful field.

If you are not part of the underrepresented minority in tech, have the
compassion and empathy to recognize that this problem is an
inescapable fact of life for those who are. First, do no harm:
Recognize when you are contributing to the problem and stop. Then
be an ally by calling it out in others and lending your privilege.

If you are part of the underrepresented minority, know that you are
desperately needed and if your current company doesn’t value you,
there are lots of other inclusive companies that would love to work
with you. There are also extensive support networks by your peers,
from dedicated industry groups like Women in Games International
to language groups like PyLadies to framework groups like Front-
End Foxes to more generalist networking and mentorship groups
like BlacksInTechnology, Latina Geeks, and Lesbians Who Tech. You
can even find others with the same background as you like
MotherCoders and VetsinTech. These aren’t mere toothless social
groups – before you join a company or collaborate with someone, it
can be very helpful to do a quick reference check, or you might hear
about a perfect job opportunity before anyone else because the hiring
manager values reaching out to communities like yours, or you can
just ask for help from people who’ve been in your exact shoes.

Tech’s diversity problem is the world’s diversity problem. Because so


much of our world is now run and intermediated by software, it is
increasingly important that the people who design and code that
software have a visceral empathy with their users. It starts with
making sure representative voices are heard.

1.5 The Five Career Stages


So now that we know about company types, career layers, diversity,
and not to take titles too seriously… Let’s talk about titles.

Here I will introduce you to each of the stages we target in this book.
I will offer tips on things you can try, and bold Principles,
Strategies and Tactics that you should check out depending on
which stage you are at.

Code Newbies (Chapter 2)


Job Hunt (Chapter 3)
Junior Dev (Chapter 4)
Junior to Senior (Chapter 5)
Senior Dev (Chapter 6)
Beyond your Coding Career (Chapter 7)
Chapter 2
Code Newbies
As a Code Newbie, your chief job is building your raw skills. You
can be taking a college course, or a paid course online, or a paid
bootcamp (like I did), or using great free resources like
FreeCodeCamp, FrontendMasters, TreeHouse, The Odin Project,
Codecademy, or the “University of YouTube” (like I also did).

Coding careers are very diverse; you don’t have to do web


development, there are other career paths like Data Science,
Cybersecurity, Cloud, Dev Ops or Mobile Dev. That said, web
development is by far the most popular, and you’ll probably have to
learn a bit of it no matter what you do.

The primary artifact you will produce is your portfolio, or as I call it


in the Marketing Yourself chapter (Chapter 39), “Proof of Work”
(which can include a blog). You basically want to demonstrate
passion and engagement with your chosen skill, and Build Cool
Shit.

But there’s a lot else you can do on your way there:

Learn the Lingo: You are the average of the five people you
spend the most time with - so spend your time with other
developers by plugging into talks and podcasts! I keep a list of
awesome developer podcasts you can use, or of course you can
find your own. Don’t like podcasts? Be a fly on the wall on
Twitter! You can watch senior devs talk amongst themselves for
free, and catch up by googling and asking for clarifications. This
will serve you well in interviews too - talking the talk helps you
walk the walk. Laurie Barth calls this Talk like an Engineer!
Immersion is great but be careful not to confuse surface
familiarity of things with real knowledge of them - this is just
step 1 on a long journey toward mastery.
Make up Levels for Yourself: When you are learning on
your own (especially after your formal learning phase), it can
feel a little directionless since there is an infinite number of
things you could be learning. The counter for this is gamifying
learning - when I was learning JavaScript, I set goals for myself
to make a clone of jQuery, then to get good with React and
Redux, then to be able to make a Hacker News clone. You can
do the same for whatever you’re focusing on! Some learning
platforms even award you points and trophies for completing
challenges and streaks. Yes, it’s a little corny. But lean into it!
Explore Paid Learning: Because there is so much free
content available, it can be tempting to learn entirely free.
However, in my experience, the level of curation and quality of
paid content is just so much better that it is worth it. If you can
afford it, look into the (reputable!) paid learning courses in
your community. For example Egghead, Frontend Masters,
Codecademy, ACloudGuru and Pluralsight. As for Udemy - just
be aware that Udemy has a very mixed reputation. Stick to the
top most reviewed instructors.
Make a Public Commitment: Having a public commitment
helps you build your own team of cheerleaders and community.
This helps give you the feedback you need to not feel alone in
your journey, and it forces you to keep going when you might
otherwise have given up on yourself. Alexander Kallaway’s 100
Days of Code is a popular commitment, while No Zero Days is
what worked for me. If you’re uncomfortable in public, you can
also keep a private learning journal – anything outside yourself
works, so long as it keeps you accountable.
Find a Community: You don’t have to make commitments to
get community - CodeNewbies, FreeCodeCamp, DEV,
CareerKarma and CodingBlocks are great, welcoming
communities that keep you company as you learn. A bootcamp
can be a great community, and you can even find free meetups
like Codebar to learn in person, or virtual mentors via Emma
Bostian’s CodingCoach. If you belong to an underrepresented
minority in tech, don’t forget that there are communities and
organizations formed specifically to help people like you, often
with local chapters that can give you the mentors and friends
you need to find your place in tech (yes, you belong here, and
don’t let anyone tell you otherwise).
Teach To Learn: If you can find a group of peers, pick a topic
and offer to teach it to them. You only find out all the things you
didn’t know about a topic when you start preparing to teach it,
and then have to answer all the questions you didn’t think to
ask. I did this very early on with React, and it was stressful but
highly beneficial for me!
Cover Your Bases: Developer jobs aren’t 100% about coding
new features all the time. Some might say they’re not even
about coding the majority of the time! There are a lot of coding-
adjacent things that developers do that you’ll want to learn
about. You should be familiar with (or at least have an opinion
on) everything in the Joel test, which includes source control,
code review, and testing. Have some familiarity with the Testing
Trophy or Testing Honeycomb and understand how to
implement it in your language’s tools. While asking “What
happens when you type Google.com into the browser?” is now a
little dated, you should still know it in some detail because it
demonstrates that you know how the Internet works. This
“metacoding” skillset is so important that MIT has even started
teaching this as “the Missing Semester.” In JavaScript, for
example, you’ll want to have some basic familiarity with tools
like Webpack, ESLint, PostCSS, and Prettier. While you’re
mostly learning to code by yourself, most developers work in
teams. One way to gain “team” experience for free is to
contribute to open source!
Start Contributing to Open Source: Many open source
projects are very beginner friendly, and you don’t even have to
start off contributing code. In fact, it may not be the best idea to
start by contributing code to large projects like Node or React,
despite the bragging rights that might entail. It might be better
to start with a smaller library you use, or to help improve docs.
This gets you involved with the basic mechanics of open source
without needing you to catch up on a lot of context you may be
missing. Since most open source projects are in dire need of
good contributors, you’ll be welcomed with open arms if you
show a positive attitude and an understanding of what they’re
looking for. Check out First Timers Only for projects that
specifically reserve issues for first timers!

There are a lot of roadmaps like these that people write to chart out
what’s available, but they can often feed impostor syndrome more
than help. Remember that very few technologies are actually
mandatory, and even the authors of the roadmaps don’t know
everything they list on them. They’re just maps; you don’t have to
visit every point on them.

If you are self-teaching, some folks take the “hard” mode and insist
on covering a full computer science curriculum. You can find good
paths for these at TeachYourSelfCS, Open Source Society University
and Scott Young’s MIT Challenge. However, note that this covers a
lot of theory that is rarely (if at all) used on the job for the majority of
product developers (If you recall our Coding Career Layers from
Chapter 1, we distinguish between product and platform developers.
It stands to reason that different developer types require different
knowledge!). You do have the choice to get a great developer job
without knowing a lot of academic computer science knowledge, and
then fill in your gaps while you work.

If you’re stressed out by the sheer number of technologies you feel


like you have to learn, you’re not alone. For frontend developers,
there’s How it feels to learn JavaScript, while backend developers
have Docker: It’s the Future. Every now and then you’ll read
something in the Why we at $FAMOUS_COMPANY Switched to
$HYPED_TECHNOLOGY genre and feel the fear of missing out.
This is completely normal. It’s good to stay informed, but when
it comes to learning, focus on what you need to make the things
you want to make, and to get the jobs you want.
Chapter 3
The (First) Job Hunt
There are plenty of advice articles (and workshops) out there about
landing your first developer job. I don’t want to repeat them - you
can easily google an endless supply of them for free. But I also
cannot ignore that this is the most critical part of your initial journey.

If I don’t help you get past this stage, there is no coding career!

So I’ll assume you’ve read the common advice out there. My task is
tell you what they don’t.

In general, you should focus on systems (what you are doing to get
the job) rather than goals (getting the job). The former is within
your control, the latter is not. By overly focusing on goals, you might
get a developer job, but it may be the wrong job for you.

3.1 Do the Math


Recognize that the job search is highly random. There really is not
that much separating you from an average Google programmer - as
Steve Yegge has noted, there is a very high false negative rate at
interviews at BigCos, mainly because we are just very bad at
interviewing.

But the great thing about jobs is you only need one.

The probability of getting 1 job is higher if you apply to more things.


I know this sounds obvious but when you get discouraged (and I
have felt it - in my initial job search, I spent a whole week not doing
any applications because I didn’t feel motivated) you have to
remember to Keep. Things. Moving.

The common framing of this is that it’s a “numbers game”. But


people don’t quantify how much just doing more applications does
for you - this is actually an applied form of Birthday Problem, which
is GREAT for you!

If I told you that you have a 4% chance of getting an offer


from any application, that might seem dishearteningly low.
But mathematically that means that 50 such
applications will give you an 87% chance of getting
at least one job offer. - Haseeb Qureshi

3.2 Do the Work


However spamming 50 applications a week is also not great. Beyond
the demotivating, soul sucking aspect of this, blindly taking the first
job that comes along can be harmful. Your first dev job will help you
build expertise and reputation for your next job. If you end up hating
your first job you may find it a lot harder to get onto a different
career track. This is called path dependence – if you’re trying to
change careers, you have likely already felt this pain.

Instead, try to figure out the intersection of what you like, what you
can be good at, and what the world values (Preferably, the world is -
increasingly- valuing this thing so you have a tailwind behind you -
see the Strategy section of this book). You are most likely to get
hired, be valued, and love your work when you find the company(ies)
that closest match those three things.
The obvious problem with this generic advice when you have no
experience is: you don’t really know what you like or are good at.

So: Talk.

Talk to alums of your school or bootcamp. Talk to friends. Ask for


intros, then Talk to friends of friends. Ask for more intros, then
Talk to friends of friends of friends. Talk to people at meetups and
coffee chats. Listen to podcasts (here is a list of awesome dev
podcasts). Chat on Reddit, Slack communities, Twitter.

THIS is why you network. Not with the sole intention of “Hey
can you put me in as a referral if I buy you a coffee?”. Rather, you
truly want to find out what people really do, what people think of the
industry and their company, and where in the Coding Career
Layers you could fit. People like to talk about themselves. Don’t ask
for a job, or a referral (unless they bring it up) - if you are genuinely
curious they’ll bring it up themselves and it will be their idea.

Your goal is to have fewer companies to apply to, but to have


REALLY FREAKING GOOD reasons for each company because
you’ve done your homework. This way, when you are asked “Why do
you want the job?”, you have a reason. (Lacking a good answer for
this has ended presidential campaigns in the past!) When you need
to write a cover letter, the words flow from you instead of being
forced. When you meet your interviewer (and future boss) face to
face, you won’t need to fake interest.

To give you my personal math, in my initial job search I only applied


to nine companies, got to final interviews at three, got two offers, and
took the highest one. Others applied between 200 to 300 times!
Everyone’s story is different, though, you will have to decide what
strategy fits you.
3.3 Staying Motivated While You
Search
Use social pressure to keep you motivated even when you lose
motivation. Do a weekly standup with a small group of friends. Go
around and say what you did that week and what results you’ve had,
then your plans for next week. Humans are social animals. Exploit
your instinct to live up to what you said you would do by saying what
you will do to people you like. Bonus if they’re going through the
same thing at the same time.

Listening to podcast interviews of how people broke into tech can be


hugely motivational. It helps you realize there are thousands of
people going through what you are going through right now. The
backlogs of CodeNewbie, FreeCodeCamp and Breaking Into Startups
podcasts were particularly helpful for me going through this journey.

Time Splits are important. You don’t need to spend 100% of your
job hunt literally hunting for jobs. Here’s a quick breakdown of what
worked for me:

2-3 hours of Algorithm practice (arguably, algo questions


are going away for job screens, but at some companies they are a
rite of passage and you don’t want to lose a great opportunity
just because you didn’t cover your bases)
1-2 hours of Job Opp finding and emailing. There are two
main sources of job opportunities – either you find something
on a job board, or you hear about an opportunity from your
personal and social network. Many sites have Job Boards, from
Hacker News to CodePen to StackOverflow. If you belong to an
underrepresented minority, don’t forget dedicated boards like
POCIT Jobs, Include.io, Wallbreakers, Ada’s List, Hire Tech
Ladies, Diversify Tech Co, YSYS, and Tech Talent Charter. Put
everything into a tracker like Asana or Trello. Keep juggling
those balls. Don’t rely on your own memory for deadlines.
Track them, set alerts.
2-3 hours of structured learning - e.g. through video
courses or reading technical books from cover to cover.
Rest of your time: Build a Side Project. Set a reasonable
deadline (1 week or 1 month) and then just build your idea as
best as you can by that deadline. Resist the urge to perfect it.
Just get it to launch, then get feedback. Build fun stuff, or
explorations, or clones (see Chapter 10 for why Cloning Open
Source Apps is a great way to learn). Still don’t know what to
build? Try JavaScript 30 or Just-Build-Websites. We discuss
side projects in greater detail in Chapter 37.
Optionally, Teach. Livestream yourself on Twitch or do a
meetup talk. In particular, try to get practice talking while
you code. This is great practice for technical interviews.

3.4 Getting the Interview


Recruiters. Recruitment agencies vary wildly in quality, and their
usefulness varies from location to location. Keep in mind that you
are a product to them – their business model is to throw as many
viable bodies at their client as acceptable in the hope one sticks. If
they have a special deal to source candidates for an employer, this
might be a good thing, but often you will have recruiters that do cold
pitches with you as the material. In some locations, tech recruiters
are the norm for how you land your first job. In others, they are total
wastes of time. Ask around to figure out how your local tech scene
works.

Portfolios. You don’t need an all singing, all dancing portfolio


page. You don’t need a verdant green commit history. People barely
look at that. They don’t have time. You just have to demonstrate
that you’ve Done Cool Shit and, optionally, Covered Your
Bases. If your work is less visual in nature, just have an active blog.
It’s more about instantly verifiable Proof of Work. (More in
Marketing Yourself, Chapter 39) One exception - Design/UX
positions strongly benefit from great portfolios.

For folks worried about their contributions… No one cares!


You can impress most hiring managers with only 3
contribs: 1) Something simple, built flawlessly. Seriously.
Like 1 class, or a single js file. 2) Something complete. A
small app / site / lib. Tests. Docs. 3) Something with a
story (my fave!) Could be a single line of code. - Mekka
Okereke

Resumes. You do need to be able to talk well about whatever you


put on your resume so make sure that everything on there is legit.
Keep it one page, use this template for ideas. Use Canva Resume
templates to make it visually interesting. For whatever reason,
interviewers often print out your resume and bring it to the interview
and then stare at it instead of talking to you like a normal human
being. Have 2–3 different versions of your resume prepared to tell
the story that you want to tell. Ditto your cold email draft, or self
intro, or cover letter. Learn from modern internet advertising:
MORE TARGETING IS ALWAYS GOOD.

Cover Letters. A cover letter shows that you know what the job is
about and have taken the time to personalize your pitch. A good
cover letter makes reviewers sit up and pay attention – sometimes
this calls for creative measures. Cover letters can be componentized:

Write three different forms of self introduction


Write a middle part that directly responds to line items in the
job ad
Write a few boilerplatey endings
Play mix and match for each company, matching tone and
relevance of your background to the job in question.
If you find yourself writing too many custom cover letters, this is a
hint that you may be casting your net too wide and you may not be
very sure what you want. (It’s also exhausting!)

Industry Certifications. The harder it is to get a certification, the


more valuable it is. Kelsey Hightower attributes his big break to the
CompTIA A+ certification, which takes at least a year of
study/experience. Cisco’s CCNA takes a month and is well
recognized for sysadmin/network engineers. The Cybersecurity field
has equivalent certifications with CompTIA, EC-Council and GSEC.
The AWS Cloud Practitioner certificate takes up to two months, but
it is enough for people to recommend you based on it. It
demonstrates dedication, and serves as a talking point and
understood base of knowledge. Note that no equivalent certificate
exists for frontend development.

Networking. Don’t be shy – Everybody should know that you are


job hunting! Friends LOVE helping their friends get jobs! Especially
if drinks are on you. Head to meetups and conferences – you might
run into someone who can give you a referral, or even hiring
managers who specifically go to these events to find people like you!
Put the fact that you are looking on your site, LinkedIn, and Twitter
bio. In particular, people are very supportive on Twitter, and I’ve
seen junior developers get jobs with a single “I’m Looking! Here’s
What I Do!” tweet. Use what already works and have a good tweet-
sized pitch of yourself – see threads like this for inspiration. Social
Media can be great for introverts, because you don’t need to rely on
face-to-face realtime conversation to start your jobseeking.

For my first job I applied to two jobs, and got one offer.
The one I got the offer for I had a recommendation straight
to the CEO from a friend as well as connections with several
employees over twitter, and I made a custom website for
that company specifically for them, as well as a video of a
skateboarding guinea pig. It was enough to stand out and
get me to the top of the interview list. - Jeff Escalante

Mock Interviews. You can get over a lot of nerves by just having a
few friends (or a professional) put you through some mock
interviews. You can even find some videos and podcasts that coach
you through a mock interview. Remember that they’re not merely
assessing whether you can come up with the right solution, they’re
also looking for your communication skills, eagerness to learn, and
problem solving process. Some hiring managers are so open that you
can even find out the kind of questions they like to ask, based
on their own tweets and media appearances. Research them and
practice answering them.

3.5 Types of Interviews


System Design Interviews. You won’t get a ton of this as a
junior, and especially not for frontend roles. But it will still be
rewarding to read through HiredInTech’s guide, High Scalability’s
top posts and checking out the System Design repo. You’re more
likely to actually need this information when you get to a Senior
level.

Algorithms. You don’t have to be an Algorithms God, but you


should know the basics - have passing familiarity with the main ideas
in Gayle McDowell’s Cracking the Coding Interview or Emma
Bostian’s De-Coding the Technical Interview Process, memorize and
be able to derive the Big O’s of sorting algorithms, and so on. Even a
Google technical interview is at most 45 minutes of coding; that is
not enough time to write a self-balancing red-black tree, and barely
enough to code up a heap sort from scratch. Just know the basics -
Byte by Byte’s list of 50 Questions is indicative of the difficulty level
of algorithm questions. Paid sites like Leetcode and Algoexpert can
help you practice.

“Pro tip: Interviewers generally want you to succeed, so


they will often give hints. Use their hints. Failure to
come up with some insight during a coding interview isn’t
always a dealbreaker. But ignoring an intentional tip
or having poor communication skills usually is.” - Dan
Abramov

Algorithm Interviews make the most sense for people doing “low
level” or “systems” programming. Data engineering and game
development in particular have a strong focus on graph algorithms,
whereas operating system and framework developers might need to
be more familiar with data structures and dynamic programming.
However, the higher up in the Coding Career Layers you are, the
less algorithm interviews matter, because you are less CPU or
memory constrained. For most App developers, the failure of
algorithm interviews to match actual work settings is well known. So
Technical Interviews have broadened a lot to assess other forms of
technical knowledge.

Technical Interviews. This topic is well covered by others, and is


very domain specific, so is out of scope for this book, but definitely
check out the Mega Interview Guide and Coding Interview
University. But the broad adage of “Make it work, make it right, and
make it fast” applies.

As you tackle the problem, it’s important to explain your thinking


process. A detailed framework you can use is the REACTO model:

Repeat the question


Come up with Examples
Outline your Approach
Code your solution
Test your Code (manually run through it if on a whiteboard)
Then, and only then, Optimize.

If you have a running environment to code in, then it may be a good


idea to do Test Driven Development for your code (flip the Testing
and Coding stage). I once specifically got an offer because I chose to
do TDD while trying to understand the question (it wasn’t a
conscious decision!).

Blind Interviews. A lot of unconscious bias happens in


interviewing. It’s an unfair reality. You can’t help how you look or
who you are or how they adjust for their own biases, but just know
that blind interviews exist that help mitigate that injustice.
Interviewing.io, Byteboard and Pramp even let you do practice
interviews anonymously and actually get hired from there.

Take-Home Projects. You can consider these as “enhanced


technical interviewing”. They are wonderful for the new developer. I
have had two job offers based off of successful take home projects.
There is a lot of freedom in how you complete these:

You can choose to go all out and risk being messy, showing how
you would work in a real project (including architecting for
scale, as well as including other niceties that they didn’t ask for,
but would in real life), with a risk of failure.
Or you could do a minimal, super clean project that just checks
all the required user stories and nothing more, and just make it
extremely well documented and tested.

The judgment call relies on what they are really hiring you to do. I
usually go for the risky option because it fits the jobs I seek. Note
that Take-Home Projects typically take between 4 hours to 2 days -
any longer and the company should be paying you.

Overcommunicate. Comment freely in your code, and in general,


find ways to demonstrate that you can communicate well. In one of
my take home projects, they set up a Slack channel to discuss my
work with me and I just constantly spammed my channel with status
updates as I did the project. They loved interacting with me through
that and gave me the offer.

Non-technical/Fit Interviews. Arrive early. Think of the most


confident person you know and channel them just for this interview.
You are on a stage. You are not just interviewing for a role, you are
playing a role. Smile. Keep eye contact. All the advice from How to
Win Friends and Influence People works here. Have your self-intro
rehearsed and in under a minute. Try to research your interviewers
beforehand. Get them to talk (Most people love talking about
themselves, and find themselves liking you more, the more they
talk).

Reverse Interviews. If someone asks if you have any questions,


ask a question. This is known as a “reverse interview”. The most
famous of this was the Joel test, which is a little outdated today. You
can consider this updated list instead. Asking good questions about
company culture can both make you look good (you are serious about
the job, and also know how to ask good questions) and also help you
make your final decision. So it makes sense to prepare these
questions beforehand!

“Convince me how you can help me, and you get into a
special shortlist that almost nobody gets into.” - Daniel
Vassallo

3.6 Outside the Interview


Contract Jobs. While you are waiting to land a full-time job, you
can also pick up some contract jobs to get some practice coding for
money. A lot of people got their start doing projects for friends or
relatives - a site for an aunt here, an app for the local cafe there - all
of it becomes relevant experience for your resume. There are also
sites that connect you to short term jobs, like Upwork or Toptal, but
you may have a tougher go of it as a newer programmer.

Apprenticeships. Some more well known companies actively run


internship and apprenticeship programs, including programs for
people from nontraditional backgrounds. Treehouse offers
apprenticeships with name-brand employers like Airbnb and Nike.
If you are eligible for college in Canada, apply for Shopify’s
Dev Degree program. Major League Hacking does fellowships
with GitHub, AWS, Facebook, and more. Many people have landed a
1 year Google Brain fellowship after spending a year going through
Fast.ai. For underrepresented populations in tech, organizations like
Outreachy, CodePlatoon, and Code2040 can help directly. Indians
have Internshala.

Open Source. The bar for getting involved in open source is


hilariously low compared to getting hired at companies that depend
on the same open source. “Open Source Hiring” is mostly just a
matter of who consistently shows up. You can quite easily become a
maintainer of a core ecosystem project with a few months of diligent
contributions. This then becomes an impressive resume point at
every company that uses that project.

“Contributing meaningfully to a open source thing we use =


instant interview! That’s obviously not the only way to
display value, but it’s one of the great ones to demonstrate:
aptitude in our tech, ability to communicate & work well
with others, and love of open source!” - Josh Goldberg

Get your foot in the door: If after all you’ve tried, you’re still not
getting anywhere, remember that you have other skills to offer apart
from your coding. It is much better to spend a year working in a
tech-adjacent, nontechnical job, then internally transfer into a
technical role, than it is to spend a year sending out resumes and
getting doors slammed in your face. Plenty of companies want to
hire smart, motivated, technical people for support, documentation,
project manager, and sales support roles. Look to organizations like
Digital Project Masters, Write the Docs, and Support Drive for
answers. Warning: I am not suggesting that you should expect to
waltz in. These are specialized roles and you will have to compete
with trained professionals doing these jobs. However, your coding
ability should be a plus in landing these roles.

Once you’re in, nobody will object to you doing a little extra coding
on the side - there are always some issues to pick up, always some
internal tooling that could be better. Great companies will even see
the value in paying to help train you. You can become a professional
developer by sheer force of will.

You can find many of these examples of High Agency outside of tech:

Sidney Weinberg started at Goldman Sachs as a janitor’s


assistant before getting a break as a trader and rising to CEO.
Helen Gurley Brown started as a secretary at an ad agency
before her writing skills took her all the way to editor-in-chief of
Cosmopolitan.
Simon Cowell started in the literal mailroom of EMI Records
before becoming the face of American Idol.

All of them started somewhere. The same is true for you. If they
aren’t letting you in the front door, go round the back.

Once the offers start coming in, you’re almost done! In my opinion,
negotiation isn’t that important at this stage. You’re trying to
optimize for the employer that will help you grow the most,
not get the highest amount of money in the short term. You can get
your millions later. It’s not unheard of, but you’d be hard pressed to
instigate a bidding war over you for your first job. Just make sure
that you know your worth and get at least your market rate (see
Negotiation, Chapter 31), and don’t be afraid to ask for the things
you really need, within reason.
Chapter 4
Junior Developer
First, welcome to your new life! Ask questions! Find a
work buddy with whom you feel comfortable asking any
tech question. Never let anyone make you feel bad asking a
question - there are no dumb questions. Ask a lot. Draw
diagrams. Read code. Reassert your assumptions.
Breathe. — Scott Hanselman

Barring toxic workplaces, most employers who knowingly hire junior


or entry-level developers know what they’re signing up for - giving
you all the training and support you need to succeed in your new
job! In fact, a (rare) few employers actually prefer hiring juniors,
because they come without preconceived notions and are moldable
to their methodology.

4.1 Finding Your Groove


Your job as a junior developer is to build competence and ability
to execute. It’s more important that you ask good questions
than that you always have answers. Over time, you will learn to have
an informed opinion that your employers rely on.

This is your time to not know anything. Better you ask now
than a year from now. Say “I don’t know” or “Can you elaborate what
you mean?” frequently. Take “My door is open” literally. Indulge
your curiosity. Ask questions the smart way. They have to teach you
- in fact, some senior developers are evaluated on their ability to
explain things simply, and to mentor juniors. Return the favor by
taking lessons to heart.

See Lampshading (Chapter 34) for more tips on how to


turn Ignorance to Power!

A powerful and subtle way of asking for help is asking to pair


program with your mentors and peers. It may feel awkward at first,
but there are always subtle tips and tricks to pick up from closely
watching how your coworkers solve problems, and they can
understand where you make mistakes and give more context than
normally available in a code review. Knowledge transfer by osmosis
is incredibly powerful and productive. This practice is so beneficial
that some companies (like Pivotal) have adopted the policy of always
pair programming - as part of an Extreme Programming practice.
The top two engineers at Google - Jeff Dean and Sanjay Ghemawat -
paired all the way from their time at DEC to creating MapReduce and
TensorFlow. You don’t have to go that far, but in general most junior
developers benefit tremendously from “pairing” with colleagues, and
you should request pair sessions if your company doesn’t yet make it
a norm.

Once you have a good sense of how your coworkers think and work,
you can actually just start “emulating” them in your head. When
approaching a task, you can ask, “What would $COWORKER do?” At
a prior job, we had a great code review feedback grading system, but
I found that we could even reduce the latency of code reviews by pre-
emptively reviewing my own code with concerns that coworkers were
likely to raise. If your team wants more ideas for effective code
review, Google’s Code Review guidelines are public. As you gain
more experience, you should also review your old work and
think about how you can comment, document, and design your code
better for your own future readability and extensibility.
Work on your problem solving skills, and understand that we
all have struggled like you are right now. Take some time to learn
how to use a debugger. Debuggers are quite beneficial when
navigating new, undocumented or poorly documented codebases, or
to debug weird issues. Do not give up if Stack Overflow or an issue
on GitHub doesn’t have an answer. Sometimes all you need to solve
your problem is taking a short break or trying to explain it to a
rubber duck!

Understand how to help them help you. Saying “I am stuck,


but I have tried X, Y, and Z. Do you have any pointers?” to your lead
is much better than saying “This is beyond me.” When writing up an
issue or bug report, help them help you by writing a good title,
providing key details upfront, including error messages and
environment/package versions without asking, providing a minimal
reproduction of your issue, and explaining what you’ve tried and
what you expected. If screenshots speak a thousand words, then
recording gifs and quick explainer videos can speak volumes. See
StackOverflow’s guide on “How do I ask a good question?” for more.

A few developers fall prey to the opposite problem - instead of


lacking confidence, they assume too much confidence. The Dunning-
Kruger effect is real - remember that you don’t know what you don’t
know. It’s easy to come in and feel like everyone before you were
idiots, everything is unacceptable technical debt, and you know how
to fix everything in theory. Chesterton’s Fence reminds us that when
confronting things we don’t understand, we should understand the
reasoning behind them first. Don’t fall in love with your code, don’t
fall in love with your solutions. You might read Clean Code and want
to apply it to everything, only to find that it’s not helpful in the real
world.

You will have to learn a lot from your senior colleagues, while at the
same time understanding that they can be wrong too. I once had a
boss tell me “React is object oriented because it uses classes” and
realized how poorly he understood React. You will need to develop
the judgement, understanding, and persuasive skill to navigate these
confusing early days.

4.2 Making Mistakes


You will screw up, royally. It’s a matter of when, not if. It’s okay.
You’ll survive. We have all been there.

It’s not your job to never make mistakes. It’s the job of your seniors
and managers to ensure that both you and the company can recover
from any mistakes you make. One Junior Software Developer
accidentally destroyed their company’s production database
on the first day of the job, and was told by the CTO that there
would be legal implications. Read the story and all the replies from
people who have caused similar incidents. They lived to tell the tale.

A non-exhaustive list of mistakes that senior developers have made:

Instagram DDOSed itself on the day of its launch because they


forgot a favicon
Someone at Pixar ran rm -rf on Toy Story 2 and deleted 90%
of the movie (2 years and $100m worth of work)
Pentest against production at a bank faking $5M overnight
against customer instructions
Accidentally taking the iPhone off the Apple Online Store
Literally kicked all of Sierra Leone off the Internet during Ebola
Accidentally deleting the database while teaching someone how
not to accidentally delete the database
Mistakenly emailing 15k users every minute for 2 hours, then
repeating the mistake with the apology email
Every person saving their profile got it deleted instead
Word processor that formatted the hard drive every 1024 saves
Went to the wrong building, took down the network of
completely unrelated company
Steam, Windows, and iTunes deleted all user data.

It’s okay. You’ll survive.

“To err is human; to really foul things up requires a


computer.” - Bill Vaughan

4.3 Adding Value


As long as you’ve got your basic responsibilities down, you’re going
to want to say yes to whatever comes your way. If you bite off more
than you can chew, it is your manager/team’s responsibility to help
you out, or to step in if things are going south. At the same time,
make sure you do good work with the stuff you have committed to.
Your personal brand is ultimately the work that you do.

You might feel intimidated at doing things beyond your comfort


zone, but you’re going to have to get good at it to grow. Fight
impostor syndrome by saying “This is what I do”.

Try to be a work sink instead of a work generator. Proactively ask


managers and product owners what you can take off their plate.
Your job is to support them: when they look good, you look good.
Ryan Holiday calls this the Canvas Strategy – Harry Truman puts it
more pithily: “It is amazing what you can accomplish if you do not
care who gets the credit.” Of course, if you feel you are being
exploited, stop.

If you just wait around when you run out of things to do, you look
lazy and unmotivated. Show initiative - there are always more things
to do.
It is quite often that doing the things nobody else wants to do often
ends up making you indispensable, because A) it has to be done and
B) nobody else wants to do them. If you figure out a clever way of
doing it, you could even make a career (or startup) out of it!

Important caveat: Don’t let people take advantage of you.


Pick your projects strategically if you can (see the Strategy
section), and when you have wins, Market Yourself
internally and externally.

Tests are the most common example of this. In fact, a really great
way to start a new job is to volunteer to write tests:

There are never enough tests. There’s always something


more to test, or tests can be faster, or you can remove/replace
unhelpful tests.
Coworkers will be grateful. Tests aren’t user facing, so they
are often the place corners get cut, yet everyone understands the
value of testing.
Learn the codebase. To test the code, you’ll have to
understand where to test the code. It’s an art, not a science - If
you blanket the codebase in unit tests, you’ll have a lot of
superficial code coverage, but also a lot to refactor when any
minor detail is changed, while also duplicating a lot of
framework tests. The prevailing advice is to “Write tests. Not
too many. Mostly integration.”, after the famous Michael Pollan
quote.
You can’t break anything - in fact quite the opposite - tests
make code more resilient!
You will learn things you didn’t know about how your
product works. When you interact with the product, you only
see what a user like you sees. When you look at the code, you
will see all the edge cases that are addressed, and the ugly, hacky
code that made it happen!
People have used this strategy at Netflix, Ionic, PayTM and more to
get great starts at their companies, and you should too.

Your code only has value in the context of the business you work in.
Understand the product end-to-end as an end-user. Do not assume
things, ask questions and get things cleared when in doubt.

Ask for what you want. As you gain better knowledge of your
company’s strategic priorities, complemented by better self
knowledge of what you prefer and excel in, you can start to go from
reactive to proactive in your project choice. The job you have
right now doesn’t have to be the career you end up with, and it is
much easier to switch focuses internally than as a job seeker.
Actively seek out cross functional exposure to understand how other
developers in your company work, and put yourself in the path of key
projects that will have major impact at your company. Here are
some other career development prompts you can use in 1-on-1’s with
your manager.

4.4 Growing Your Knowledge


You don’t stop learning just because you’ve landed your first job.
You should continue with all the learning you did before but never
finished! Now that you have some financial stability, you have the
luxury of time to fill in gaps in your knowledge:

Read technical books cover to cover. In a world of tweets and


content-light blogposts, books are an oasis of expertise in the
desert of serious technical discussion. Beware the “Tutorial
Trap” - endlessly going through tutorial after tutorial. Go deep
on a few important things. If you feel like you want to patch
some holes in your CS knowledge, get The Imposter’s
Handbook, which covers everything from Compilers to Lambda
Calculus, or check out TeachYourselfCS.
Read framework/library source code. You can learn a lot by
comparing experts’ code to yours - look for the intentional
differences from what is normally taught in tutorials, and ask
why they exist.
Learn more languages/frameworks. Exposure therapy works
when learning to Bet on Technologies! (Chapter 24)
Learn the intellectual history of all the tools you use - what
existed before? What led to their creation? Who created them?
What are they doing now? Know Your Tools (Chapter 11).
In fact, start following People over Projects. Trace their past
and their mentors. What are they working on today? Pick up
what they put down (Chapter 19).
Continue building Useful Side Projects (Chapter 37).

Don’t memorize everything and trust that you can keep everything in
your head. Start making cheatsheets and repos and blogposts to
Open Source your Knowledge (Chapter 13).

You really only know when you have learned anything when you can
teach what you learn. In the process of writing and speaking, you
will discover things you thought you knew but really didn’t, but also
assemble a concentrated useful resource of everything you know
about a particular topic, that you can (and will!) pull up in future.

Ways to teach what you learn:

Do talks. At work, at meetups, to your family, to your dog, to


yourself on your own YouTube channel. I don’t care that you’re
an introvert. So am I. So are 90% of developers (I don’t know
the real number, it’s a lot). Do you think you can get away from
public speaking about technology for the rest of your career? Do
you think it will ever get easier? Do you think you will learn
faster if you just keep to yourself all day? Do talks. Speaking
forces you to have skin in the game. Any embarrassment that
results is only temporary - in fact it will drive you to be better.
Worried that your talk will suck? Don’t worry - it will! Everyone
has some amount of bad talks in them. Better to get them out
earlier (when it doesn’t matter) than later (when you don’t have
a choice). I challenge you to do 10 bad talks in a row and not
improve. Do talks.
Guest Writing for Industry Sites. You can start with
everybody-can-post community venues like Dev.to, but
eventually you want to get yourself published in selective, peer-
reviewed industry sites. For frontend developers, these are
places like CSS Tricks, Smashing Magazine, and A List Apart.
These are not only great resume items, but the work involved in
putting together a high quality article builds your knowledge
(and subsequently, your reputation) like no other. (See ways to
get paid to write in Chapter 18!)
Blog. Blogging is the ultimate form of permissionless learning -
you can Learn in Public on your own terms, under your own
domain. If you want to build a brand or domain expertise, focus
your writing on a specific topic so that people will start to
recognize your work and subscribe for updates.
Answer Questions. Believe it or not, you are limited by your
interests and your own questions. The things you don’t even
know that you don’t know. One way to get ideas for blogposts
and to learn faster than you can alone, is to answer other
people’s questions. There are an unlimited number of people
looking for help on StackOverflow, Twitter, Reddit, and in
GitHub issues. If you practice answering questions, you get
better at answering questions (Save your keystrokes! Put
frequent answers into a blogpost!), but you also start finding
questions you never thought to ask. Often, these questions will
come up in your future work. The other benefit of “being helpful
on the Internet” is that you will get noticed by the maintainers of
those communities, and recruited to help.

“When one teaches, two learn.” - Robert Heinlein


All of this learning in public will also help you build your
network. The benefits from your network compound over time, so
you might as well start early.

Finally, you want to stay sharp at doing interviews. This will not be
your last job. Look around and do interviews once a year. You have
an upper hand in everything from networking to company selection
to negotiating when your alternative is simply staying at the job you
already have.
Chapter 5
From Junior to Senior
As you become comfortable as a Junior Developer (and, if your
company has one, an intermediate level Developer/Software
Engineer), you will naturally start looking toward the next level:
Senior Developer.

What counts as a senior developer is not standardized, and everyone


has strong opinions about it. To some, it is three years at a high
growth startup. Others can take anywhere from two to eight years.
Still others say they don’t care about number of years (and may or
may not mean it).

What other people think only counts so much. What really matters is
what your company (or the other companies you interview at) looks
for in a Senior, and whether they pay you commensurate with the
market rate for Senior Developer. After all, a Senior title without the
pay is meaningless!

If you’re lucky, the company will have an Engineering Ladder where


you can see their requirements for a Senior. If not, you can check
our discussion of Engineering Ladders in the Strategy
section (Chapter 26).

Ultimately, getting that role as a Senior Developer is a two step


process:

1. Getting enough (not all) of the prerequisite skills and


accomplishments specified by the company
2. Successfully Marketing Yourself as meeting enough of those
requirements to be hired into that role
This means that you often have to act like a Senior Engineer before
you officially become one. Fortunately, this is much easier than the
chicken-and-egg problem of getting your first job - most places will
be happy to let you take on more responsibility while in your existing
role!

5.1 Acting For the Job You Want


When surveyed, developers almost universally identify a few
qualities that you should develop as you prepare for the next level:

Solid technical expertise, full command of fundamentals


Impact on your team’s work
Being able to work across other teams
Seeing the “Bigger Picture”
Communication, Communication, Communication
Mentoring others

Regardless of what your Engineering Ladder says, you will want to


practice, practice, practice these skills as much as you can. They are
just generally agreed upon qualities of a Senior Engineer that will
help you and those around you throughout your career.

Note: More on this in the Senior Dev chapter, Chapter 6

5.1.1 Technical Expertise

When it comes to your technical skills, consider how you are


progressing along the Dreyfus Model of Skill Acquisition:
In your journey so far, you have likely progressed from Novice to
Competent. As you go towards Expert in your field, you will likely
want to pay attention to the meta-learning skills - focusing on first
principles intuition (Chapter 17) when it comes to learning your
trade.

Much of your learning from Junior to Senior involves gaining tacit


knowledge. You can read all the programming books in the world,
but, by definition, you are still limited to things that people can write
down. That is explicit knowledge, and it is usually the tip of the
iceberg when it comes to everything you need to know:
Tacit knowledge in engineering is a real thing. Keep a look out for all
the lessons you don’t learn in classes or from books. To really make
your career explode, make a habit of writing them down for everyone
else (Chapter 18 - Write, A Lot!).

You aren’t alone in this journey – plenty of fellow developers have


also written down their learnings. You can only get so far learning
from your own experience – why not borrow the experiences of
others? It’s not the same as living through it yourself, but for
example, reading through publicly published postmortems can teach
you that many outages, even by the most well regarded companies,
come down to error handling, configuration, hardware, lack of
monitoring, and processes that allow human error.

5.1.2 Career Strategy


Many people define Senior Developers as “being able to see the
Bigger Picture”. Everyone agrees it’s important, but nobody quite
knows how to define it. It has something to do with how your
technical work fits in context of the business/product, or fits in the
broader architecture of the codebase, balancing both its history and
future roadmap. So try to step back from your day-to-day work every
so often and zoom out!

Before you make your big move, make sure you know what you want
and take the time to position yourself accordingly in the preceding 6-
12 months. Want to work on creating GraphQL APIs as a Senior?
Better to do it as a Junior first. The logic here is: You aren’t expected
to make that much impact as a Junior, but you certainly will as a
Senior. So it can be worth it to jockey around a little bit longer as a
Junior or Intermediate Developer, just so you are in the perfect spot
for a career-making Senior Developer role you can throw yourself
wholeheartedly into. Better yet, your company can institute formal
support for employees making internal “tours of duty”, to grow you
while keeping you!

It can help to make a list of what you’ve enjoyed in your current job.
Among your peers (you have been building your network, right?),
make a note of things that seem particularly exciting to you, and try
to get exposure to those within your company or projects. It’s a two
way street - finding out what you like and are good at, and then
positioning so that you can do even more of that.

Note: This is the subject of the entire Strategy section of


this book!

By the way - beyond just what you like to work on, you might also
take note of who you like to work with. Here’s an example from
Keavy McMinn.
5.2 Marketing Yourself as a Senior
Engineer
You may feel like you’re not fully ready yet. You haven’t checked off
all the boxes for the Senior Engineer job or promotion you’re
applying for. It doesn’t hurt to try. You don’t know if it’s
impostor syndrome talking, and even if you fail the first time, you get
priceless feedback and practice for the next time!

Remember the Dunning-Kruger effect between what you know


and what you know you don’t yet know:
People crossing from Junior to Senior are particularly likely to be at
or just coming out of the “Valley of Despair”. There’s no point on
that curve where you magically become irrefutably Senior. It’s all a
spectrum, and perhaps the only thing common among Seniors is
having recovered from both the heights and troughs of confidence vs
ability. You can ask other people how you’re doing or teach what you
know to keep some perspective.

Devs from minority backgrounds can face systematic bias (conscious


or unconscious) in their evaluation. This is both unfair and a fact of
life. A sponsor with credibility can help you a long way – if you have
trouble finding one, Mekka Okereke has a technique he calls “The
Difficulty Anchor”, which is hard work but a great strategy to win a
powerful ally.

As you start marketing yourself as a Senior Dev, you’ll want to have


your accomplishments and stories in order. Just to give you an
example, the AWS interview process involves asking you for
examples of accomplishments and interactions that demonstrate one
of their 14 Leadership Principles. Most companies may not be this
formal about it, but will have some form of “Tell me a time when
you…” question. Portfolios and Proof of Work still matter, but less
so because you can choose to lean on a lot of the production work
you contributed to as a Junior. Pay particular attention to any
quantitative results you can cite – cost savings per year, Monthly
Active User increases, Time To Interactive drops, whatever metrics
make you look good.

In particular, anything you do in public - blogging, speaking,


podcasting, making video tutorials, open source work - can help you
grow your knowledge and your network at the same time, opening up
the possibility for inbound opportunities to come to you. Remember
to fight Impostor Syndrome every step of the way!

Note: You can find more ideas in the Marketing Yourself


chapter (Chapter 39) of the Tactics section.

5.3 Junior Engineer, Senior


Engineer
For Junior Engineers who want some ideas for directions to improve,
it can be an interesting exercise to do a series of contrasting
statements. I went through a long list of Junior-to-Senior advice
online, and compiled these 30 comparisons in four categories:
Code, Learning, Behavior, Team. Please note that these are
pithy opinions, not requirements! We are all junior in some way,
senior in others. You’ll find that elements of these ideas permeate
the Principles, Tactics, and Strategies throughout this book.

5.3.1 Code

Juniors collect solutions. Seniors collect patterns.


Juniors get code working. Seniors keep code working.
Juniors deliver features. Seniors deliver outcomes.
Juniors fix bugs after they create them. Seniors create tooling to
preclude bugs.
Juniors write tests because it’s required. Seniors require writing
good tests – because they’ve seen what happens when you
don’t.
Juniors hate technical debt. Seniors have written code that
became technical debt (and know when to let it be and when to
migrate).
Juniors love to keep code DRY. Seniors Avoid Hasty
Abstractions.
Juniors try to write the best code the first time. Seniors
understand code is read, moved, copied and deleted far more
than it is written.
Juniors know how to use their tools. Seniors know when not to
use them.

5.3.2 Learning

Juniors make one-off side projects. Seniors use their side


projects daily, often to make themselves more productive at
their day job.
Juniors learn to find the right answers. Seniors learn to ask the
right questions.
Juniors know what they need to know. Seniors know what they
don’t need to know.
Juniors should absorb best practices from others. Seniors can
derive best practices from first principles and personal pain.
Juniors get stuck without docs and tutorials. Seniors aren’t
afraid to read specs and view source.
Juniors might have strongly held beliefs. Seniors have had to
change strongly held beliefs.
Juniors question themselves when they fail. Seniors know they
just need to give themselves more time and try again.
Juniors stay on top of news. Seniors keep track of trends
(especially Megatrends – Chapter 29).
Juniors try to avoid mistakes. Seniors have made them all – and
know how to recover.
Juniors laugh at software tropes. Seniors know there’s a grain of
truth in all of them.

5.3.3 Behavior

Juniors seek The Best. Seniors love the Good Enough


(Chapter 16).
Juniors should say “Yes” often. Seniors should say “No” more.
Juniors should try to do the jobs they are given. Seniors should
redesign their jobs as needed.
Juniors complain about Open Source. Seniors understand Open
Source only works thanks to contributors, not complainers.
Juniors solve problems. Seniors identify problems before they
become problems.
Juniors start from what others say. Seniors start from what they
need.
Juniors know how to build. Seniors know when to buy.
Juniors compare developer experience. Seniors look for hidden
costs in user experience and in abstraction leaks.
Juniors write as an afterthought. Seniors weigh writing as much
as coding.
Juniors leave comments. Seniors provide context.

5.3.4 Team

Juniors work within their teams. Seniors know when and how
to work across teams.
Juniors grow their own output. Seniors grow their team’s
output.
Juniors pair to learn best practices. Seniors pair to share
expertise and see things in a new light.
Juniors get roped in. Seniors get buy-in.
Juniors must earn trust. Seniors inspire trust.
Juniors seek out mentors. Seniors know how to learn from
peers.
Juniors work on improving themselves. Seniors work on
improving their team, being a force multiplier through teaching,
mentorship, and leadership.

Note that these are pithy, idealized comparisons just to get


your imagination going on ways to improve yourself. In no
way am I stating that any quality is unique to Juniors or
Seniors, or that all Seniors or all Juniors practice all these
qualities all the time.

5.4 To Stay or To Go
Finally, there’s the question of whether to angle for promotion at
your current company or to make the Senior Developer jump at a
different company. That’s a call you’ll have to make, but you will
always be better off at least interviewing at other
companies. When you have an offer in hand from another
company, you have a pretty much airtight case for promotion at
your current company.

You’ve done the job hunt before; it’ll be a lot easier this time. Beside
hunting via the regular channels (online posting, networking at
meetups and conferences), you should also be aware of new
opportunities available to you at this stage. For example, recruiters
of all stripes from in-house, third party, and venture capital will be
more receptive to your cold emails. You can also tap your
relationships formed online (via your writing or Twitter — you have
been working on those, right?) to find opportunities before they get
advertised. A warm intro of any sort beats applying via the front
door and competing with everyone else on a 5 second glance of your
resume. Finally, a big part of selling yourself as a Senior Developer is
being able to communicate your level of experience in an interview -
storytelling becomes a surprisingly big part of any senior hiring
process.

Salary bumps are well known to be higher when you move


companies - instead of a 5-10% bump, you could get a 50-400%
bump because you could join a company with a different pay scale in
a different industry at a different level in a different city. Of course
these are major life changes, but higher bumps are more common
when moving companies. There’s also the simple fact that you didn’t
have much leverage when you were a junior dev. Now, you can
actually take your time and practice some Negotiation
(Chapter 31).

You may also wish to diversify your resume. If you move from junior
to senior in the same company, you have less exposure to a variety of
projects, technologies, opinions and cultures. If you’re at an agency,
you may wish to consider moving to a startup. If you’re at a startup,
you may wish to consider a BigCo. BigCo experience can net you big
bucks at some forms of agency (including freelancing). So on and so
forth. The earlier you are in your career, the easier it will be to hop
around to figure out where you truly fit.
If you currently work at a place that doesn’t have a good developer
brand, you may wish to move to one that does, which will help boost
your network and personal brand. Few people question the technical
ability of ex-Google engineers.

Conversely, if you currently work at a place with a good brand, you


may wish to take more risk in your next gig for more personal growth
and financial upside, because the risk of failure is lower.
Chapter 6
Senior Developer
Congrats! You’ve made it as a Senior Developer!

I’m sure it feels a little different than you imagined, now that you’re
in it. Getting a job as a Senior Developer isn’t the same thing as
excelling as a Senior Developer.

It turns out that “Senior Developer” is a very broad title in this


industry. Going from “ok, this person is technically not entry level
anymore” to “anywhere else this person would be a Staff or Principal,
but we believe in a flat hierarchy and call everyone Senior, deal with
it.” It’s a little like a “passport” title. It is understood almost
everywhere, but exactly how one title translates to another between
companies is messy and case dependent.

Because I myself am somewhere on the Senior Developer spectrum, I


can’t share from personal experience how to get to the next level.
However, I can infer from advice of others, triangulate again from
Engineering Ladders, and offer some informed opinions about how
to do well. But my opinions are just that - my own, and you should
assess this chapter with more of a critical eye than others. The
further we depart from beginner territory, the more diverse and, let’s
face it, outright contradicting people’s lived experiences become.

We briefly covered a lot of the idealized qualities of a Senior


Developer in the Junior to Senior chapter (Chapter 5). This is
because you should exhibit some of these qualities before actually
getting hired as a Senior. But now that you are living the life, you
really have to exemplify these qualities. If not for your own sake,
then for your team and Juniors that look up to you.
6.1 Solutions vs Patterns
You might be familiar with the industry standard set of solutions to
common problems. You know your tools well and can wield them
effectively to solve problems you or others have seen before. The
challenge comes when you run into new problems. Problems your
tools were never designed for, under constraints and at scales
that invalidate convenient assumptions. When your tools stop
serving you, your knowledge of them does too.

Knowing how to use your tools is good, but knowing when not to use
them is better. If you define yourself by your tool (“I am a
${FRAMEWORK} programmer”) - you will try to solve every
problem with that tool. This approach leads you to either fail or
come up with unnecessarily convoluted solutions (still a failure, but
way more expensive).

To go past this, you need to understand the underlying design


patterns that inform your tools, and accept that nothing comes
truly free. When you have a wide toolkit of design patterns and a
good understanding of what they solve and what they trade off, you
will be able to repurpose tools or build your own. This knowledge
will last regardless of language, and can be reapplied at multiple
levels of your stack. It scales incredibly well and helps you learn
faster the more you learn - one of the core drivers to a
superlinear Big L. The Gang of Four wrote the book on design
patterns (see Addy Osmani’s book if you like JavaScript). But don’t
forget other foundational classics like the Dragon book on Compilers,
the Dinosaur book on Operating Systems, and Game Programming
Patterns. All your system design, algorithms and data structures
knowledge are also useful patterns - except instead of just cramming
for an interview, you actually need to use them at work!
6.2 Velocity vs Maintainability
Most people today understand both the intended spirit and
unintended consequences of “Move Fast and Break Things.”
However, what is less well understood is how tradeoffs change as
project maturity changes. When you are conducting R&D in a
small startup, you should absolutely move fast - the downside of
failure is minimal, so the value of systems and processes is low.
When you are pushing a code change to a massive infrastructure
system, one tiny mistake can cause hundreds of millions of losses in
seconds. The results get even more dire when human lives are at
stake.

What applies to project maturity also applies to developer maturity.

As a Junior, your velocity and impact is low. Your main task is to get
code working, with Seniors to catch you when you fall. Improving
your own velocity is a perfectly reasonable thing to prioritize - if
you’ve done anything that isn’t up to code standards, your Seniors
will hold you accountable.

But this luxury goes away when you become a Senior. Now you are
expected to be able to independently ship. Part of that
independence comes from trust that you will make the right
tradeoffs between velocity and maintainability. It’s less about
pushing the limits of what you can do – anyone can build systems
that are twice as complex as they can easily maintain – and more
about creating systems that last under forward assumptions.

If you don’t write maintainable software, you are just causing future
problems for yourself. So:

Instead of testing because you’re told to, you test because it’s the
only way to scale yourself. You also are much more hesitant to
write fragile tests because they cause more work than they save.
They test implementation detail and hurt migrations (more on
Migrations below). You insist that either production code be
merged in together with tests for that code, or not at all, except
under specifically enumerated emergencies.
Instead of only fixing bugs after you create them, you work to
avoid them in the first place. You lean on your past scars, and
use tooling and careful choices in everything from API design to
variable naming.
You document and comment your code. Not just for your future
self, but also for the people who take over the code when you
move on to bigger, better things.

Warning: If you fall in love with writing perfect code, your velocity
can suffer to unacceptable levels. Remember that done is better
than perfect and Good Enough is Better than Best
(Chapter 16).

However, most organizations create incentives to optimize for


velocity over maintainability. One way to tell is whether equal effort
is spent learning from and tracking mistakes as is spent shipping
features. A good first step is to establish a culture of blameless
postmortem (you can borrow AWS’ incident postmortem template as
a starting point). It’s fine to make mistakes, but it is not fine to
repeat mistakes. Critical incidents should act as brakes on velocity.
Don’t view this as a step backwards – your job isn’t just building
features, you’re also building a system to last, scale, and recover from
anything. If you make your postmortems public it can greatly
increase customer trust and help improve the industry.

6.3 Technical Debt


Ward Cunningham, co-author of the Agile Manifesto and creator of
the eponymous law, coined this term in 1992:
“Shipping first time code is like going into debt. A little
debt speeds development so long as it is paid back promptly
with a rewrite… The danger occurs when the debt is not
repaid. Every minute spent on not-quite-right code counts
as interest on that debt. Entire engineering
organizations can be brought to a stand-still under
the debt load of an unconsolidated implementation.”

Goodness! Debt sounds terrible! Who on earth could want debt?


Get debt free right away!

There are two kinds of Technical Debt. Martin Fowler makes


the distinction between Prudent and Reckless Debt. Hashicorp
identifies three categories of debt: outdated, leverage, and
accidental debt, but they map closely enough to Martin’s thinking
that we will stick to those for the purposes of this book.

6.3.1 Prudent Debt

Prudent Technical Debt can be considered “outdated code”.


Code that doesn’t use the latest versions of everything. Code that
uses patterns that have fallen out of favor. Code that is slow. Code
that has loooooongstanding bugs. Code that is verbose because it
supports features and abstractions nobody uses anymore.

We’re programmers. Programmers are, in their hearts,


architects, and the first thing they want to do when they get
to a site is to bulldoze the place flat and build something
grand. We’re not excited by incremental renovation:
tinkering, improving, planting flower beds. - Joel Spolsky
Juniors loathe this kind of debt. It runs against everything they’ve
been taught is the best way to do things, and of course the best way is
the only way.

Seniors understand that only successful codebases live long enough


to become technical debt. They understand this because they have
written code that became debt. They have also tried to replace that
debt and learned the same lesson everyone learns: That technical
debt makes money. Not only does it make money: it is probably
superior to any replacement attempt. Old code has been used. It has
been tested in production and at scale. Lots of bugs have been
found, and they’ve been fixed. By definition, only the noncritical
bugs remain! Hyrum’s Law teaches us that all observable behaviors
of a program, even bugs, will be relied on by users. Imagine fixing a
bug to get complaints to undo your fix!

Sometimes you should intentionally load up debt because you


don’t yet know the problem space well. Juniors rush to keep things
DRY - but this causes Hasty Abstractions that they then regret and
have to unwind later. Seniors understand that code is copied,
read, moved, and deleted, far more than it is written.
Instead of optimizing for conciseness or cleverness, it is better to
optimize for inevitable change.

Tip: For a great visualization of this, see Dan Abramov’s


Deconstruct 2019 talk.

As a Senior, you’re paid to wrangle Technical Debt. That’s why some


of the highest paying jobs deal with huge legacy systems, whereas
enthusiasts and hobbyists will hack on cutting edge technology for
free. But it’s not like you can let debt build up forever. You need to
be able to figure out how much is too much, and how to pay it down
while still delivering business objectives.
The Strangler or Facade Pattern is most often mentioned as part of
the Technical Debt Management toolkit. It is helpful for swapping
out underlying implementations while running-in-place. A good
variant of this is the Bridge pattern, where you abstract over all third
party dependencies, instead of only when upgrading.

One of my favorite software development practices is to


wrap dependencies into custom abstractions. I hate it when
a third-party leaks all over my code and a refactor takes
hours (if not days) because of it. - Sarah Dayan

But the core skill at hand (especially at the level of systems, not code)
is running migrations. This is especially true at high growth
startups, where code becomes outdated as a direct and frequent side
effect of growing yet another order of magnitude. Here, the playbook
is to Derisk, Enable, and Finish strong.

Software migrations are a way of life at rapidly growing


companies, and increasingly I think your ability to
migrate effectively is the defining constraint for
your growth. - Will Larson

When operating at scale, what might be a disadvantage can turn into


an advantage - using your production traffic to gain definitive
confidence in your code. Most big companies have avoided long
lived branches, and converged on using Feature Flags for this.
Here’s Paul Biggar, founder of CircleCI and Darklang:

One way to reduce accidental complexity in Dark is by


solving many different problems with a single
solution. Feature flags is our workhorse: replacing local
dev environments, git branches, code deployment, and of
course still providing the traditional use-case of slow,
controlled roll-out of new code.

And here’s Dan Abramov on how Facebook does migrations:

We rely extensively on feature flags to enable and


disable functionality or to switch between different
implementations. So we might have a v1 and a v2 checked
in and (we have a dynamic check that rolls v2 out
to) 1% of users and then 50% of users, and we’ll see if there
are any regressions in metrics. And then when we’re
confident that the fix actually works and it doesn’t make
anything worse, then we’ll switch it over to 100% and delete
the old implementation.

Feature Flags aren’t free though. Uber discovered a ton of stale flags
clogging up its codebase, making it more complex, and possibly
slowing down builds and tests. The problem was so bad they wrote
an internal tool to detect and clean them up, called Piranha. It found
6601 flags and that 17% of them weren’t used. Your flags
themselves can be Technical Debt.

6.3.2 Reckless Debt

The other kind of Technical Debt doesn’t have anything to do with


age or growth: Reckless Debt. You can think about this as debt
resulting from skipped steps. Here’s Joël Quenneville of
Thoughtbot: “(Reckless) Technical Debt is described as taking
shortcuts and cutting corners in code quality in order to speed
up development.”
Identifying “Reckless” Debt is challenging in itself - nobody wants to
cop to cutting corners, but we all do it. Kent Beck exhorted us to
“Make it Work, Make it Right, then Make it Fast”, but many
incentive systems encourage developers to just “Make it Work, Make
it Work, Make it Work.”

One popular, but incomplete, way to deal with this is to use


automated code quality systems that don’t let you commit code that
worsens metrics beyond an acceptable point. These tools help bring
future debt into the present, and forces you to deal with them now
before you ship, rather than put things off forever until it becomes an
impossible task.

Tools that hold the line and don’t let things get
worse are so powerful. E.g. test coverage, type
coverage, bundle sizes, perf metrics, etc. Much of APIs are
about how not to break something that was once tested.
Under-invested in open source and business critical in Big
Tech. - Sebastian Markbåge

You should automate detection of every code quality issue you can,
including build times, build sizes, file length, test coverage, and
linting or pretty-printing your codebase. Every hour spent in code
review on automatically detectable errors is multiple hours wasted in
the back and forth between your developers. Let the machine be
the Bad Cop. Conversely, try not to hold too many opinions that
cannot be encoded in your systems, as that adds cognitive load,
invites bikeshedding, and may actively hinder your developers when
they face unanticipated problems.

The other concern with Reckless Debt comes from the mismatch of
the financial debt metaphor:
The Technical Debt analogy suggests a fungible (every debt
issue is the same), predictable increase in cost over time,
which you can add resources to deal with (aka throw people at
the problem). It places blame squarely inside the codebase.
In reality, we experience a loss of predictability (because we
skip our systems, we lose control of our systems). This creates a
unique (every codebase’s problems are unique) scenario where
adding resources increases risk (the Mythical Man Month
issue), and the problem is in the interactions between
people and code.

So instead of “Technical Debt”, the better metaphor for Reckless


Technical Debt might be “Increasing Risk”. This happens to help sell
the idea of fixing it a lot better. As Rachel Stephens notes: “Your
manager doesn’t care about interest payments… but they care A LOT
about RISK.”

To control the creation of Reckless Debt at the source, it can be


prudent to have a blessed set of technologies everyone at the
company uses. Google maintains a list of “Official Languages”
Googlers can use, with dedicated language infrastructure teams to
support them. When you use a standardized toolset and only
allow yourself limited “innovation credits” to experiment with new
technologies or patterns, you have less of an excuse to cut corners.
Everything is familiar and you can even build your own tooling to
make adhering to code standards easier.

Even with all these systems and policies in place, Reckless Debt will
no doubt arise in your codebase. You would do well to have a policy
written down somewhere for identifying and prioritizing this. Use
Hashicorp’s Technical Debt policy if it helps. This not only serves as
an approved process for you and your team to follow, it is also a
contract that you can have with management and other stakeholders,
who might be inclined to brush aside issues where they don’t feel
immediate pain.
6.4 Mentorship, Allyship &
Sponsorship
“Individual Contributor” is a misnomer when it comes to
being a Senior Developer. There’s nothing individual about it -
virtually every company expects their Senior Devs to be mentors for
their Juniors and force multipliers for their teams.

You might be the smartest person in the company. You might have
the deepest knowledge, write the best code, crush tickets faster and
cleaner than anyone else in the history of programming. It doesn’t
matter if you cannot scale yourself. If you hoard all the
knowledge and don’t mentor and collaborate, you are only as useful
to the company as an external hired agency.

Listen to the true story of Rick, a genius developer who did great
work but also became a huge bottleneck and refused to accept any
systematic remedy. He was an individual contributor, alright. He
contributed the company’s greatest problems, and was fired.

The best way to be a 10x developer is to teach 10 people


what you know. Spend time making sure that engineers who are
unfamiliar with the tech or processes not only understand what they
are doing, but also why they are doing it. “Teach them to fish” is a
mandatory skill as a Senior Engineer, and that requires having both
patience and a perspective of investment in the rest of the
organization. You should come to preach Apprenticeship Patterns as
much as you do design patterns. Once they are capable, have them
do the same. Encourage a knowledge sharing culture. Senior
engineers lift the skills & expertise of those around them.

Part of the way you will do this is to Write, A Lot (Chapter 18).
This scales your experience across people and time. Just like you
document your own code, you should document your own “API” (for
example, by writing a personal README) and as much context and
learned experience as you can articulate.

As someone with a senior title, you have a lot of power to call out
unconscious and systematic bias toward underrepresented
minorities in your company. Be an ally – our industry has
tremendous diversity debt accumulated over the past half century
and this is hurting us and society at large now. You don’t have to be
“super woke” to recognize this simple fact. Unintentional sexism and
racism happens from the big things like hiring pipeline, promotion,
and project distribution, right down to smaller things like code
review and speaker representation.

You might agree this is a problem but view this as “not my job”. This
severely underestimates your power and therefore your
responsibility to effect change within your own circle of influence. It
starts with you. If we want our industry to be better in our
lifetimes, we need to play an active role, instead of waiting on some
“D&I initiative” to magically fix it for us.

A great list of five things you can do to help, from Karen Catlin of
Better Allies:

Speak their name when they aren’t around


Endorse them publicly
Invite them to high-profile meetings
Share their career goals with decision-makers
Recommend them for stretch assignments and speaking
opportunities

Mentorship and Allyship is great, Sponsorship is even better. Talk is


cheap - take an active role in opening doors for underrepresented
people! Lara Hogan and Samantha Bretous have great advice on
how to be a sponsor, but it is up to each of us to live this advice.
When you actively sponsor someone up to a position of influence, the
effects of that can ripple out for decades, because they can then turn
around and sponsor others.

It’s important to not let the title get to your head. You are still junior
in some things. You do still have things to learn. People junior to
you can still tell you things you don’t know. You are as liable to the
same cognitive biases in software development you spot in others.
Stay humble, stay hungry, stay foolish.

“In every man there is something wherein I may learn of


him, and in that I am his pupil.” - Ralph Waldo Emerson

6.5 Business Impact

The most valuable engineers are the ones who habitually


view their work through the lens of what the business needs
to succeed. Which is a skill you have to practice and foster
and cultivate, just like any other. - Charity Majors

The final element that everyone expects out of Senior Engineers is


having some sense of the “Bigger Picture”. People are usually vague
on what they mean by that, but by and large, they mean having a
sense of where your code and systems fit into the broader context of
how the company makes and spends money.

Outcomes over Features. As a Senior Engineer, you realize that


it doesn’t matter if you deliver the perfect feature if a confounding
factor prevents the user from seeing the desired outcome.
Requirements that are given or agreed upon can be wrong.
If Junior Engineers are hired to find the right answers, then Senior
Engineers should constantly be on the watch to ask the right
questions. Your communication skills, especially your writing
skills, are essential here to clarify and push back with tact. Time
spent on ensuring everybody has the same definitions of
terminology, and shares the same context on desired goals, can save
100x that amount of time down the line, when code is already
written. This concept is called Shift Left:

IBM Research also looked at the relative cost to correct


bugs and defects based on when in the software
development lifecycle they were identified and resolved.
The study showed that defects identified and resolved
during the Requirements and Design phase of development
are 60-100X less expensive to fix than those discovered
and fixed after product release. (Source: Infostretch)
In fact, the strategic saying of No can be your single most
valuable action. Having made similar mistakes before, you are able
to anticipate potential problems. Contributing in this way is often
even better than suggesting an immediate solution. Sometimes, this
goes as far as redesigning your own job if you realize you are not
working on the right thing. If as a Junior Dev your goal was to fit in,
as a Senior you have the power to stand out when it matters.

“I’m as proud of what we don’t do as I am of what we do.”


- Steve Jobs

Awareness of your impact does extend beyond business toward your


industry and your community. If we believe that technology is
powerful, then we must also believe that the people who wield it have
a responsibility for that power. The medical industry has the
Hippocratic Oath, commonly interpreted as “First do no harm”. The
closest version we have is “the Computer Lib Pledge” articulated by
tech pioneer Ted Nelson in 1974’s Dream Machines:

The purpose of computers is human freedom.

I am going to help make people free through computers.

I will not help the computer priesthood confuse and bully


the public.

I will endeavor to explain patiently what computer systems


really do.

I will not give misleading answers to get people off my


back, like “Because that’s the way computers work” instead
of “Because that’s the way I designed it.”

I will stand firm against the forces of evil.

I will speak up against computer systems that are


oppressive, insulting, or unkind, and do the best I can to
improve or replace them, if I cannot prevent them from
being bought or created in the first place.

I will fight injustice, complication, and any company that


makes things difficult on purpose.

I will do all I can to further human understanding,


especially through the new visualizing tools of interactive
computer graphics.

I will do what I can to make systems easy to understand,


interactive wherever possible, and fun for the user.
I will try not to make fun of another user’s favorite
computer language, even if it is COBOL or BASIC.

6.6 Recommended Reading


Continuing on the Individual Contributor track beyond Senior Dev is
out of scope for this book, but I can refer you to some resources to
get you started:

Yan Cui’s Breaking the Senior Developer Ceiling


Keavy McMinn: Thriving on the Technical Leadership Path
John Allspaw’s On Being a Senior Engineer
Tom Limoncelli: What makes a sysadmin a “senior sysadmin”?
Getting promoted to Staff Engineer:
https://staffeng.com/stories
Hacker News on getting promoted to Architect
Chapter 7
Beyond your Coding Career
Something that goes quite unspoken in our industry is that there is
a lot of churn. That’s why you see so few extremely senior
engineers who still primarily code for a living. It’s not just that they
are rare, but also they are the only ones that are left.

Sometimes this is “bad churn”, like the many, many cases of burnout
in our industry. Please pace yourself - if you intend this career to be
a long one, you shouldn’t be running a marathon at sprint pace.
Recognize symptoms of burnout:

Working Late
Irritability
Not asking for help
Wallflowering during technical conversations
Insomnia/Code Nightmares

And look out for these in your coworkers. As technical people we


monitor software and hardware for problems, but often forget the
wetware (people) that are at the root.

Fortunately, the majority of people stop coding for a living for more
positive reasons - they find something that suits them better! If code
is at the center of your universe and this sounds impossible to you
right now, consider this: why do people who don’t code call the shots,
and why do they pay you to write code? They must get more value
not coding for a living than you get coding for a living.

Here, we will briefly discuss what a moderately informed friend


(me!) might tell you about five common paths (without having
actually lived through all of them) of good churn:
Engineering Management
Product Management
Developer Relations
Developer Education
Entrepreneurship

We will not discuss Freelancing or Consulting - those are close


enough to coding jobs, with some solo business management tacked
on top - but check out Nader Dabit’s The Prosperous Software
Consultant, Gerald Weinberg’s Secrets of Consulting and Harry
Roberts’ Questions for Consultants if you are keen to try that.

Our discussions will try to warn you about the bad along with the
good - which is to say, it’s not 100% good. But nothing is. Don’t
mistake this as “shitting on these paths”, they are obviously great
career tracks that many enjoy. The intent is to warn you about
potential downsides like any friend would, so you go in with eyes
wide open.

The goal, as in the rest of this book, is not to be 100% correct - it is


just to open your eyes to considerations you may not have thought
about before, and point you the way to learn more or form your own
opinions.

Author’s note: This lengthy disclaimer is the only sane way


to write a broad-reaching chapter like this! braces for
shitstorm of complaints…

7.1 Engineering Management


Probably the most common path out of a coding career is becoming
an engineering manager (EM). This isn’t always true, as we will
explore later, but in many organizations, EMs make more money,
have more impact, have a more central position in company
hierarchy and information flow, and spend less time worrying about
implementation details.

You will spend most of your coding career reporting to EMs, so it


might feel natural to view that as the next step. Even more likely,
you harbor the armchair quarterback’s niggling suspicion: “I could
do that job better!”

“Things would be different if I was in charge”, the belief


that authority is an all-powerful magic wand you can wave
and fix things. - Mark Roddy

Companies also naturally want to take their best coders and put
them in charge of other coders. Despite the best efforts of companies
to create equivalent Individual Contributor career tracks, the dearth
of good managers mean that most organization incentive structures
encourage some form of Peter Principle.

However, heed the advice of basically everybody who has ever gone
from engineering to engineering management: it is a huge career
change. You go from developing software to working on
Peopleware. If you are in the right head space for the role, you will
see this as a good thing! Humans are a part of your systems
too!

Becoming a manager is not a promotion - it’s a lateral move


onto a parallel track. You’re back at junior level in
many key skills. - Sarah Mei

As an engineering manager:
Your primary output is no longer code, it is teams (and, as you
rise up, teams of teams). Therefore you will spend a huge
amount of your time hiring and managing. The amount of time
you spend in high stakes Crucial Conversations becomes
exponentially higher.
You can no longer throw a hack together to get shit done, you
need to follow process and get buy-in more than ever - progress
will seem glacial compared to what you are used to.
You help set technical standards, but must avoid
micromanaging code. This is a very fine line to draw, especially
if your identity and sense of self worth was primarily based on
your technical expertise. Nobody likes the EM who “swoops and
poops” on their work. You need to trust your engineers to make
their own judgments and their own mistakes (within reason).
In order to do that you need to hire and train people you trust
more than you need to dictate code typed by someone else.
Ultimately, you will also want to help train your own
replacement to progress up.
You lose the ability to be fully open with your friends and
coworkers, even outside of work, because you sit atop a
mountain of confidential information. People look to you for
confidence and leadership so you need to be guarded about your
own doubts and feelings.
Nothing is ever complete, or fully resolved, and everything is
important.
As middle management, you still have bosses: while you always
feel maximum responsibility for your reports’ gripes, dreams,
and careers, your own impact and ability to change things is
limited. This can be a difficult line to balance.

Before you decide to become a manager, have a read through Charity


Majors’ list of 17 Reasons NOT to Be a Manager and go through Nick
Caldwell’s “Voight Kampff test for engineering managers”. Know
what you’re signing up for.
It’s not all bad, or there’d be no managers. Sensible
companies want to balance the risks of losing great developers with
the need to grow engineering manager talent. BigCos like Facebook
have the capacity to introduce temporary or “associate” EM positions
where you can trial it for two years (the minimum tour of duty), and
move back into engineering with no fault if you end up deciding it is
not a fit.

In fact, jumping between IC and EM roles is becoming more


common. Seeing things from the other side of the table for a while
can make you a more effective senior IC. Christoph Nakazawa, EM of
the wildly popular Jest framework and now React Native, notes:

I’ve transitioned from IC to EM to IC to EM and I can say


that management taught me lessons on how to be a more
effective engineering leader that are very hard to learn as
just an IC.

Charity Majors calls this the Engineer/Manager Pendulum:

The best individual contributors are the ones who have


done time in management. And the best technical leaders
in the world are often the ones who do both. Back and
forth. Like a pendulum.

There is a difference between how this game works for startups vs


BigCos. Most small companies often don’t need more than one truly
senior-level engineer, and they find that they have to switch to
consulting or move to a BigCo to have enough interesting projects.
Conversely, at small startups, engineering managers often double as
tech leads, and spend significant amounts of time both coding and
making technical decisions. These are completely different jobs at
BigCos, and this is why you will see a wild diversity of management
advice.

I cannot credibly advise you further on this track because I have not
done it myself. Fortunately, many engineering leaders take writing
very seriously, so you can go read their stuff:

Michael Lopp (VPE of Slack)’s books and blog, better known as


Rands in Repose
Charity Majors (CTO of Honeycomb) on the Organizational
Leadership Track
Will Larson (VPE of Calm) on Systems of Eng Management
Kate Matsudaira (VPE of Moz) on The New Manager Guide
Oren Ellenborgen (VPE of Forter) on Software Lead Weekly and
Leading Snowflakes
Camille Fournier (CTO of Rent the Runway) on The Manager’s
Path
Gene Kim (CTO of Tripwire)’s fictional novel The Phoenix
Project
James Stanier (SVPE at Brandwatch) on Become an Effective
Software Engineering Manager
Greg Skloot (VP Growth at Netpulse) on How to be a Manager
Kamil Sindi (CTO JW Player)’s Manager’s Playbook
Lara Hogan (VPE of Kickstarter) on Resilient Management
Julie Zhuo (VPD at Facebook) on The Making of a Manager
Classic developer leadership books like Becoming a Technical
Leader, the Mythical Man-Month, and High Output
Management
Traditional leadership books like Multipliers, Dare to Lead, and
The Infinite Game are also regularly recommended for
managers of people.

Of course, don’t spend too much time reading :) Nothing beats lived
experience.
7.2 Product Management
Another “management”-type position that engineers often move into
is Product Management (PM). Depending on who you survey,
anywhere between 24% and 66% of PM’s were previously
developers. Ask anyone whether PM’s need to have technical
backgrounds, and you will get 600 words of “It Depends” dodging
the question. Whatever - you can code, that certainly does not hurt -
now your task is to figure out whether Product Management is for
you.

If you came into the tech world entirely via coding, PMs may seem
like an odd breed of Bullshit Job from a distance: they show up every
couple weeks, tell everyone what to do, and disappear to do god
knows what, get mad when their meticulously color coded Gantt
charts run afoul of reality, and take credit for everything when stuff
is shipped.

I’m kidding. The variety of PM jobs and roles is even more diverse
than EM roles, if that is even possible. PMs are classically regarded
as “mini-CEOs of the product” - entrusted with bridging the gaps
between engineering, design, and business.
Product Management was created in 1931 at P&G, but the modern
form of Product Management in Tech owes its popularity to Marissa
Mayer, pre-Yahoo, when she was a rockstar executive at early
Google. Google wanted to cultivate “home-grown” managers who
would be Googley, so the two-year Associate Product Manager
program was created. It spawned an entire generation of great tech
leaders like Bret Taylor, who co-created Google Maps, served as CTO
of Facebook, and is now President of Salesforce. Eric Schmidt has
even gone on record saying an APM alum will run Google someday
(not yet true; current CEO Sundar Pichai was a consultant before
PMing for Chrome).
Given all this success, it is unsurprising that every tech company has
some form of PM function (Microsoft calls it “Program Manager”).
Having worked at a company that started with no PMs and
eventually got some, it is very reassuring to know that someone is
herding all the cats and watching out for upcoming blockers and
cross-dependencies. Individual departments tend to get tunnel
vision, and tend to view their problems as more important than
others. Founders initially serve as PMs, but as the company scales,
founders have other things to do, so sooner or later they need to hire
or promote product managers to “own the product”.

For products that don’t serve developers (the vast majority of


products), PMs also tend to be the primary user advocates or
domain knowledge experts. Although UX/Design does do user
research, Good PMs know everything about the user personas, right
down to what competitor products they use and what kind of
marketing channels work best for each. They will also know when to
ignore what research says - in a world of unambitious incremental
improvements, PMs can serve as “visionaries” that can galvanize a
company’s resources to create something that doesn’t yet exist.

“If I had asked people what they wanted, they would have
said faster horses.” - Henry Ford on the Model T (possibly
apocryphal)

PM’s also used to write massive design specs called Product


Requirements Documents that would lay out every detail of how the
product was to behave (therefore a great amount of user research
and some sense of engineering cost was required) - in these days of
Agile and Lean development, PRD’s are much leaner and sometimes
even optional. Being able to code up or mock up a quick MVP for
user testing is much more desirable these days.
PM’s being PM’s, every word of what I just wrote is hotly contested.
PM’s have all sorts of alternative Venn Diagrams to describe
themselves, and have written mountains of Medium posts on how
they are Not the CEO of Anything. The preferred framing these days
is that PM’s have “All of the Responsibility, and None of the
Authority”, which makes you wonder how much sheer charm and
begging PM’s must subsist on to get shit done.

There is another type of “PM” that actually has little authority:


Project Managers. The Product Manager (sometimes called the
“Product Owner”) sets the vision for the product that needs to be
built, gathers requirements, and prioritizes them, while the Project
Manager acts upon this vision and makes sure that it is executed on
time and on budget. In small companies, Product Managers also
serve as Project Managers. A poor or under-resourced “Product
Manager” will functionally regress to Project Manager, because that
is the absolute bare minimum needed to show life. However the long
term value of bumping cells on a spreadsheet or playing Calendar
Tetris is not as high.

Here, a personal anecdote is relevant: I spent a year as a non-


technical Product Manager before deciding to change careers. Our
startup had 60 devs, but each time I worked with a team to produce a
new product feature, I noticed that the only people that got quality
work done (and reasonably on time) were two devs.

Two out of 60.

This was evidently a highly dysfunctional dev team, of course, but the
result was any PM worth their salt would fight for time of these two
devs in order to get stuff done, and play Project Manager with the
rest. When I got the job I was sold on being a “mini-CEO” - but what
I got was jockeying for position and weekly “is it done yet?” calls.
That’s the kind of PM you don’t want to be. Eventually I had enough
and decided to become a developer myself - the PM to Dev transition
is rare but I have started calling it “Team #FineI’llDoItMyself”. I
hope you DON’T join us!

The vast majority of PMs don’t also have unlimited license to


“visionary” their way to any cockamamie idea. Usually there is some
direction from founders (sometimes too much!) and major projects
have to be agreed upon at the Board level. In other words, the job
does involve a lot more “get shit done” than “visionary” in the day to
day reality, at least until you earn some amount of authority from
successful projects.

Overall, PMing can still be a very rewarding post-coding career. If


you have entrepreneurial ambitions or desire even more
impact than in Engineering Management, the PM path is your best
bet. PMs own product-level Objectives and Key Results, and often
have the ear of the highest levels of leadership when critical goals are
at stake. They may even own the Profit & Loss of their product,
if attributable. Products that have their own P&L also often run their
own marketing - this tends to be such a specialized skillset that
paired Product Marketing Managers and Technical Product
Managers are common in BigCos. People who are particularly good
at high growth product marketing are known as Growth Hackers, a
term coined by Sean Ellis and popularized by Andrew Chen - this is a
great related discipline talented coders should explore.

Note: PM’s should care a great deal about everything we


discuss in the Strategy section of this book!

Recommended reads for those exploring the PM path:

Everything on Aha.io’s blog is great, as is MindTheProduct


Everything on Reforge’s blog is great, including Fareed Mosavat
& Casey Winters’ Crossing the Canyon
John Cutler’s blogposts, especially 12 Signs You’re Working in a
Feature Factory
Ben Horowitz’s Good Product Manager, Bad Product Manager
Brian Amstrong’s letter to new PMs at Coinbase
Dave Wascha’s 20 Years of Product Management in 25 Minutes
Kevin Lee’s PMHQ community and Merci Grace’s Women in
Product
Try to have strong opinions on Product Hunt

7.3 Developer Relations


You are reading a book written by a developer relations professional
- if you follow 75% of the advice here, you will be well qualified to be
a developer relations professional. It just so happens that much of
the same advice helps coders in the non-coding aspects of their
careers (which is the only reason this book made sense to write).

So if you’ve read the book and practiced these Principles, Strategies,


and Tactics, we can assume you’re qualified and should easily get the
job. Our task now is to figure out whether you want the job.

There are many names for this job: Developer Evangelist, Developer
Relations, “Devreloper”, Developer Advocate, Developer Experience
Engineer. For convenience, we’ll just say “DevRel”, which is slightly
better but not as fun as “Developer Avocado”. As you might expect,
titles aren’t standardized. They are in theory different roles, but the
reality is everyone performs some ill-defined mix of all these roles.
The best you might observe in titling trends is that “Evangelist” is on
its way out (too much of “I’m telling you to use my product”) and
“Advocate” and “Developer Experience” is on its way up (more focus
on being the user’s champion internally, or making the conversation
a “two way street”). However the shift in titles may not track closely
with the actual behaviors and incentives set up by the company.
It’s not a common job by any means - it only makes sense for
developer-focused companies to hire DevRels, and even in a “dev
tools” company there might be 100 developers to 1 DevRel - but it is
a very visible job (this is a very good thing for midcareer
developers). This means that even as a developer you’ll see a lot of
DevRel folks doing talks and such, and will naturally be curious
about joining their ranks.

This question cuts to the heart of DevRel - does DevRel belong in


Product or Marketing or on its own? Cynics will say Marketing,
Users will hope it’s Product, and DevRel folks want DevRel to stand
alone as its own department. What it actually is depends on how the
company is actually run and how much they walk their own talk. If
you call someone a “Developer Advocate”, but they spend
functionally all their time producing content and are measured based
on user growth and have no input on product prioritization, how
much are they really “advocating” for users instead of to users?
DevRel programs are expensive, and the best way we know how to
justify ROI on these things are all Marketing metrics - which turns
DevRel into Marketing despite the best intentions of everyone
concerned. What gets measured gets managed, and DevRel is only
just beginning to have an open conversation about how best to
measure DevRel (there may be no answer). Better run DevRel
programs will carefully design to prevent this, but enough DevRels
are just “Very Expensive Affiliates” or rebranded “Developer-friendly
Marketing”, that it is worth a quick warning to you.

As a potential DevRel, this is something you need to investigate at


various companies you consider, and also figure out where your own
preferences lie.

There is such a thing as too much of a good thing. You have been
told that writing and speaking and Learning in Public are good for
you, but it is a VERY different proposition to have it become a full
time job. Some people will love it - being paid to raise your profile
alongside the company’s, and to skill up on these very critical skills
for audience and network-building. For others, taking what you used
to do for fun and turning it into a job - with attendant metrics,
quotas, and a weekly schedule - kills all the fun and makes you a
slave to the “content grind”.

There is also the matter of perceptions - first that you are now a paid
shill, and second that you are no longer a “real developer”. Both are
a little bit correct, which is the worst kind of perception to fight. The
truth is shades of gray:

To be an effective DevRel you must be advocating from a place


of genuine enthusiasm. However it is true that you are paid
to plug your company’s product, and while most employers are
fine with you also talking about other issues important to
developers, all of them will constantly pressure you to plug your
company more and more. You have to balance this pressure
against your own interests and industry credibility.
To be a relatable DevRel you must be able to demonstrate that
you can still address problems real developers face.
However it is true that you no longer maintain a product in
production, and you do spend a lot of your time making tutorials
that look nice in a talk or blogpost but omit a lot of the
inconvenient realities like testing, maintenance and cost (since
you, of course, also don’t pay for your own company’s products).
You will have to work hard to both demonstrate your product’s
production-ready-ness (some products don’t have this problem)
and also make it approachable to newcomers (all products have
this problem). You should avoid being too clubby with other
DevRel people on the “conference circuit” to the exclusion of
“real developers” - most of whom only attend 1 conference a
year.

Travel used to be a major part of the job, and usually starts as a perk
(wow I visited 40 countries this year!) and becomes a chore (damn I
spend more time in the airport than with my kids). In the post
coronavirus world, the focus has entirely pivoted to online
communities, which is great for the environment, but also DevRel
marketing budgets.

Nobody said it was easy. Couple this with the long term reality of
DevRel - it might be a dead end. It may be hard to switch from
DevRel back to Engineering or Engineering Management (although
perhaps no harder than other switches, difficult to say) and to date
there is no room in the C-suite for DevRel folks, while other tracks
have clear paths to CTO or CPO.

However the job is still very rewarding - it can often feel like there is
nothing better than to be paid to talk about a tool you already use
and love, and to spread that joy and knowledge to others, who use it
to make their lives and jobs better. The audience and network you
get from creating content all day will outlast your employment -
setting you up for success for anything you do next. The value of
this cannot be understated. But if I said more it’d feel like
bragging.

As for the “dead end career” fear, Patrick McKenzie has this to say:

An observation: every developer evangelist I know


goes into a much better job right after they quit being
an evangelist. This is not true of other engineering jobs
with checkered reputations, like e.g. The Build Guy. Why
do developer evangelists get upgrades but The Build Guy(s)
not? My bet is because evangelists literally spent years
meeting thousands of people and showing them “Hey, I’m
going to live code in front of you while also making my
employers fat stacks of money. You run a company and
could use both engineers and money. You should probably
remember my name, you know, just in case.”
I unfortunately have not done this job long enough to have enough
data to prove or disprove this. It’s quite possible nobody has. It is
pretty common to see DevRels go on to other DevRel jobs, though
that is neither here nor there. It does feel like DevRel can be a close
kin to Product Management for a technical product, because of the
similar focus on users.

DevRels don’t have a monopoly on speaking or writing about the


company. The less jealously they guard this, the better. In fact, the
most successful DevRel programs will be a great partner for internal
engineering teams to speak out with pride about their work and their
products. This basically always works out well - the eng teams get to
brag, audiences see nontrivial work from unquestionably “real”
engineers, and customers get to peek behind the curtain of what
they’re buying. It even makes hiring much easier. Dan Luu has great
thoughts on how good corporate engineering blogs are written. At
companies with very engaged user bases, user groups and
community meetups can perform this function too. Pragmatically
speaking, enabling the voices of others to be heard is the only way to
scale DevRel reach beyond a linear growth in DevRel headcount.
Being able to Build Community is therefore the ultimate skill of a
DevRel.

Recommended Reads:

Kim Maida: Building Developer Communities


Keith Casey: Developer Evangelism: The Whole Story
Nader Dabit: 7 Tips for Breaking Into DevRel
Emily Freeman: Developer Relations: (More Than) The Art of
Talking Good
Get Together: a book and podcast about community builders, by
community builders.
The various DevRelCons and Summits around the world
7.4 Developer Education
Instead of a company paying you to create content for their products,
why not have your audience pay you to create content to teach them?
What a novel idea! This is the territory of the Developer-
Educator, a title I just made up, because “instructor” or “trainer”
felt too bland.

You know what this job is, because you’ve probably learned from
people who are full-time educators already. It is quite similar to the
DevRel job, except that the output is usually more productized, with
a heavy emphasis on product marketing, because they quite literally
live by what they make from their courses, workshops and books.

Developer Education is DevRel on Hard Mode, with the


accordant risks and rewards. The money you make as a DevRel is
constrained by your company’s payscale. If you do an AMAZING job
and 3x new users, you don’t see a proportionate dime. This is fine,
because if the inverse happens and users fail to meet targets, you are
also (somewhat) protected. One advantage of Developer Educators
over DevRel is that they can focus on foundational technologies that
everybody already uses, whereas the point of DevRel is partially to
get people to try out proprietary things they don’t yet use.

Developer Educators have a 100% stake in their ability to create


quality content and market it - you might make a pittance, or you
might be a multi-millionaire, as many good Developer Educators
are. A good Developer Educator might spend six months building a
course and make 500k-1 million, and spend the remainder of the
time audience building and gathering ideas for the next course. The
problem, of course, is that those are the successful ones. The less
successful ones struggle to get attention, and spend hundreds of
hours creating content, and don’t make a dime.
Developer Educators also face the conundrum of having to create a
lot of beginner content. Being able to code well doesn’t mean you
can teach it well. Additionally, beginner content always makes
a lot more money than advanced content, because there are
just mathematically more beginners, but it can be less intellectually
stimulating to produce the 9457th explanation of map vs forEach.
You might reframe your work as teaching “foundational”, rather than
“beginner”, content, but you can’t escape the need to place your own
spin on it just to keep things interesting. Your freedom to explore
your intellectual interests isn’t zero, but it does have a limit, because
you do have to give the market what it wants.

Because Developer Educators are mostly independent, they don’t


have a company brand or product behind them. They are the
brand. Therefore they need to be exceptionally good at marketing,
and in fact, all the other things that are involved in running a small
solo business. Here’s a list of the multiple disciplines from David
Perell:
You don’t have to go fully-independent to be a Developer Educator.
Plenty of professional education platforms like Pluralsight, LinkedIn
Learning, Treehouse, Frontend Masters and Egghead.io help
working developers produce courses and also take care of marketing
and payments, in exchange for a sizable ( 70%?) cut of the
revenues. It is a great way to try it out, as content creation is the
most difficult part of the job, and also a great way to create a stream
of passive income should you decide not to pursue doing it fulltime.

Recommended Reads:

Kent C. Dodds: I’m a full-time educator! (via Egghead)


Wes Bos: Creating & Launching your own Products (creating his
own course platform)
Troy Hunt: Hack Your Career (gaining independence via
Pluralsight)
Cory House: The 7 Pillar Developer (going into fulltime training)
Adam Wathan: Nailing Your First Launch (selling ebooks)

7.5 Entrepreneurship
Finally there is the category of entrepreneurs - ranging from one-
person Developer Educator businesses, to solo “indie hackers”, to
bootstrapped or indie startups, to full-on venture-backed startups.
As someone who can code, you can create something of great,
scalable value with your bare hands, and that is a mighty power
indeed.

It’s well understood that most startups fail. Bad ideas exist. You
might find a gap in the market, but there may be no market in that
gap. You know that you are supposed to make something people
want, but the problem is that people often don’t know what they
want until they see it. You can’t even ask them – as David Ogilvy
once observed: “The problem with market research is that people
don’t think how they feel, they don’t say what they think and they
don’t do what they say”.

Even for those that do succeed, there are long, lean years of nothing
while you build a business. Gail Goodman famously called it the
Long, Slow Ramp of Death. Your opportunity cost - what you might
otherwise earn instead as a Senior Developer if you didn’t try to be a
founder - is extremely high, possibly in the millions. This is one of
many reasons why not to start a startup (here is a longer list, with
Paul Graham’s responses). In fact it is often said that you should not
start a startup to get rich, you should do it because you feel
compelled to create something that should exist but doesn’t. Getting
rich is a side effect if you are right.

There are smart ways you can de-risk this, for example by leaving
your current company with a deal that they will become your first
customer, or you can get really desperate and sell politically themed
cereal to fund your startup.

As a developer, you must acknowledge that your bias will be to try to


code your way out of any problem because that is what you are good
at and enjoy doing. However this avoids the hard parts of talking to
the customer: finding out what they want (product management),
getting in front of them (marketing) and convincing them to buy
(sales). You cannot escape that Entrepreneurship folds up all the
worst of everything we have discussed in this chapter, from people
management to product management to marketing, and makes it
your full time job, on top of which you still have to code. However,
the upsides are accordingly greater.

There are some major forks in the road when it comes to


entrepreneurship. The right answer is usually somewhere between
two extremes:

Product- or Engineering-Driven: Either work out people


want and then figure out a way to make it, or figure out what you
can make and work out how to make people want it.
Venture Capital vs Bootstrapped: Some people are
absolutists about what kind of entrepreneurship they pursue –
either VC is evil and they will bootstrap no matter what, or life is
short and they want to go for broke. This seems unwise. Match
your funding structure to your opportunity: if you see a land-
grab, winner-takes-most opportunity with network effects, take
VC (or Venture Debt) to get there; if not, bootstrap it. Either
way, the more profitable you can be per new user, the better the
economics will be for you on any deal you make. If you belong
to an underrepresented minority, don’t forget that there are
diverse funds like #ANGELS, Backstage Capital and Astia Global
that defy Silicon Valley’s pattern matching biases. Lastly, note
that there are also newer hybrid models like Indie.vc and
Earnest Capital that blend characteristics of VC and
Bootstrapping.
B2B vs B2C: Whether you sell to businesses or you sell to
consumers can make a huge difference in your economics.
Businesses can afford higher prices and can have comparatively
lower churn ( 1%), but there are fewer of them and it can cost
more to reach them. Consumers are plenty and easy to reach via
performance marketing and social media, but they are very price
sensitive and 5-10% monthly churn is not uncommon. The term
“B2B2C” is often used for Marketplaces, Platforms and
Aggregators (Chapter 27). In recent years, the Developer Tools
market has been gaining steam and dedicated investment
because of the realization that developers can be marketed to
like Consumers but can spend like Businesses.
Self Service vs Enterprise: B2B customers like to buy in
different ways. The traditional way of selling software, from the
days of IBM, Oracle and Salesforce, is “top-down”: Hiring very
expensive salespeople in very expensive suits to get into the
right meetings with the CTO/CEO, then rolling it out across the
company after the sale was already made.
The recent history of software startups has completely
reversed this: Atlassian (makers of JIRA) is notable for
bootstrapping for 13 years before IPO using purely “bottom-
up” sales – offering cheap, self-service price plans that
individual users could put on their own credit cards without
blinking. This doesn’t mean that they eschew selling to the
enterprise completely - in fact, the C-suite meeting can be a
far easier sale when you can say “half of your employees
already pay out of pocket to use our product, here are
dashboards and extra features you can get if you sign right
here.”
It’s possible to take “bottom-up” too far – there are great
security and compliance reasons to extensively vet any
vendor. From the founder side of things, enterprise money is
usually far stickier (less churn) and higher margin (more
profit). The good news is that “Enterprise features” are
relatively standard – everybody wants Single Sign On, On-
Premises Software, Audit Logs, Team Management, SLAs and
so on – so much so that checklists and even entire startups
have been made to help you with this.
Products vs Services: In the context of a software startup,
Services mean writing custom software tailored to the needs of
each individual customer, and Products mean writing one set
of software that all customers use.
Products are more scalable, because every feature added is
immediately useful to all customers (including future ones),
while Services are more sellable, because you are directly
addressing the needs of each user. A lot of people get caught
up in the idea that products are better than services, because
they want to do things that scale (and a pure Services business
is basically a consulting shop that refuses to admit it).
However, in the early days, you may want to start with
products first. Oddly enough, this is the one thing that both
VC’s and Indie Hackers agree on. In the Indie commmunity,
this is widely known as the stairstep or ladder approach. Then
you can start getting into Productized Services. The VC/YC
community calls this Do Things that Don’t Scale. In short,
you can offer “Service as a Service” before you make “Software
as a Service”.
Performing Services gets revenue in the door earlier, while
making sure you are hyper attuned to customer needs.
Instead of being off in your own world building product
nobody wants, you can build your product internally to serve
your needs, and then eventually let the “Services Facade” fade
away and users can use your product directly. This can take a
long time and will never quite go away: Chetan Puttagunta, a
notable software startup investor, notes that at $60m in
revenue, half the revenue of software startups are services, but
even at $800m, services revenue is still at 20%. You could
frame this as Product Core, Services Shell.
Horizontal vs Vertical: You can build a “one stop shop”
solution for one specific type of customer, or one solution for
many different types of customer that “does one thing well”. It’s
often easier to start with the former, because the customer focus
feels easier to develop for, but the risk is that you end up
building a crappy version of many things that already exist. Still,
Joel Spolsky argues that “vertical software is much easier to pull
off and make money with, and it’s a good choice for your first
startup.”
You can be enormously successful doing either. Probably the
one thing everyone agrees on is to not try to do both in the
early days.

For more on this and other aspects of Software


business models, head to Intro to Tech Strategy
(Chapter 27).

The best advice on starting up comes from the Indiehackers


community and podcast. For developers, there’s no need to go
anywhere else.
Chapter 8
Part II: Principles
Principles are ways of successfully dealing with reality to
get what you want out of life. - Ray Dalio

Let’s discuss the Principles that you should consider adopting


throughout your Coding Career:

Learn in Public (Chapter 9)


Clone Open Source Apps (Chapter 10)
Know Your Tools (Chapter 11)
Specialize in the New (Chapter 12)
Open Source Your Knowledge (Chapter 13)
Spark Joy (Chapter 14)
The Platinum Rule (Chapter 15)
Good Enough is Better than Best (Chapter 16)
First Principles Thinking (Chapter 17)
Write, A Lot (Chapter 18)
Pick Up What They Put Down (Chapter 19)
Chapter 9
Learn in Public
There are many principles offered in this Coding Career Handbook,
but this is chief among them: Learn in Public.

9.1 Private vs Public


You have been trained your entire life to learn in private. You go to
school. You do homework. You get grades. And you keep what you
learned to yourself. Success is doing this better than everyone else
around you, over and over again. It is a constant, lonely, zero-sum
race to get the best grades. To get into the best colleges. To get the
best jobs. If you’ve had a prior career, chances are that all your work
was confidential. And of COURSE you don’t share secrets with
competitors!

Tech is a fundamentally more open industry. We blog about our


outages. We get on stage to share our technical achievements. We
even give away our code in open source. However, most developers
act like tech is the same as every other industry. Most developers
bottle up everything they learn in their heads, all the while hoping
their careers grow linearly with years of experience at the right
companies working on the right projects for the right bosses. Most
developers strictly consume technical content without actually
creating any themselves.

This is a perfectly fine way to build a career: 99% of developers


operate like this. Scott Hanselman calls them Dark Matter
Developers — you can infer their presence from GitHub stars and
package downloads, but it’s hard to find direct evidence of their
work. Their network mainly consists of current or former
coworkers. When job hunting, they start from zero every time.
They find opportunities only from careers pages or recruiters. To get
an interview, they must serialize years of experience down into a one
page resume by guessing employers’ opaque deserialization and
filtering algorithms. Then they must convey enough in 30-60 minute
interviews to get the job. Even while on the job, picking up a new
technology is a solitary struggle with docs and books and tutorials.

There is another way. You can Learn in Public instead.

What do I mean by learning in public? You share what you learn, as


you learn it. You Open Source your Knowledge (Chapter 13).
You build a public record of your interests and progress, and along
the way, you attract a community of mentors, peers, and supporters.
They will help you learn faster than you ever could on your own.
Your network could be vast, consisting of experts in every field,
unconstrained by your org chart.

When job hunting, prospective employers may have followed your


work for years, or they can pull it up on demand. Or — more likely —
they may seek you out themselves, for one of the 80% of jobs that are
never published. Vice versa, you take much less cultural risk when
you and your next coworkers have known each other’s work for
years. And when picking up a new technology, you can call on people
who’ve used it in production, warts and all, or are even directly
building it. They will talk to you — because you Learn in Public.

I intentionally haven’t said a single word about “giving back to the


dev community”. Learning in Public is not altruism. It is not a
luxury or a nice-to-have. It is simply the fastest way to learn,
establish your network, and build your career. This means it is also
sustainable, because you are primarily doing it for your own good. It
just so happens that, as a result, the community benefits too. Win-
win.
You never have to be 100% public. Nobody is. But try going
from 0% to 5%. Or even 10%! See what it does for your career.

Tip: Some vulnerable people have personal safety or other


reasons to not Learn in Public. These are totally valid.
Since the majority of the time, we all are still Learning in
Private, it’s worth thinking about how to do that well too.
Refer to Chapter 32 for a fuller discussion.

9.2 Getting Started


Make it a habit to create “learning exhaust” as a non-negotiable
and automatic side effect of your own learning:

Write demos, blogs, tutorials and cheatsheets


Speak at meetups and conferences
Ask and answer questions on Stack Overflow or Reddit
Make YouTube videos or Twitch streams
Start a newsletter
Draw cartoons (people loooove cartoons!)

Whatever your thing is, make the thing you wish you had
found when you were learning. Document what you did and the
problems you solved. Organize what you know and then Open
Source Your Knowledge.

You catch a lot of friends when you are Helpful on the Internet.
It is surprisingly easy to beat Google at its own game of organizing
the world’s information. Even curating a structured list of
information is helpful. I once put together a list of Every Web
Performance Test Tool on a whim and it got circulated for months!
People reshared my list and even helped fill it out.
“But I’m not famous, nobody will read my work!” — you,
probably

Don’t judge your results by retweets or stars or upvotes — just talk to


yourself from three months ago. Resist the immediate bias for
attention. Your process needs to survive regardless of
attention, if it is to survive at all. Eventually, they will come. But
by far the biggest beneficiary of you helping past you, will be future
you. If (when) others benefit, that’s icing on the cake.

This is your time to suck. When you have no following and no


personal brand, you also have no expectations weighing you down.
You can experiment with different formats, different domains. You
can take your time to get good. Build the habit. Build your platform.
Get comfortable with your writing/content creation process. Ignore
the peer pressure to become an “overnight success” — even
“overnight successes” went through the same thing you are.

I get it: We all need feedback. If you want guaranteed feedback, Pick
Up What Others Put Down (Chapter 19). Respond to and help
your mentors on things they want, and they’ll respond to you in
turn. But sooner or later, you’ll have to focus on your needs instead
of others. Then you’re back to square one: having to develop
Intrinsic Drive instead of relying on External Motivation.

9.3 But I’m Scared


Try your best to be right, but don’t worry when you’re
wrong. Keep shipping. Before it’s perfect. If you feel
uncomfortable, or like an impostor, good. That means you’re
pushing yourself. Don’t assume you know everything. Try your best
anyway and let the Internet correct you when you are inevitably
wrong. Wear your noobyness on your sleeve. Nobody can blame you
for not knowing everything. (See Lampshading, Chapter 34, for
more)

People think you suck? Good. You agree. Ask them to explain,
in detail, why you suck. Do you want to feel good or do you want to
be good? If you keep your identity small and separate your pride
from your work, you start turning your biggest critics into your
biggest teachers. It’s up to you to prove them wrong. Of course, if
they get abusive, block them.

You can learn so much on the Internet, for the low, low
price of your Ego. In fact, the concept of Egoless
Programming extends as far back as 1971’s The Psychology of
Computer Programming. The first of its Ten Commandments is to
understand and accept that you will make mistakes. There
are plenty of other timeless takes on this idea, from Ego is a
Distraction to Ego is the Enemy.

Don’t try to never be wrong in public. This will only slow your pace
of learning and output. A much better strategy is getting really
good at recovering from being wrong. This allows you to
accelerate the learning process because you no longer fear the
downside!

9.4 Teach to Learn

“If you can’t explain it simply, you don’t understand it well


enough.” - Albert Einstein

Did I mention that teaching is the best way to Learn in Public? You
only truly know something when you’ve tried teaching it to others.
All at once you are forced to check your assumptions, introduce
prerequisite concepts, structure content for completeness, and
answer questions you never had.

Probably the most important skill in teaching is learning to talk


while you code. It can be stressful but you can practice it like any
other skill. It turns a mundane talk into a captivating high-wire act.
It makes pair programming a joy rather than a chore. My best
technical interviews have been where I ended up talking like I teach,
instead of trying to prove myself. We’re animals. We’re attracted to
confidence and can smell desperation.

9.5 Mentors, Mentees, and


Becoming an Expert
Experts notice genuine learners. They’ll want to help you. Don’t tell
them, but they just became your mentors. This is so important
I’m repeating it: Pick up what they put down. Think of them
as offering up quests for you to complete. When they say “Anyone
willing to help with __ __?”, you’re that kid in the first row with
your hand already raised. These are senior engineers, some of the
most in-demand people in tech. They’ll spend time with you, one-
on-one, if you help them out (p.s. There’s always something they
need help on - by definition, they are too busy to do everything they
want to do). You can’t pay for this stuff. They’ll teach you for free.
Most people miss what’s right in front of them. But not you.

“With so many junior devs out there, why will they help me?”, you
ask.

Because you Learn in Public. By teaching you they teach many. You
amplify them. You have the one thing they don’t: a beginner’s mind.
See how this works?
At some point, people will start asking you for help because of all the
stuff you put out. 99% of developers are “dark” — they don’t write or
speak or participate in public tech discourse. But you do. You must
be an expert, right? Your impostor syndrome will strike here, but
ignore it. Answer as best as you can. When you’re stuck or wrong,
pass it up to your mentors.

Eventually, you will run out of mentors and will just have to keep
solving problems on your own, based on your accumulated
knowledge. You’re still putting out content though. Notice the
pattern?

Learn in Public.

P.S. Eventually, they’ll want to pay for your help too. A lot
more than you’d expect.

9.6 Appendix: Why It Works


You might observe that I write more confidently here than anywhere
else in the book. This confidence is based on two things:

Empirical foundation: I have studied the careers of dozens of


successful developers, and have personally heard from hundreds
of others since I wrote the original essay.
Theoretical foundation: Everything here is reinforced by
well understood dynamics in human psychology and marketing.

We take advantage of these laws of human nature when we Learn in


Public:
The 1% Rule: “Only 1% of the users of a website add content,
while the other 99% of the participants only lurk.” You stand
out simply by showing up.
Cunningham’s Law: “The best way to get the right answer on the
Internet is not to ask a question; it’s to post the wrong answer.”
Being publicly wrong attracts teachers, as long as you don’t do it
in such high quantity that people give up on you altogether.
Conversely, once you’ve gotten something wrong in
public, you never forget it.
Positive Reinforcement: Building in a social feedback
mechanism to your learning encourages more learning. As you
build a track record and embark on more ambitious projects
with implicit future promise, your public activity becomes a
Commitment Device.
Availability Bias: People confuse “first to mind” with “the best”.
But it doesn’t matter — being “first to mind” on a topic means
getting more questions, which gives the inputs needed to
become the best. As Nathan Barry observed, Chris Coyier didn’t
start out as a CSS expert, but by writing CSS Tricks for a decade,
he became one. This bias is self-reinforcing because it is
self-fulfilling.
Bloom’s Taxonomy is an educational psychology model which
describes modes of learning engagement — the lowest being
basic recall. Learning in Public forces you toward the higher
modes of learning, including applying, analyzing,
evaluating, and creating.
Inbound Marketing: Hubspot upended the marketing world by
proving you didn’t have to go out in front of people to sell.
Instead, you can draw them to you by making clear who you are
and what you do, offering valuable content upfront and leaning
on the persuasive power of Reciprocity and Liking.
Productizing Yourself: By creating learning exhaust, you can
teach people and make friends in your sleep. This disconnects
your networking, income, and general Luck Surface Area from
your time. Don’t end the week with Nothing. This is Portable
Personal Capital that compounds over time and that you can
take with you from company to company.

9.7 Appendix: Intellectual History


I didn’t invent Learn in Public. The earliest mention I’ve found is
this retrospective on how NASA Scientists do organizational
Knowledge Management. Since then, everyone from Jeff Atwood to
Kelsey Hightower to Kent C. Dodds attribute their success to some
form of Learning in Public. Reid Hoffman, who studies great tech
leaders from Brian Chesky to Jeff Weiner, calls it Explicit Learning.
In fact, everyone you’ve ever heard of, dating back to Plato and
Aristotle, you’ve heard of because they wrote down and shared what
they thought they knew. Your learnings may outlive you.

I wasn’t the first to benefit from this, and I won’t be the last. The
idea is now as much yours as it is mine. Take it. Run with it. Go
build an exceptional career in public!
Chapter 10
Clone Open Source Apps
I get asked all the time “how do I level up?” My favorite
thing to do is find some OSS thing that seems a little
beyond my experience to build (…) and then try to build it,
referring to the OSS source only when you’re totally stuck. -
Ryan Florence

You already know you should be making projects to learn things and
potentially add to your portfolio. You’ve read your Malcolm
Gladwell, you know that you need 10,000 hours of deliberate
practice. Given you’re just starting out, I have a slightly contentious
suggestion for you: DON’T make anything new.

Your decision-making is a scarce resource. You start every day with a


full tank, and as you make decisions through the day you gradually
run low. We all know how good our late-late-night decisions are.
Making a new app involves a thousand micro decisions - from what
the app does, to how it should look, and everything in between.
Decide now: Do you want to practice making technical decisions or
product decisions?

Ok so you’re coding. You know what involves making zero product


decisions? Cloning things. Resist the urge to make your special
snowflake (for now). Oh but then who would use yet another Hacker
News clone? I’ve got news for you: No one was gonna use your thing
anyway. You’re practicing coding, not making a startup. Remember?
Make the clone on your own, then check the original’s source. Now
you have TWO examples of how to implement something, so you
even get to practice something people only do after years of
experience: understanding the tradeoffs of technical choices!

You’re lucky. You live in an age where companies open source their
entire apps:

Spectrum
Codesandbox
FreeCodeCamp
Ghost
DEV
GitLab
Fathom

If those seem like waaay too big of an app for you to clone (they are
huge), go look at the side projects of your mentors. For example, for
front-end devs:

Ryan Florence has Planner


Kent C. Dodds has TIL
Christopher Chedeau has Excalidraw
Daniel Vassallo has Userbase

Make a clone, then show it to them! You are virtually guaranteed to


get free feedback. It doesn’t have to be someone famous. You can
even try clones of clones:

Smoen Sanders’ Instagram clone


Muzamil Sofi’s Twitter clone
Trello Clones and JIRA Clones
Retro Windows UIs are very popular!

You don’t even have to work on apps, if you want you can build your
own clones of popular libraries and frameworks. Daniel Stefanovic’s
Build Your Own X repo is a treasure trove of tutorials for these if you
need help.

“In the art/design community there’s a word for it,


“copywork“… There are a lot of nice things about copying
existing stuff: you don’t have to think through how
interactions should work (just copy them), you can focus on
learning one thing at a time, and you get to choose your
own difficulty setting.” - Dave Ceddia

If you’ve picked a technology to specialize in (Chapter 12): Clone


apps using your technology and demonstrate how it is better and also
make fixes where it is worse. This sounds mundane, but Plugging
Holes In The Internet is a reliable strategy for making friends fast
and making fast friends. react-router was built by early adopters
of React who missed the old router from Ember, so they plugged that
hole in the React ecosystem. It then made their reputations.

Put a time limit on it. Deadlines work wonders. Also you’re not
going for a pixel perfect clone of something that teams of people, way
more experienced than you, have made. You want to have a set
amount of time, get as much of the interesting features as possible,
and then ship it. This guarantees that you will be freed up for the
next clone, and the next. Different projects let you try different
libraries and stacks, and figure out what you like there. Also you get
to practice one of the hardest software engineering skills of all:
Project Estimation. You’ll create many, many opportunities for
yourself to see what you can do in a set amount of time because
you’re deliberately practicing making things on the clock. And none
of that time is taken up by product decisions!

When you’ve done enough and start feeling bored, it’s time to let
your freak flag fly. You’ve earned the right to make your app because
you’ve made others. You know what things cost and you have used
your tools well enough to get there. You’re still learning in public,
though! Package up your experience into a talk. Livestream yourself
coding. Blog about your game plan, then blog some more as you
execute it. Developers who can Work in Public are in far more
demand than developers who can’t.

Note: See the Side Projects chapter (Chapter 37) for more
discussion on starting and managing side projects.
Chapter 11
Know Your Tools
You skim over a lot in your learning. This is because developer
marketing is heavily incentivized to make things look easy. Look
how fast you can do X! Look how few lines of code it takes to do Y! It
works, and you benefited by getting productive fast.

But soon enough you run into problems. Your “Hello World” stops
working when you deploy it (most tutorials neglect deployment
instructions). Your code is insecure (security makes for slow
demos). You are scared to make changes to your config because it
blows up when you so much as look at it.

It’s not your fault, but it’s in your power to fix your gaps. The
tutorial/bootcamp gave you a head start, now you have to go the
distance.

A poor craftsperson blames their tools. A great


craftsperson knows their tools intimately.

If you’re a frontend dev: Learn Webpack. Learn Babel. Learn what


the CSSWG and TC39 do. Heck, learn Javascript and CSS all over
again. Did you know you can use the Chrome Devtools as a profiler
and an IDE? Learn bash. Learn git. Learn CI/CD. Open
node_modules. Yeah, it’s a lot, and nobody knows everything. But
take the effort to learn the tips and tricks and failure modes of your
tools.

Equally important is figuring out what is OK to miss. I have my list,


if I shared it I’d piss off a lot of people. But there are some things you
will use daily in whatever career you end up in, and some other
things seem important but are really just nice-to-have. Figure out
the difference. Tech is a house of cards a mile high, abstractions atop
abstractions. Lower levels of abstraction have a longer half-life than
higher ones. Kyle Simpson says you should learn one abstraction
level below where you work.

11.1 Avoid FOMO


Your favorite thought leader says you should check out ReasonML, is
Javascript dead? Why the hell do people want to kill Redux so bad?
Is CSS-in-JS literally the devil? Vue passed React in Github stars,
should you pivot to Vue? I dunno, do you get paid in Github stars?

Fill in -your- gaps. Read technical books cover to cover. For


<$100 and a few focused days you can download world class
expertise on anything.

Focus on you and your employer’s needs. There are so many


opportunities in tech that you can pretty much pick out your turf and
play entirely within it AND be completely ignorant of all the other
stuff AND still do great!

Don’t get me wrong: I’m a big fan of playing the meta-game. It is


possible to make strategic blunders but it’s also impossible to avoid
them altogether. Stop trying. It’s much better to focus on the “good
enough” and be directionally but not literally correct (Chapter 16).
The goal is to be accurate, not precise. Try your best to be
right, but don’t worry when you’re wrong.

11.2 Beyond the Tool


There’s more to knowing your tools than just knowing what they
are. Your tools will stop serving you well when your needs go beyond
the scale and speed assumptions they were designed for. In those
cases, knowing the design patterns that underlie those tools, and
being able to look for new tools or make your own will come in
extremely helpful.

There’s also the why and the who. Who made the paradigms we live
in now? Who’s maintaining it today? Why is the API the way it is?
Why did it change from past versions? (If you’re feeling
adventurous: how does the tool work under the hood?) Let your
intellectual curiosity carry you and fill in your lack of experience with
research that nobody else bothers to do.

To give you an example knowledge graph traversal with React: Many


workshops portray “Advanced React” as using some lesser known
hooks or deploying production metaframeworks like Next.js. But
this omits so much:

What did the initial prototype of React look like?


How did React first find significant outside traction with the
Clojurescript community?
What are the founding principles behind React’s initial and
ongoing design?
What conventional wisdom is regretted or often misunderstood
about React?
What APIs were tried and failed, and why did they not succeed?
How do you contribute to React and how would you add a new
feature?
What do people who use React’s major alternatives say about
React’s tradeoffs and drawbacks?
If you can make a tiny clone of React that does everything you
normally use React for, what else does React do that you don’t
know about?

Swap React for whatever technology you are trying to learn.


Knowing how to know your tools is timeless. Be able to explain them
from first principles (Chapter 17)!
Compared to other academic pursuits, there could not be an easier
subject matter to research, this stuff is literally all online and version
controlled with git, and all the people involved are still alive and
easily contactable.

And when you’ve filled something in, when you’ve found something
cool in your research, write it up. Preferably in public!
Chapter 12
Specialize in the New
You already know the value of a niche - your market value increases
the more specialized you are in anything. So what should you
specialize in? There are many schools of thought, including ones
where you could be a generalist that doesn’t specialize at all.

Note: For a deeper discussion, see the Specialist vs


Generalist chapter (Chapter 23).

I find one rule to be the simplest and most effective of all:


Specialize in the New.

Isn’t FOMO bad? Well yes, that’s an important distinction — don’t


specialize in everything new. Specializing means you have to
say no to a lot of things. Just pick something new that fascinates
you, and hopefully many other people as well. Since you’re learning
in public, you’ll know when you hit on a real nerve. Budget in the
idea that you’ll fail a few times before you find Your Thing.

Note: It doesn’t have to be the absolute newest thing. In


terms of where you are in the Rogers adoption curve,
the sweet spot is just before the transition from Early
Adopter to Early Majority. But you’re also fine betting
heavily as a Megatrend goes from Early to Late Majority.
For a deeper discussion, see the Strategic Awareness
chapter (Chapter 28).
Then the other big objection: There are plenty of jobs in (fill in the
blank older technology) too! This is usually followed by some big
numbers and anecdata. “My brother’s cousin’s roommate’s friend
took this COBOL job and now she’s earning six figures on the beach
in Tahiti!” And it’s true - you can probably find a job doing PHP or
Angular for the rest of your life.

If that works for you, good. I will never say there is only one path to
success. Here’s why I don’t do it. It is far easier to rise up the
ranks quickly in a new space than in an old, crowded space.

Note: I discuss a short list of people who made their careers


betting early on tech in Betting on Technologies
(Chapter 24).

You know how people rant and rail against companies who hire
based on years of experience? That could go away tomorrow and
you’d still have clients/employers silently comparing your length of
experience to your competition’s. It’s human nature.

But you know where it’s impossible for someone to have five years’
experience doing X? When X is less than five years old.

There’s a practical element to it as well - technologies accumulate a


LOT of cruft over time. Best practices form, some of which are great,
but some of which are total BS. And all are stamped by early experts
as The Right Way To Do Things because Reasons. Books are written,
careers are made. If you choose to play on their turf, you’ll
eventually need to read/deal with/overcome all of that history. Even
if you work twice as hard as the average developer, you can only
make up for all the context you missed half as slowly.

When is it possible to have read everything ever written about


something? When it’s new.
12.1 Technology Complements
Focus right next to where others are investing heavily. Joel
Spolsky notes that demand for a product increases when the price of
its complements decreases.

“Complements” are an abstract idea so let me draw an example. If


you brand yourself as a Firebase consultant and Google keeps adding
and bug fixing Firebase functionality, they are in a small way
working for you. When Google invests more in Firebase, you win
too.

As a developer (and not a startup) you don’t even have to make the
bank shot of finding the overlooked adjacencies next to an area of
heavy investment. You can just focus on the area directly and let the
market tell you where gaps exist. What’s broadly true is that heavy
investment often leads to the cost of that thing decreasing, as the
usual plan is larger scale with lower unit cost.

Again, refer to the Strategic Awareness chapter


(Chapter 28) for more on complements and Wardley
Mapping.

I have an economics background so if I lost you there, I apologize.


But I wanted to impress on you that picking the right horse in this
game of “Specializing in the New” isn’t that hard. The market is
going to make it fairly obvious. More people don’t do it because they
are busy being experts of other, older things. In this green field
space, your “weakness” (not having a domain you “own”) becomes a
strength (having no prior commitments).

Plant your flag on fertile ground, and say, “this is what I


do”. It will carry you far.
12.2 Lindy Compounding
Everyone focuses on the second part of this principle (“the New”)
and not enough on the first: “Specialize”. Settle new ground, but
don’t hop.

You may be familiar with the “Lindy Effect” - the idea that the future
life expectancy of a thing is proportional to its current age. This is
commonly expressed as something negative. If someone tells you
their project will be late by ten days, you can expect it to take another
ten days from that, and so on. It isn’t meant to be taken literally -
since nothing lasts forever - but it does describe the tendency of
deviations to correlate rather than remain independent.

Side note: In econometrics, this is known as Autoregressive


Conditional Heteroskedasticity.

However, the idea also applies positively. Taleb notes in his book
Antifragile that if something has remained relevant for 50 years, it
can be expected to remain relevant for another 50 more.

We can also apply this concept to the way that we specialize in the
new:
You can think of the typical developer’s approach to new
technologies as skeptical and/or noncommittal. They hop around
from Technology A to B to C to D. It’s easier to pick up something if
you don’t intend on sticking with it for long. The stakes are low.

Things change when you assess technologies with an intention of


working with them for a long time, and then put in the effort to do
so. You start picking up things at a slower rate, but your total
productivity soars because of the lower churn. “Fewer for longer”
seems like a great policy!

Taking advantage of the Lindy Effect to compound your productivity


is a force multiplier for the finite time you have.

Note: For a deeper discussion, see Betting on


Technologies (Chapter 24).
As an aside, building your network also benefits from Lindy
Compounding as well. If you go through life with a series of short-
lived work acquaintances, you don’t build much of a network and
miss the benefits of long-lasting relationships. How you approach
people at work completely changes once you realize this important
fact: Your professional relationships will outlast your
current employment. Your loyalty to great people you find on
your way will pay off far more than your loyalty to your current
company.

Building a network and picking technologies both compound in the


same way. The reason is because they are basically the same thing -
technologies are built by people. Therefore: Play long term
games with long term people.
Chapter 13
Open Source Your Knowledge
Open Source Code wasn’t always the norm.

The Unix operating system was created in the 1970s and freely
licensed to academic and business institutions for a decade, before
Bell Labs decided to charge for it as a proprietary product.
Frustrated with this, Linus Torvalds created and released Linux in
1991. Today, 97% of web servers run Linux.

Similarly, most software you use today is mostly open source. The
expectation is that the open source alternative to a closed
source codebase will eventually win:

PostgreSQL has superceded Oracle in every dimension from


features to developer experience, on a fraction of the budget.
Anders Hjelsberg, creator of Turbo Pascal, Delphi, J++, C# and
TypeScript, now says no language will be closed source ever
again. Can you imagine having to pay a company just to use a
language today?
Even in proprietary application code, 97% of it is open source
libraries and components, according to npm.

What happened to Code is happening to Knowledge.

13.1 Open Knowledge


We can all do more to share knowledge openly. Open Knowledge
is polished, highly produced information shared in public - books,
blogposts, cheatsheets, talks, libraries, and, increasingly, data, which
the Open Knowledge Foundation promotes.

In my former Finance career, everything I did was property of my


fund, and we never shared our insights to advance the industry. This
arises from a Zero-Sum view of value creation. It’s a shame - I did
some of the best work of my life in that job, and it is trapped in some
mailbox somewhere and nobody will ever see it again. Not even me.

The Tech Industry is fundamentally more open. This is wonderful.


Now we not only share most of our secrets, we can get up on stage
and tell our peers about it, and get rewarded for it! Every company
understands the value of blogging, and we often even give away our
code.

But even this is a highly choreographed, high-barrier-to-entry


process. Open Knowledge (for example, a technical book) is usually
produced as a heavy lift, by one person or group of people, and it has
a finite release date after which the released knowledge can be
assumed to gradually decay in relevance over time.

13.2 Open Source Knowledge


How Open Source Knowledge differs from Open Knowledge is
it’s link-rich, collaborative nature.

Open Source Knowledge wasn’t always the norm. We used to


have door-to-door Encyclopedia salesmen, who sold us giant sets of
books that contained Everything There Was To Know on Earth.
Then computers happened, and I remember being awed that all the
knowledge on Earth could fit into a single Microsoft Encarta CD-
ROM.
Of course we know what happened next - Wikipedia came along and
obsoleted all commercial encyclopedias with sheer breadth, then
depth - on a shoestring, nonprofit budget. It was released in 2001.
By 2005, the prestigious journal Nature found it comparably
accurate with Encyclopædia Britannica. By 2018, Google, Facebook
and YouTube began to combat fake news by linking to Wikipedia
articles.

“Citations needed” is a fundamental requirement of Open


Source Knowledge. Wikipedia isn’t credible in and of itself - it
derives credibility from linking to credible sources. This is wonderful
- it allows the reader to check their sources, while still making
information more accessible by synthesizing it for a specific point of
view. This is a fundamental innovation on the encyclopedia, that
takes advantage of the #1 feature of the Web: Hyperlinks.

Wikipedia isn’t without its problems. But it’s ability to leverage


collaboration and crowdsourced knowledge has produced great value
for society - and for authors and curators of individual articles. We
should let a thousand Wikipedias bloom.

Open Source Knowledge is spreading in software, too. This should


seem obvious - Code is just one materialization of all Knowledge.
You may be familiar with one of the Awesome repos inspired by
Sindre Sorhus. Or perhaps you’ve read great documentation via a
Gitbook. And more recently, code livestreaming via Twitch and
YouTube is on the rise. You can even start a business off of this -
Nomadlist started life as a simple open source Google Sheet.

13.3 Personal Anecdote


Open Source Knowledge has had a profound impact on my own
career. I tell you this not to promote my own work, but to give you
the most genuine endorsement of this idea that I can offer.
On the first day of my first job as a developer, my tech lead casually
mentioned that we’d be using React with TypeScript, and it wasn’t up
for debate. I had never used TypeScript before. So a forced
introduction to TypeScript began. I read through the TypeScript
docs, and they ranged wildly from very basic (assuming no ES6
knowledge) to very advanced (assuming extreme facility with generic
types), with no mention at all of accommodations needed for React.
The React docs had even less to offer.

So I started my own cheatsheet of tips and tricks, purely for React


developers who needed to add TypeScript to their repertoire, aka me.

It turned out there were a lot of people like me - the repo stands at
12k stars as of time of writing. I definitely got lucky there - but I’ve
extended this approach to cover everything else from React Suspense
to Design tricks to Node.js CLI’s and it works for me just the same.
The “README in a Git Repo” thing isn’t the only way to do Open
Source Knowledge, but it is a damn good one.

13.4 Why Open Source YOUR


Knowledge
Open Sourcing Knowledge is not an act of pure altruism. Even if not
a single soul sees it, the act of organizing your knowledge and writing
it down solidifies it in your head. But you needn’t remember
everything - your repo becames a Second Brain that can store and
search infinitely more information than you can. In this limited
sense, there’s no difference whether this knowledge is private or
public - except that it’s nice to be able to punch in a few terms to
Google and find your own notes!

Of course, it is a short step to helping beginners too. Because you


were recently a beginner yourself, you can explain things at an
accessible level, and arrange topics in logical introductory order
(whereas an expert might be too far away from the basics to relate).

The unexpected benefit comes when your Open Source Knowledge


starts being useful to people who know more than you. Experts are
always busy with a million things, and get more opportunities and
requests for help than they can handle. You’re effectively building a
resource they can point people to. Now they are incentivized to help
you be the best resource, for example, by fixing mistakes and holes in
your Open Source Knowledge. In this way I’ve been taught
TypeScript by experts from AirBnb, Artsy, Paypal, and the
TypeScript core team, for free.

Other reasons to open source knowledge:

It is a Friendcatcher, a great starter form of leveraging your


time.
It slowly grows your network, expertise and association with
the domain - the expectations are low, and your work is open for
all to see, so you never feel like you have to be an overnight
expert. But it grows with you, so once you do know a lot, you
will have built up a wealth of credibility and the resources to
back it up.
It is living - it is never “done”, and has the advantage of always
being up to date compared to more highly produced pieces of
work.
It has a Big L of L(PN), and possibly more if you spark a self-
sustaining community.
It is easy and permissionless. Anyone can livestream, or
tweet, or write markdown in a repo. Unlike speaking at a
conference or publishing an O’Reilly book, you don’t need
anyone’s permission to get started.
It can be repurposed for anything. Because you’ve laid
down all your sources Mise en Place (Chapter 36) style, you
can adapt that to creating a talk, a workshop, a blogpost, a
library, or anything else based on your needs. You will find that
Open Source Knowledge has a longer useful life than any Open
Source Code you write.

13.5 Tips
Some tips for doing it well:

Optimize for Copy and Paste - the most immediate value


you can provide to yourself and others is to offer copy-and-
pasteable examples. Make the examples clearly self-contained,
well annotated, and made for Copy and Paste.
Help others help their friends - when people look good by
linking to your work, you look good. So be timeless, don’t add
junk like ads and random jokes.
Add an Open License - just like you should license your code,
make explicit that people are welcome to read, contribute, and
fork your accumulated knowledge, and what attributions you
require.
Look out for under-served community needs. Just like
with any venture, it is not a requirement that you be the first or
only attempt to do something. But it can help you get initial
traction. The intersections of two domains are usually under-
served. This helps your effort be Tractable (don’t bite off more
than you can chew) and Resonant (do people say “Hell yeah! I
wish I’d seen this when I started!”)
Structure is as important as Content. Your role is as much
organizing information as it is providing information.
Everything down to the relative length of sections, the structure
of headings, and even what not to include, is worth paying
attention to.
Ask for Specific Help. If you have known gaps in your
knowledge, ask for help there rather than ask for general help. It
may or may not come, but at least you stand a higher chance.
The world punishes the vague wish and rewards the Specific
Ask.
Internal OSK. Not all information should be public. But you
can still do extremely well open sourcing knowledge internally in
a company.
Chapter 14
Spark Joy
Your work should spark joy. Therefore, you should get very
good at adding sparks of joy in your work.

This may seem like a really weird principle to have in a book about
coding careers. But it can add so much value and impact to your
work, disproportionate to the amount of effort spent, that it had to
be included.

14.1 What is Sparking Joy?


Marie Kondo’s 2019 Netflix series swept the zeitgeist with the idea
that we should declutter by getting rid of everything that doesn’t
tokimeku, translated as “Spark Joy”.

While we are used to this idea from the perspective of the consumer,
the principle cuts equally the other way as well. We live in an Age of
Abundance, which is also an Age of Noise. We creators,
producers, and developers should all think about how to make our
work “spark joy” - lest it be “Marie Kondo”-ed away like everything
else.

“Spark Joy” is hard to define, because it is exactly as precise as the


human emotion of “Joy”. But in embracing that vagueness, we
understand that people are primarily not rational - not in what
we are drawn to pay attention to, nor what we decide to use, nor
what we choose to talk about. We might have perfectly good
rationalizations of why we like something, but often the real reason
can reach deep into the subconscious.
“I’ve learned that people will forget what you said, people
will forget what you did, but people will never forget
how you made them feel.” - Maya Angelou

14.2 Why It Works


Look at this group of tomatoes:

Your eye went straight to the red tomato. We notice when things
stand out. This is known as the Von Restorff Isolation effect - when
multiple similar objects are present, the one that differs from the rest
is most likely to be remembered. And what we remember is
what we value.

You’ve seen Von Restorff at work all over the Internet:

You can’t help it, your eye goes straight where they want it to go.

In the same way, you should want your work to stand out in the
memory of everyone from your colleagues to your potential
customers. Because you’ve given them something remarkable to
hinge on, they can then become your biggest advocates.

Sparking Joy isn’t just about standing out, though: so long as your
work evokes good vibes with people, they’ll associate you with
positive emotions.

In the same way that Broken Windows can encourage further crime,
having examples of excellence in your work causes the reverse effect,
which has been called the Aesthetic Domino Effect. Putting sparks of
joy in your work shows people you care and inspires other people to
do the same.

14.3 Examples
We’ll start close to home, in code, and widen out in concentric circles
of opportunities you will come across. This isn’t an exhaustive list; it
is just meant to give some inspiration for how you can Spark Joy
with the things you do day-to-day.

14.3.1 Sparking Joy in Code

Hell is not understanding my own code. - Kyle Simpson

Code is read more than it is written. If your code isn’t a joy to read,
then it will be difficult to use and dreadful to refactor. Avoid Hasty
Abstractions as far as possible. We constantly need reminders to
avoid Code Complexity:

from Fred Brooks warning us about Accidental Complexity, to


Rich Hickey exhorting us to decomplect
from Bob Martin teaching us to write Clean Code to Kent Beck
teaching us to write sensible tests for them
from Sophie Alpert (former manager of React) encouraging us to
facilitate local reasoning, to Dan Abramov showing us to design
code that is Optimized for Change.

Everyone knows naming things are hard - there are many opinions
here - if something is too complicated to give a good name to it,
you’re probably giving it too much responsibility. Heed your code
readability as a code smell.

Comments explain why, Code explains the how. - Jem


Young

Code comments are a developer communication cheat


code. They don’t have any performance impact (usually!), and can
help avoid others wasting time. Instead of explaining what the code
is doing, which is often evident from just reading the code itself and
liable to go out of date when code is changed, you can try to note
why some choices were made, or why the “obvious” approach wasn’t
chosen, or give an ASCII art diagram of how the code works. When
you anticipate what I’m going to ask as I read your code, believe me,
that Sparks Joy.

According to Sarah Drasner (elaborated in talk form here),


comments can serve these other good purposes as well:

Clarifying something that is not legible by regular human beings


Break up chunks of code, like chapters of a book
Pseudocode to keep the logic straight while writing the code
Indicating TODOs or what parts of code are OK to refactor
Serving as a teaching tool to fellow teammates
Admitting where you got it from StackOverflow

I think the best written, most elegant code in the world


cannot compare even remotely to well done, natural
language documentation when it comes to
communicating the intention and context of what
was built. How this thing works, why we built this thing.
The code can explain what it does and at a technical level
how it does it, but it doesn’t explain the business
reasons and impact, or even some of the other systems
that might depend on it… A lot of people underestimate the
value to the doc writer of having to sit down and write
those docs… You might discover things about what
you just built and realize: “Oh wait, I missed something!”
- Jared Short

Great error design sparks joy. Developers often write services


and modules to be used by other developers, even from within the
same app. Most of these interactions will be governed by some sort
of contract, explicitly specified by design documents or an OpenAPI
spec or something similar. However, what is usually underspecified
is what to do when things go wrong:

A normal error message tells you an error happened


somewhere.
A good error message tells you the local state that caused the
error.
A great error message tells you probable causes and how to fix
it.
A terrible error design doesn’t show up at all - a silent error.

The quantity of error messages also matter. Never normalize


errors. Don’t cry wolf. If you train people that they can ignore your
errors, they will ignore important errors, and you will get lazy in
when and how you error. You can at least have a hierarchy of errors -
a simple info, warning, or error hierarchy will usually do, but
you can explore Syslog severity levels for something more formally
designed. Erroring too eagerly can also cause a lot of start-and-stop
debugging - instead, make your errors as lazy as possible - if
the program doesn’t absolutely have to stop, don’t. Use a notify()
function that users can configure to buffer and log these errors.

You might expect these things to be covered in code standards


documents. But Code Standards usually address the minimum
required standards (for good reason, to avoid being onerous). To
Spark Joy, we look for opportunities to go above and beyond. One
way to be a developer that others enjoy working with is to write
code others enjoy reading and using.

14.3.2 Sparking Joy in PRs and Issues

Well crafted PRs and issues spark joy. Even when you are
writing out of frustration in dealing with a problem, the ability to
keep your cool, provide context and concise information, and help
them help you is a boon.

StackOverflow has a good guide on How to ask a good question, but


you can also go above and beyond in easy ways:

GitHub makes it very easy to attach images and gifs to issues, so


we should use that wherever appropriate to convey information
as that is very high-bandwidth.
Use an app like Annotate or Zappy to take and annotate
screenshots.
For gifs, the open source LICEcap app lets you control
everything down to the framerate and recorded screen area.
This helps you isolate bugs in motion.
Sometimes you need longer form commentary than just
screenshots or gifs. Record quick video demos or bug
reports with narration and post it up to YouTube as an unlisted
video, and include the link to your report. A five minute effort
from you can help resolve a lot of back and forth with the
maintainer/potential user of the project.

A lot of GitHub collaboration is asynchronous and faceless. It’s


common for people to say they will do something - create a repro, try
out a beta, work on a fix - and then never return. Simply doing
what you say you are going to do sparks joy.

Maintainers can also do a lot to make contributors feel welcome:


The All Contributors Bot helps recognize contributions from
everyone, even non-code contributions like design, financial
support, and docs translations.
Use a feedback grading system like Netlify’s Feedback Ladder or
Conventional: Comments to give praise and indicate severity of
issue
When merged PR’s are released, the semantic release bot can
notify contributors that they can now use their PR as part of the
standard distribution!

14.3.3 Sparking Joy in Docs

The most high impact way a developer can spark joy is in writing
good docs. It is the first thing every new user and team-mate reads,
and shows that you care about the project.

You don’t have to create a bells-and-whistles docs site for every little
project. For most things, a really good README is more than
enough - but you can do a lot to “sweat the README”.

Get straight to the point. Place Installation, Examples, and API


docs up front and use a Table of Contents generator to make it easy
to navigate. Keep them up to date, and write example code with the
understanding that developers will copy and paste while skimming
over most of the explanations. Even where copy and paste is not
possible, for example when developer keys are concerned, you can
show the expected form of the key for people to visually verify they
have the right one, e.g. API_TOKEN= # e.g.
MY_API_TOKEN_1234

Tip: In the Node.js ecosystem, dotenv-safe is helpful for


enforcing checks that environment variables are specified
properly.
Licenses matter in open source. Some legal interpretations don’t
allow developers to even look at unlicensed code, much less use or
contribute to it. Learn the difference between copyright and copyleft,
and pick a license that reflects your values. More importantly, don’t
use software that might compromise your company’s intellectual
property. You can use tldrlegal to understand licenses, or rely on
approved licenses from the Open Source Initiative. If in doubt, use
MIT. It takes seconds to add a license, either through a CLI (npx
license mit) or through GitHub’s UI. Make it a habit!

CI Badges are associated with quality. It’s tempting to regard docs


badges as performative “pieces of flair”, but an academic study of
this phenomenon has actually found that badges with underlying
analyses, e.g. displaying build status, issue resolution times, and
code coverage are predictive of project quality. Shields.io makes it
easy to set up a selection of great badges. Correlation isn’t causation:
this probably has more to do with the kind of maintainer that adds
badges than implying that badges cause project quality. But you
could be the kind of maintainer that shows they care!

Side note: Not too many badges! 4-6 badges seems like the
sweet spot - any more and the “Christmas Tree” effect starts
showing you are “trying too hard”.

Repo Metadata should also be given proper attention. GitHub allows


you to place a description of the project at the top, as well as to place
a link. Be sure to put your best oneliner pitch in there, and to link to
a live project of the demo! That is literally the first place developers
look.

READMEs are typically written in Markdown, which imposes some


strict order on your content, but you can often break that monotony
by using some HTML alignment with <div align="center">, or
adding a logo or banner (either ask for contributions or use a
generator like Hipster Logo Generator, Hatchful, or Excalidraw).

Pay attention to the structure and relative weight of your


documentation. Nobody enjoys reading big blocks of text - break it
up into bullet points or tables where possible. With GitHub-flavored
Markdown, you can even hide lengthy explanations of edge cases in
HTML <details> and <summary> tags interspersed with
Markdown, which helps make your docs useful for both the skimmer
and the dev who wants to dig deeper.

Automate formatting for your docs. You can run prettier as a git
hook (with husky and pretty-quick for a fast experience), and use
doctoc to keep your Table of Contents up to date (also available as a
GitHub action).

Sometimes a picture speaks a thousand words. Feature screenshots


or a demo gif if possible. For “How it Works” sections, you can also
create simple ASCII diagrams using tools like ASCII Flow and
Monodraw to explain systems and concepts. You can even use free
drawing tools like Excalidraw, Draw.io (in VS Code too!) and Miro to
illustrate with color.

“I swear by the README.md svg logo. No matter how


good/bad the code is, you put a logo on there, and I’ll
probably npm install it.” - Matt Hova (somewhat joking)

There’s no end to things you can add for Great Documentation - so it


is best to match your documentation to the project maturity. Two
nice features that are always appreciated: Searchability, and a
“Tradeoffs” or “When NOT to use this” section.

Anecdote time: Great docs aren’t only important for open


source marketing and adoption. One of my best dev memories
was hearing a new employee coming across an internal repo for the
first time, and finding an extensively well explained README with
diagrams to show how everything worked and even a short
explanation of project file structure. The engineer responsible for
that hadn’t even touched the repo in over a year, but the new person
was able to pick it up right away. You BET the new person was
overjoyed to find such great docs, and sang its praises all over the
company’s internal chat. As for the original engineer? She was
promoted to Principal Backend Engineer not long after.

14.3.4 Sparking Joy in Demos and Products

Demos are GREAT opportunities to spark joy, because of the relative


freedom of a non-production, non-core code app. On-brand humor
can really help to sell the intent of your project while also helping
with marketing - just check out the landing page of and social media
reactions to Muzzle.

Even when you are demonstrating how to interact with an API, you
can use joke APIs like this one for “clean” jokes or this one for
developer jokes or this one for devops jokes. If you need to be more
serious, check Public API Lists for interesting APIs you can demo
with.

The best demos localize for their audience. People notice when
the talk they are watching could not possibly work for any audience
except for them. When Divya Tagtachian gives a talk in Boston, she
talks about local seafood joints. The same demo switches to Deep
Dish Pizza in Chicago. When she speaks in Amsterdam, she makes
funny Dutch puns and discusses GDPR. In Nigeria, a demo using
milk tea gets swapped for Jollof Rice. In your marketing pages, you
could use avatars and illustrations that reflect the colorful variety of
your intended audience. Audiences notice when you go the extra
mile for them, and this sparks joy.
Sweat the accessibility. It’s not only a good habit to do it even in
non-production demos, it truly sparks joy for keyboard and
screenreader users used to a sea of inaccessible apps. Accessibility
isn’t just for those with disabilities – it is becoming a key product
differentiator among productivity and developer tools (even for
heavily visual apps like Slides.com) and apps for outdoor or
industrial use. Marcy Sutton, Lindsey Kopacz and Jen Luker offer a
wealth of talks, resources and workshops you can check out.

Storytelling can make for a compelling demo. Your visitors can get
invested in characters, whether made up or referencing pop culture.
One of the most compelling DevOps demos I have ever seen was
delivered through telling the story of a coworker named Pavel. Years
later I still remember Pavel’s name and what he went through.

Don’t forget your empty states! Empty states are common to see
with demos, especially when users create a trial account and see
nothing in their dashboard because they don’t have any data yet.
Most programmers leave empty states empty. But that blank space is
free real estate to prompt the user to do the next action! For apps
like Superhuman, the empty state is not only a goal, it is a
competitive advantage. Check emptystat.es for more inspiration in
real apps.

Our discussion of demos is starting to veer into the dreaded Full App
Design territory. Beautifully designed demos definitely spark joy -
but does that mean we should hire designers? Become designers?

Note: Maybe… Maybe not! Check out Design for


Developers in a Hurry (Chapter 33) for simple tips on
sparking joy with design!
14.4 The Extra Mile
There is no end to the possibilities of sparking joy in your work.
Here are some more ideas that just didn’t fit in the above categories:

Quick Feedback: This is the age where “ghosting” people is


common, where people laugh off being “bad at email”. If you
make the effort to be responsive, it will get noticed. Think about
how much you crave feedback for your own work. Others want
that too. You can be a feedback fountain and people will keep
coming back to you for more.
Getting great at email is simple, but not easy. Your humble
author is still working on it. But the core idea is the same as
David Allen’s Getting Things Done methodology - if
something can be done in under 2 minutes, do it right away.
Most email can be deal with like that. Ditto chat, GitHub
notifications, text messages, and so on. You don’t have to be
checking them all the time, but making sure you check and
respond once or twice a day keeps you responsive to others
who care about you and work with you. This sparks joy.
Care about others: It’s not always about you. Keep watch on
others’ work and comment with encouragement as they go. I
even add a star onto private GitHub repos, which no-one else
sees, just to send a little sign to my coworkers that I am
watching and they have my support.
Take minutes: Meetings happen too casually in the modern
workplace. Especially if information is scattered through a
bunch of asynchronous chat logs, it can be hard to search for
and reference in future. Taking the effort to gather up what was
said, what positions were considered and what decisions were
made not only helps improve your image but it genuinely makes
team communication better! Bonus points if you are male and
see minute-taking fall disproportionately on female coworkers
(it does, and they appreciate allies calling it out).
Deep research: Doing deep background research on a podcast
guest and dropping a hint to let them know! (Example - when
Rob Hope interviewed Adam Wathan, he discovered Adam’s
heavy metal preferences and asked him about it)
Secret compliment: When someone does you a favor or does
particularly good work - send in a compliment or thanks to their
manager. This will help during their annual review!
Handwritten thank you note. Enough said. Even if the
thank you is years too late, a sincere gratitude letter can make a
person’s day.
Easter Eggs: Sign bunnys and Cowsay in CLI output

Being hilariously on brand: Example - Design Pickle


wearing a pickle suit and handing out pickles made them
memorable and viral
Personal Tokens: Shirley Wu does data visualization, so she
printed out business cards that show off her work, that you can
only get if you have met her in person.
Unusual Analogies: In reviewing his friend’s book, “Exactly
What To Say”, Clay Hebert could have said that it contains “only
the good stuff”, which is on-theme with its topic. Instead, he
called it the “balsamic vinegar reduction of books”. That
unusual image sticks with readers, and you can be sure that Clay
strengthened his friendship that day.

Your capacity to inspire joy is only limited by your creativity. But


people always notice when you do. Going the extra mile to
delight people invokes the principle of reciprocity, which is one of the
most powerful forms of influence.

“There are no traffic jams along the extra mile.” - Roger


Staubach, the Hall-of-Fame football player

If you didn’t know about the power of sparking joy in others, now
you know.
Chapter 15
The Platinum Rule
You’ve heard of the Golden Rule: Treat others as you want to be
treated.

I think it’s incomplete. I think people actually operate by a higher


standard. I propose the Platinum Rule: Treat others as THEY
want to be treated.

15.1 The Platinum Rule


To understand how I got here, you have to understand that I have
some particular personality traits that make the Platinum Rule
relevant for me. I prefer directness. My bar for “done” is lower than
yours. I like self aware people and humor. I prefer tough love.

This means I prefer shipping an imperfect thing and iterating rather


than lining up my ducks in a row. This means I don’t engage in
compliment sandwiches. This means I make fun of myself and
anything I strongly identify with, which can sometimes include
people I work with. This means I often am too harsh on something I
care about.

Some of you are reading and nodding and don’t see what’s wrong.
That’s what’s wrong.

Suppose you ridiculously simplify human preferences down to More


Particular vs Less Particular, and human interaction down to
how you treat others vs how you want to be treated. The
Golden Rule would advise More Particular humans to treat others
like they want to be treated, which is a higher standard (however you
define it) than Less Particular humans. This is fine, they just end up
very considerate. However, if the Less Particular people were to take
this advice, they would come up complete assholes to More
Particular humans, who would be unable to work with them.

Hence, the Golden Rule is broken. It was made by a More Particular


person who doesn’t realize it.

It doesn’t really even matter what the relative quantities of More


Particular vs Less Particular people are - if these people are to work
together, then they must coexist under a different social contract.

I propose the Platinum Rule to be that contract: Treat others as


THEY want to be treated.

On one hand this seems like basic human decency: Of course you
should be considerate of others’ feelings. Use their pronouns.
Respect their agency and freedom.

On the other, it can seem FAR too accommodative - what if people


abuse the system and want to be treated unreasonably well? Double
standards exist everywhere when it comes to self interest. Well, a
line must be drawn somewhere.

It’s imperfect, but probably the right balance of where you and I
should operate is somewhere in between the Golden Rule (extreme
self-centered empathy) and the Platinum Rule (extreme other-
centered accommodation).

15.2 The Silver Rule


If the Platinum Rule is “better” than the Golden Rule, what would a
Silver Rule look like? (I like stretching good ideas even further than
originally intended, an idea I took from Brian Chesky).
A Silver Rule would be something that is often treated as secondary
to the others, but still important and valuable. And in the format of
“Treat x as X wants to be treated”.

Here’s my proposal for a Silver Rule: Treat yourself as you treat


others. A nice inversion of the Golden Rule.

In Gretchen Rubin’s Four Tendencies Framework, she splits people


by how they respond to inner and outer expectations, which seems
very apropos to this topic.

Questioners are most in need of the Platinum Rule. But Obligers,


the majority of the population, probably need the Silver Rule most.
For Obligers, self care must not get sidelined by self sacrifice. This is
something we address in Chapter 40.
Chapter 16
Good Enough is Better than
Best
In general, you move faster and feel a lot less stress once you realize:
You don’t need “the best”, you just need “good enough”.

Looking for “the best” involves:

Obsessing over benchmarks


Caring what influencers think
Keeping up with new releases

Looking for “good enough” involves:

What YOU need done


What YOU know well
What YOU enjoy

The more reversible the decision, the faster you should


move.

16.1 Why It Matters


This realization was borne out of answering yet another beginner
question on what was the best library, the best course, the best
framework.

The problem with being a beginner is you don’t even know that these
are bad questions.
What beginners lack is a framework for evaluating technical merit:

When you’re a beginner, “biggest is best”. You’re swayed by


things with the most followers, the most users, the most number
of recommendations by friends. Social proof rather than proof,
because we are more familiar with people than with the
technology.
Once you are a little more discerning about tradeoffs and cutting
edge work, “best is best”. You see how often “the biggest” is
actually not “the best”. Sometimes this is because the need to
appeal to everyone creates a drive toward the “lowest common
denominator”. Sometimes supporting everyone’s needs creates
an unmanageable sprawl of cruft. Sometimes they get big
simply because they prioritize marketing over substance. This
happens enough that you can develop mistrust of the biggest
anything. But you still cling to the idea that there is an objective
“best”, by whatever metric, that others are missing out, and that
you/your company should use “the best” because it is the best.
As you become an expert, you realize that “the best” technology
often doesn’t “win” for valid and underappreciated reasons, that
everyone has different priorities and circumstances that make
them evaluate “the best” differently from you. So the strongest
endorsement you can make becomes “the best for me”, and you
learn to respect the choices people make for themselves even if
you disagree with them. Basically the only thing that matters is
that the technology is good enough for what you are trying to
use it for.

I think we all could do a better job of framing engineering and life as


satisficing rather than maximizing operations. You can achieve more
success and happiness when you look for “good enough” and then
move on, instead of constantly looking for “best” (unless that is your
entire value proposition, e.g. you are a professional tech reviewer).
16.2 The Problem with Seeking “The
Best”
We spend a lot of time seeking “The Best” of something. The best
schools. The best jobs. The best home. The best cities. The best
restaurants. The best partner. The best framework. The best
course. The best book. The best movie with the best actors.

Who doesn’t want to have the best? Who wants to live their life
settling for “alright”?

Seeking the best has several hidden costs.

Happiness: You don’t always know that you’ve got the best.
You make your decisions under imperfect information — what
reviews say, what friends tell you, what the marketing says —
and then you buy something. Seeking the best only to find you
have ended up with the second best is a recipe for
disappointment. You end up comparing long feature checklists
looking for the most amount of green. Most of which you don’t
need. Even picking something, anything, gives you anxiety
because you fear missing out.
Cooperation: Looking for the best transforms your world into
a zero-sum finite game rather than a positive-sum infinite
game. It’s cancerous to your worldview.
Efficiency: It is also ridiculously inefficient. The corollary of
the Pareto principle is that the last 20% of something is the most
expensive - and that’s what you have to sweat if you must seek
“the best” all the time. It’s fine to seek the best - just know that
you’re going to incur a disproportionately high cost.
Agency: People game “best-seekers” all the time, by defining
for you what “best” is. Who wants to be Mayor on Foursquare?
Who can compete to get the most subscribers on YouTube?
Which wait-service staff will be Employee of the Month? Games
to give fake status to people who live in the system, by people
who profit off the system. If you seek “good enough”, you
reclaim your own agency.

“Good Enough” is, well, good enough. Learn to define that for
yourself, and to be happy when you get it, and you will be more
reliably happy, cooperative, productive, and independent than you
ever were.

Author’s Note: There is historically an even more


aggressive framing of this principle – “Worse is Better”.
This was first coined by Richard Gabriel originally to
describe the idea that software quality (in terms of practical
usability) does not necessarily increase with functionality
(the full text of the essay is here). However I feel the
oxymoronic nature of this phrasing implies that “worse” is
desirable in all situations. It isn’t. Therefore I have opted
not to use it, in favor of “Good Enough”.

16.3 False Confidence: Accuracy vs


Precision
A close cognate of seeking “The Best” is being impressed by more
precision instead of accuracy. Having more precision gives you more
confidence, but doesn’t actually make you more right. Only accuracy
measures how right you are.

Remember the difference:


Seek to be approximately correct vs being precisely wrong.

The seductive lure of precision can come in several forms - decimal


places, high frequency updates, one-axis comparisons of complex
things, the majority consensus, the highly credentialed expert.

Every time you see:


Financial news media quoting stock price changes down to two
decimal places (caring more about appearing precise than
providing insight)
Founders deciding the success or failure of output based on daily
or even hourly metrics (especially when long term/probabilistic
results are concerned)
Single-metric benchmarks (“My framework is 100x faster than
$POPULAR_FRAMEWORK!”)
Decisionmakers relying on “the wisdom of the crowds” as a
proxy for objective truth (too often, the crowds are mostly
reflections of the opinions or shared facts of a small group of
elites)
People assert more than 3 letters after their name (relying on
credentials to turn off your brain rather than facts and strength
of argument to turn it back on)

Be very wary. It’s not that precise people are always wrong. It’s
literally that being more precise has little to do with whether you are
more accurate. It is always easier to be more precise than it is
to be more accurate. One produces more confidence. The other
produces more results. Choose wisely.

The easier that data can be obtained, the less valuable it generally is
– not because of the relative surplus, but because nobody guards
worthless facts. This is good news for humans: In a world of Big-
Data-driven everything, there will forever be a place for judgment,
insight, and fundamental, First Principles Thinking
(Chapter 17). However, humans also have a built-in aversion to
ambiguity and uncertainty, known as the Ellsberg paradox, so we
end up clinging on to whatever data we do get, no matter what it is
worth.

False Precision is not just misleading, it is actively harmful, because


it leads to False Confidence. Here it is best to simply recount a story
told by Adam Robinson in Tribe of Mentors:
“In 1974, Paul Slovic — a world-class psychologist, and a peer of
Nobel laureate Daniel Kahneman — decided to evaluate the effect of
information on decision-making. This study should be taught at
every business school in the country. Slovic gathered eight
professional horse handicappers and announced, “I want to see how
well you predict the winners of horse races.” Now, these
handicappers were all seasoned professionals who made their livings
solely on their gambling skills.

Slovic told them the test would consist of predicting 40 horse races
in four consecutive rounds. In the first round, each gambler would
be given the five pieces of information he wanted on each horse,
which would vary from handicapper to handicapper. One
handicapper might want the years of experience the jockey had as
one of his top five variables, while another might not care about that
at all but want the fastest speed any given horse had achieved in the
past year, or whatever.

Finally, in addition to asking the handicappers to predict the winner


of each race, he asked each one also to state how confident he was in
his prediction. Now, as it turns out, there were an average of ten
horses in each race, so we would expect by blind chance — random
guessing — each handicapper would be right 10 percent of the time,
and that their confidence with a blind guess to be 10 percent.

So in round one, with just five pieces of information, the


handicappers were 17 percent accurate, which is pretty good, 70
percent better than the 10 percent chance they started with when
given zero pieces of information. And interestingly, their confidence
was 19 percent — almost exactly as confident as they should have
been. They were 17 percent accurate and 19 percent confident in
their predictions.

In round two, they were given ten pieces of information. In


round three, 20 pieces of information. And in the fourth and
final round, 40 pieces of information. That’s a whole lot more
than the five pieces of information they started with. Surprisingly,
their accuracy had flatlined at 17 percent; they were no more
accurate with the additional 35 pieces of information. Unfortunately,
their confidence nearly doubled — to 34 percent! So the
additional information made them no more accurate but a
whole lot more confident. Which would have led them to
increase the size of their bets and lose money as a result.

Beyond a certain minimum amount, additional information only


feeds — leaving aside the considerable cost of and delay occasioned
in acquiring it — what psychologists call “confirmation bias.” The
information we gain that conflicts with our original assessment or
conclusion, we conveniently ignore or dismiss, while the information
that confirms our original decision makes us increasingly certain that
our conclusion was correct.”

The overall moral of the story is the same as we began with: Seek
“Good Enough” information, and have the appropriate confidence
when you Bet on Technologies (Chapter 24), companies, and
people.

Author’s Note: The naming of this Principle is definitely


influced by the inventor of the Lithium-Ion battery, to
whom we owe so much of our modern day electronic
conveniences: the appropriately named John B.
Goodenough.
Chapter 17
First Principles Thinking
First Principles Thinking (FPT) is starting from unequivocal base facts and
building up toward some vision or explanation of reality. It involves reasoning
by deduction, rather than by analogy or appeal to authority. It’s been called the
Dumbest Thing Smart People Do.

Big O Notation is many developers’ first brush with FPT. As a developer, learning
to reason from first principles makes you see the bigger picture behind all the
engineering work you do, from project estimation to technology evaluation. As
you get comfortable with your tools, you should start to look beyond them
toward their underlying patterns and limitations. This is one of the key
transitions you will make in the transition from Junior to Senior (Chapter 5).

Push yourself to think beyond labels. Questions like “is it production ready?” or
“does it scale?” or “is it blazing fast?” have very little meaning absent your own
context. For a hilarious take on this, check out this parody video discussing the
technical merits of Node.js between two developers. It’s funny because it is true.
So many beginner developers, and too many senior developers, think and talk
with labels and never go past that. Learn to break down how things work and
derive your own answers based on first principles.

When you are told that something cannot be done, First Principles will help you
ask “Why Not?” Conversely, if you are being tasked to do something impossible,
First Principles will help you quickly demonstrate nonviability by breaking down
the problem to a set of base facts.

Jeff Dean was known to circulate a short list of Latency Numbers Every
Programmer Should Know at Google, reminding developers of the total
futility of trying to do transatlantic roundtrips faster than 150ms because it
is limited by the speed of light.
John Carmack, working on gesture interfaces, points out that the speed of
thought is only 110m/s, placing 9ms of latency in your arm. This is hugely
sobering for his field of human-computer interfaces.
You can keep your own list of base facts for performing Napkin Math in your
own domain.
Having a good grounding in inviolable truths helps you dispel myths. If you
break apart a bundle, whether it is a system or product or library or belief, and
its constraints aren’t demanded by the sum of its parts and Amdahl’s law, there
is probably opportunity.

Ironically, plenty of explainers (1, 2, 3) on FPT immediately appeal to authority


like Naval Ravikant or Charlie Munger or Elon Musk. Elon probably has done
the most to popularize it in recent memory, but if you must be sold on basis of
authority then you haven’t really got the point of FPT.

To embrace FPT, you need to understand the philosophy of logic and


epistemology.

17.1 Logic

Logic is the analysis and appraisal of arguments.

I first encountered this via a philosophy lecturer I had in junior college, Lionel
Barnard (who was actually supposed to teach Economics, but preferred to turn
our class into a little PPE program for our intellectual gratification). In
particular I have always favored the format of Syllogism, which takes a form like
this:

1: All men are mortal.


2: All Greeks are men.
Therefore: all Greeks are mortal.

“Therefore” denotes a logical and inevitable-to-the-point-of-truism consequence


of the first two propositions. This underlies a lot of how proofs are done in Math,
and the other basic sciences - take N facts, put them together, derive a new, more
useful fact that is as real as those other facts because it is built on top of them.

You can’t get very far if you only rely on facts, though, because there are many
more unknowns and indeterminate or stochastic processes than there are facts.
So you can supplant your syllogisms with Axioms - assumptions that you take to
be true. You don’t HAVE to prove them true, but you can show by deduction that
given an acknowledged set of assumptions, you can arrive at a logically sound
conclusion. This is FANTASTIC, because it lets you enumerate your beliefs. It
also allows you to change your mind instantly if your assumptions are proven
wrong (especially handy because you can’t prove a negative).

So that’s great - who would argue against Logic?

It turns out that logical deduction has limits, and in fact takes a lot more effort
(in corralling facts - sometimes what you believe to be true isn’t true, as in the
reproducability crisis in the social sciences - and validating the integrity of the
logical chain of arguments), and by far the more prevalent method we operate on
is Induction. We study this in Epistemology.

17.2 Epistemology

The study of the nature of knowledge, justification, and the rationality


of belief.

Epistemology addresses the question of how do we know what we think we


know.

There are many approaches to the study of Certainty so I will blithely ignore
most of them and contrast two: Induction vs Deduction.

I have already presented deductive reasoning above - given a base set of


general facts, we build up as high as we can to useful general conclusions.

Inductive reasoning is the opposite - taking specific real world observations


and generalizing them to general truths. This is problematic in SO many ways,
and we have known about the problem of induction for hundreds of years. Yet
this is how most of us conduct our businesses, lives, and core belief systems.

Induction is insidiously persuasive: You may laugh at someone taking a single


anecdote and generalizing it to everybody. But this is philosophically only
slightly worse than taking a population survey and generalizing, which is again
only slightly worse than looking outward and seeing what else exists and
inferring that that is all that can exist (the proverbial frog in the well).

We do this every day. We dress it up in statistics and numbers to make it feel


more truthy. We call ourselves things like empirical or data-driven. We look at
someone’s resume for assessing capability to do a job - unobjectionable at first
glance, until you see how much people’s opinion changes when “A went to
Harvard” or “B was the guy who took X from 10-100m in ARR”, implicitly
projecting that that transfers. When hiring for a thing (say, a job in React) we
overweight people who have done the thing (a previous job in React) over people
who could do the thing (anyone with extensive experience in
JavaScript/webdev). We keep up on news and trends and competitors and
neighbors and peers and celebrities and friends and family and that represents
our reality. And rarely question its nature and limits.

Induction and Deduction are not on equal footing. As a rule, induction


datapoints are far more readily available, while deductive facts are far more
timeless, but costly to pin down. Only logicians, mathematicians and theoretical
physicists have the luxury of starting entirely from the basis of First Principles.
Everyone else must make do with some axioms accepted on faith to have a hope
of getting somewhere useful. The problem arises when we go too far and
construct our entire worldview out of axioms and received, untested wisdom.
Humans are GREAT at backfitting/rationalizing from present datapoints, but
terrible at examining the basis of their beliefs.

“1500 years ago, everybody ‘knew’ that the earth was the center of the
universe. 500 years ago, everybody ‘knew’ that the earth was flat. And
15 minutes ago, you ‘knew’ that humans were alone on this planet.
Imagine what you’ll ‘know’ tomorrow.” - Men in Black

Addressing your Epistemology head-on is very important for decision-making -


because if you don’t know how you know what you know, then how do you have
any faith in the decisions you make, based on that knowledge?

Acknowledging Epistemology is also important for building mental models -


because you can either fill your explanations with a bunch of incidental junk
complexity with the redeeming quality of being real, or you can start from a
bunch of irrefutable base facts and build up to something theoretically possible.

17.3 Applications
My talk on Getting Closure on Hooks was cited as a “First Principles” talk, as is
the followup on Concurrent React. I think all talks and blogposts in the From
Scratch genre, like this on React Router or this on Redux or this on the
hardware-software interface is great First Principles fodder. There’s even an
entire repo on GitHub for Build Your Own X projects!

But of course, First Principles can be applied far beyond code. The Drake
Equation is a well known first principles decomposition of the number of alien
civilizations in our galaxy. You can explain everything from Music to Computing
(to Coding Careers!) with First Principles.

17.4 Systems Thinking


More generally, a quantifiable set of first principles for any system is now in
vogue as Systems Thinking, quoting Donella Meadows:

PLACES TO INTERVENE IN A SYSTEM (in increasing order of


effectiveness):

12. Constants, parameters, numbers.


11. The sizes of buffers and other stabilizing stocks, relative to their flows.
10. The structure of material stocks and flows.
9. The lengths of delays, relative to the rate of system change.
8. The strength of negative feedback loops.
7. The gain around driving positive feedback loops.
6. The structure of information flows.
5. The rules of the system.
4. The power to add, change, evolve, or self-organize system structure.
3. The goals of the system.
2. The mindset or paradigm out of which the system arises.
1. The power to transcend paradigms.

When you are trying to change a system and it feels too hard, a reliable trick is to
find out where you are in Donella’s list and work your way downwards.

I have in my head a set of other questions I also like asking:

What do people really want? Usually it is something simple, but not


easy. For businesses, this involves identifying Jobs to Be Done. For people,
Maslow’s Hierarchy is a good reference, as is the list of Things You Can’t
Buy: Happiness, Freedom, Time, Health, Wealth, Family, Purpose, and so
on.
What are the physical limits? For example, the speed of light, but also
you can do thought experiments on the limits of Moore’s Law vs Wirth’s Law
or use Big O notation to model scaling factors of Personal Growth
What are the units of output? Related to systems thinking, but this is a
reductive method that has been very helpful in taking the hype out of tech
startups and reducing Uber and AirBnb to driver miles and room nights.
What is your success metric? How do you know if you succeeded?
Starting with the End in Mind is a good habit for productivity but Christine
Yen likes to ask this to help guide what Honeycomb.io does.
Who cares? Don Valentine’s cryptic two word test on who the end
customer really is and how much they care.
What are the rules of the game, and how are they changing? When
you play any game, you first find out the current rules for winning, but you
must also find out how the rules are changing in order to win in future. This
is also called Game vs Metagame.

In the software domain, Will Larson is a leading voice on how to apply systems
thinking to engineering management.

17.5 Further Reading


Napkin Math
Boring Technology
Wait But Why on Elon Musk
Neil Kakkar on First Principles Thinking
Donella Meadows on Leverage Points
Li Haoyi on First Principles
Chapter 18
Write, A Lot
“What many people underestimate is that being a good
writer, whether that is through emails or through
documents, allows you to be more impactful. I see many
engineers ignore that skill. You might be proud about your
code. You should also be equally proud of the craft of
writing… Writing is a highly underestimated skill
for engineers.” - Urs Hölzle, Google’s first VP of
Engineering

If you are serious about making an impact in your coding career, you
should get good at writing words as well as code. Developers
write in a ton of scenarios both at work and for their own careers,
and there are a host of attributes that make writing down your
knowledge particularly rewarding for a knowledge worker like you.

My ultimate recommendation is to build a high output writing


habit, eventually earning a “Do-It-Yourself PhD.”

18.1 Why Developers Write


The most straightforward reason why developers write is because
they have to for work:

Writing emails, code reviews, issues and pull requests.


Developers have to write proposals for projects they want to
work on.
They also have to explain blockers and outages when things go
wrong. Shit Happens - If you can write a great explanation
demonstrating you understand root cause and how to fix, that
can add a silver lining to any mistake.
They certainly have to write self assessments for promotions,
and peer reviews for their teammates!
Senior developers are expected to write design docs before any
implementation takes place.
Some companies even evaluate developer impact based on
ability to communicate effectively with internal and external
partners.
60-70% of communication is nonverbal. Remote work
replaces body language with writing. And the only way to
scale remote work - according to Matt Mullenweg, who runs
Automattic (owner of Wordpress), one of the largest remote
companies on Earth - is to go asynchronous - replacing facetime
with even more writing. Therefore writing becomes a remote
work superpower.

Some developers write more words than code for their jobs, and have
more impact than someone who only codes. This reality only
increases as you go beyond your coding career, whether you are
managing people as an engineering manager, or raising funds as a
founder. Your writing style can differ drastically, as is clear when
you study internal memos from leaders like Steve Jobs, Bill Gates,
and Mark Zuckerberg. But they all agree on the criticality of writing
to scaling themselves. If you have the ability, encourage a culture of
written communication to scale the benefits of writing across your
entire organization.

“By writing well, you can scale your ability to communicate


efficiently to multiple teams, to an organisation or across
the company. And the ability to communicate and
influence beyond your immediate team is the essential skill
for engineers growing in seniority - from senior engineer to
what organizations might call lead, principal, staff or
distinguished engineer.” - Gergely Orosz

If you prefer a more technical metaphor, think of writing as caching


yourself:

“The database is like the universal source of truth, it is


where all the data lives about your users and customers…
Over time, as you grow, the database can’t respond to all
the requests, so you add a cache. This is how most web
applications scale. Writing is the cache. Documentation
is the cache. Code is the cache. The people in the company
- me - I’m the database.” - Sahil Lavingia

You can also do it for the sheer joy of sharing what you’ve learned.
That can be enough. In the words of one of the most prolific
developer-writers I know:

Ultimately, I really like sharing stuff that I’ve learned. It’s


some combination of “being informative”, “passing it on”,
“helping”, “teaching”, “not repeating myself”, and “showing
off / bragging”. I write because I have stuff to say,
because I know that I’m helping people, and
because I really can’t not write. - Mark Erikson

18.1.1 Documentation
I place Documentation in a special category because it is work
writing that is meant to last. You might be required to write docs for
your app or service, or onboarding docs for future hires.

Some companies go as far as to follow Documentation Driven


Development - no code is written until the docs for that code are
agreed on first. Jeff Bezos is famous for introducing “Six Pager”
Narrative Memos, which are briefings stuctured like mock press
releases to go through the exercise of envisioning what the project
will look like on launch day, and working backwards. These are
required before any major project is started at Amazon.

Writing great technical documentation is also critical for Developer


Tools companies, remote companies and Open Source:

John Resig attributes the success of jQuery to Documentation:


“On the very first day it was released, I had documentation
written. I sat down and went through every method and
documented it and how it worked and provided little
examples…(in 2006) jQuery was the only JavaScript library
with documentation!”
Taylor Otwell makes eight figures running Laravel as an
(almost) solo developer, and is even more blunt: “Whoever
writes the best documentation wins!”
GitLab’s handbook begins: “A handbook-first approach to
documentation is sneakily vital to a well-run business. While it
feels skippable — inefficient, even — the outsized benefits of
intentionally writing down and organizing process,
culture, and solutions are staggering. Conversely,
avoiding structured documentation is the best way to instill a
low-level sense of chaos and confusion that hampers
growth across the board.”

Technical writing is a deep discipline with a lot more specialized


knowledge than I have space to cover. Google has a great course on
it you can check out, however be aware that you don’t have to write
like Professional Technical Writers do in order for it to count as good
technical writing.

18.1.2 Career Capital

Most developers don’t write in public - a lot of their writing just sits
on company servers. Smart developers write so that they Don’t Go
Home with Nothing. They understand that the vast majority of
developer careers outlast their tenure at their current firm, and the
easiest way to establish expertise and build a reputation in the
industry is to write under their own names.

A good way to write for your own career is to publish under top
industry blogs and forums - anyone that pays you to write will have
rigorous editing standards, and you can practice your technical
writing while making money and gaining an audience:

Twilio Voices pays $500 per technical post, and usage of Twilio
isn’t required!
Digital Ocean and Linode pay $300 to write about Python, JS, or
Linux
WonderProxy pays $500 for content on testing
ClubHouse pays $500 for content for senior devs/eng
managers
Smashing Magazine, CSS Tricks, A List Apart, and LogRocket
pay $250 for front-end posts
FloydHub pay $150 for Data Science/AI/ML
Stack Overflow pay $500 for general programming content

You can find more on WhoPaysTechnicalWriters.com. Some other


platforms may pay for writing on a case by case basis - almost all the
video course sites like Treehouse, Lynda, Pluralsight, and Egghead
have some form of published writing component.
Two caveats to note when writing for other platforms - you lose your
copyright (they paid for it after all, but this is usually fine because
getting your name out there is more important in the early days) and
you have to go through the editing process (this is a good thing! You
want this!).

Not everything has to be for money - it is often easiest to get started


just by writing great answers on established platforms. Jon Skeet
rose to fame by answering prolifically on StackOverflow until he was
the top contributor of all time.

Personal Technical Blogs are a permissionless form of writing that


you own. Mattt Thompson created NSHipster, “a journal of the
overlooked bits in Objective-C, Swift, and Cocoa, updated weekly”,
and made a reputation as an expert in iOS and Swift. Jeff Atwood
and Joel Spolsky only met through their blogs, going on to create
StackOverflow.

You’ve also seen from the other principles in this book that you can
Open Source your Knowledge and create Friendcatchers
while you Learn in Public - if you own the domain, you don’t need
anyone’s permission to publish and you can build a brand on
distribution that you own.

Even when you code the next great Open Source project, you will still
have to market it. Here’s Dan Abramov on creating a successful
Open Source project: “It also means writing blog posts, making
tutorials, sending pull requests to popular open source project
examples to use your tool, talking to the users on social media
platforms to learn what they want, preparing promotional
materials (like tweets), reaching out to influencers, etc. Open
source is a lot of work, and having a project is not enough.”

18.2 What Writing Does for You


“Writing doesn’t just communicate ideas; it generates
them. If you’re bad at writing and don’t like to do it, you’ll
miss out on most of the ideas writing would have
generated.” - Paul Graham

Writing forces you to create rather than consume, and gives you
scale, structure, and power when you do it.

18.2.1 Scale

Writing scales infinitely. We used to write on stone tablets, and


then on parchment, replicating copies manually. Modern civilization
began with the invention of the Gutenberg Press, which made mass
reproduction of writing possible, and gave immortality to the best
writers. Computers digitized that process, and made it even cheaper
to copy text. The Internet made it trivial to spread great writing
worldwide in seconds. For the first time in human history, great
writing can now go viral. Other forms of media exist, with higher
engagement and information density, but writing will never be
beaten in raw reach. When you write, you scale your ideas,
your brand, and your self infinitely.

“Having a command of communication, in spoken form and


in written form, provides you with an Archimedes lever for
whatever other skills you have.” - Tim Ferriss

Writing is searchable, and writing lives forever. Search and


storage are things that human brains are particularly bad at - we
should offload that to computers as much as possible. It just so
happens that the most indexable and durable format for storing this
information is in writing. Do you remember what you worked on
five years ago on May 10th? No, but your journal does.

“When you write, you become a resource for your future


self. It’ll save you time (pulling up your own blog post is a
lot quicker than a fresh Google search), you’ll get all the
credit (instead of some Stack Overflow post), and it’ll make
all that writing feel even more worthwhile.” - Alex
MacArthur

A quick note on Search: Writing controls your narrative. For


people who don’t know you, your online presence is solely what they
find on Google. Most people’s “Personal SEO” is terrible. They
probably don’t have negative stories published online, but also
there’s usually a lot of random junk from their digital footprint.
Writing fills that empty space. If I googled you and found
excellent writing, I have a much better opinion of you before I ever
meet you. (And everyone googles you before an interview! It’s not
“fair” but it is fact.)

“If you’re not writing stuff on the Web, then when people
search for you they’re going to find stuff that you don’t
control.” - Joel Spolsky

18.2.2 Structure

“Writing is a tool for thinking. If you can’t build up a


thought structure over time and continually go back and
rethink and revise it, you’re limited to just what you can
hold in your head.” - Conor White Sullivan
The other thing brains are bad at is giving structure to a fuzzy cloud
of loosely related ideas. Writing organizes your thoughts.
Steven Sinofsky, who led the development of Office 95 and Windows
8, is more to the point: Writing is Thinking. When you write, you are
forced to a definite sequential order - even unordered lists have
implicit order. As we write, we give weight to key ideas and
emphasize word choice and phrasing. Links are the best addition of
the web to writing - You can hyperlink to original sources, so readers
can follow up if they wish, but still keep on topic with what you are
saying.

“Writing is a linear process that forces a tangle of loose


connections in your brain through a narrow aperture
exposing them to much greater scrutiny.” - Andrew
Bosworth

Writing is meditation for the busy mind. It forces an internal


monologue on what you prioritize, and what abstractions and
groupings describe your world. You could say that writing
defragments your brain and keeps you honest. When you
write down all your attempts to solve a problem, you engage in
rubber duck debugging that forces you to doublecheck whether what
you’ve tried is logical, and create a “save point” for you to check back
on in future. Software that is the final output of thoughtful writing is
often far better designed than software where writing is an
afterthought.

“Writing things down helped me codify what I actually


cared about, and helped keep us true to our principles as we
grew.” - Charity Majors
“Writing things down is a medium for self-discipline.” -
Andy Grove

Writing makes others perceive you as smarter. An organized


mind will seem instantly smarter than a disorganized one every
time. Because our brains lack structure, we crave structure. My best
talks start off with writing an outline, because a written outline is
the minimum viable talk. Just by having gone through the
exercise of organizing your thoughts, writing even helps you sound
smarter when speaking unprepared, whether to a large crowd or to a
single coworker. You know those moments when a speaker says
something profound and everyone rushes to write it down? That
phrase was probably written down somewhere first before it was
ever uttered. The other way to frame this: writing makes how smart
you actually are shine through.

“I almost never say anything in public that I haven’t written


down before.” - Neil DeGrasse Tyson on how he
communicates so well

18.2.3 Power

Writing lets you explore ideas cheaply: It’s easy to pivot an


essay halfway, reorganize by cutting and pasting, and test out
different words and structures before committing. This is because
writing is cheap - you can sketch out an entire architecture or
business plan in just a few paragraphs, without implementing it! But
the cheapness of writing extends beyond experimentation - you can
also map out hypotheticals and consider edge cases without actually
accounting for them right away.
“Writing is my way of expressing – and thereby eliminating
– all the various ways we can be wrong-headed.” – Zadie
Smith

Writing is abstract. You can convey feelings, systems, concepts,


and stories that don’t yet exist. Writing is the ultimate friend of the
creator because it isn’t limited by inconvenient things like reality.
Yet, writing is also constrained - you aren’t allowed to pick
colors, worry about audio, futz with screen resolution or take a
million other little design decisions that perfectionists mess with
instead of creating. So you eliminate the paradox of choice and just
get going with transferring your ideas and learning to the printed
page and digital document.

Writing buffers your inputs until you are ready. Ideas,


information, and learning happen spontaneously in a continuous
fashion. They don’t respect your personal schedule. However your
time for creating is limited. You need to serendipity and focus
to coexist. Writing things down as they come to you helps you
“save your mental state” and defer creating until the time is right and
you have enough for something truly great. Writing turns push
to pull.

Note: This is related to Mise en Place Writing


(Chapter 36).

Writing is permissionless. People with authority have more


immediate credibility, but ideally, great ideas can come from
anywhere once they are written down. Paul Graham says it best:

“Anyone can publish an essay on the Web, and it gets


judged, as any writing should, by what it says, not who
wrote it. Who are you to write about x? You are
whatever you wrote… The Web may well make this the
golden age of the essay.”

The Internet isn’t a strict meritocracy by any stretch, but it is


probably more so than any comparable real world institution.

18.3 How to become a Good Public


Writer
You should write a lot.

Notice that I did not make this section about how to be a “Great”
writer. That is because I am not one. But the point is also that you
don’t have to be a “Great” writer to do well in your coding career.
You just have to be Good Enough (Chapter 16).

18.3.1 Getting Started

People who don’t write regularly are understandably cautious when


asked to start being a public writer. You can get started with three
simple steps:

Have a place to write: For some this is an old-school paper


notebook, for others, Emacs Org mode might work. I write in
OneNote or Notion because searchability and cross platform
capability is important to me.
Find time to write: Eliminate distractions. You waste a ton of
time in distractions. Use writing to fill those holes of boredom
in your routine. Use airplane mode when you write. You
probably spend a lot of time reading/watching/listening to
developer content - take some of that and write down what you
learned - otherwise, 99% of it will be gone from your memory
and you might as well not have consumed that content anyway.
You can also sacrifice a vice, like TV or social media time, to find
more time to write.
When in doubt, don’t publish: I will always encourage you
to publish your work, but if you’re not sure if you should, then
keep it private. It’s more important to establish the habit of
writing - you can publish what you wrote later when you find
your style.

Many people don’t publish their writing because of impostor


syndrome. I’m certainly not going to be the first or last to tell you
that you don’t have to be an expert to write about something. If
you must, put a big disclaimer saying what research you’ve done into
the topic, and let people correct you if you are wrong. This is how
experts become experts.

Another objection is that you still don’t have time to write. Don’t
forget that you can write with the explicit intent of saving yourself
time. When you summarize things you have read, you not only
solidify it in your memory, you save time for your future self when
you run across it again or need to quote it. And when answering
questions - rather than explaining the same thing over and over - you
write your explanation once, publish it, and you’re done. From then
on you can just point people to it. As Scott Hanselman notes: Do
they deserve the gift of your keystrokes?

Some people feel like they lack ideas for what to write. Easy! I
have four categories for you to get started writing:

Write summaries of things you learned (talks, podcasts,


blogposts, books). Bloom’s Taxonomy teaches us that
remembering is only the start of learning; we have to
understand, apply, analyze, evaluate, and create in our
own words before it becomes a part of us.
Write down your standard process for How You Work, like this
“How I Write Backends” post
Write down interesting war stories of outages, nasty bugs, and
performance improvements
Look for questions other people are asking (e.g. on Twitter,
Reddit, StackOverflow, etc.) and answer them in your own
words

It can be tempting to write about news (e.g. “This Week in X”), but
that has a very short half-life. Where possible, prefer evergreen
content – topics that will still be relevant in 5-10 years – in order to
benefit from Lindy Compounding (discussed in Chapter 12).

Write down what’s obvious to you. Derek Sivers is fond of


saying that What’s Obvious to you is Amazing to Others:

First you can start with What topics: “What is Kubernetes?”


“What is Agile?” (Julia Evans’ free zines are great examples of
these, but yours can be just text of course)
Then you progress to How: “How do I do X in Y?” (Josh
Branchaud has gathered a huge audience posting just tiny
bitesized TIL’s for years)
Then get introspective with Why: Why Do We Write
super(props)? for underexamined commonplace things
Then get more historical and introspective with When and
Who topics. Careful not to disclose confidential information!

Pay particular attention to questions that you ask. When you figure
out your answer, don’t just carry on with your day - WRITE IT
DOWN!. As Chris Coyier says, “Write the article you wish you
found when you googled something”. You have no idea how often
you’ll be referring to your own work when the need comes up again,
or when others have the same issue.

18.3.2 Going Public


You should eventually try to publish your writing, not least because
having other people read your writing, correct your mistakes, and
become fans of your work is half the benefit of writing at all! Andrej
Karpathy, the Stanford superstar responsible for Tesla Autopilot,
notes that he goes “the extra mile knowing others may scrutinize
[his] published work… [so he works] harder to make things correct
and consistent”.

“By writing on a blogpost I was held to higher account than


I ever would be internally.” - Troy Hunt

You may be the sort of person that craves feedback for your work
if you put it out there (most of us are). Make peace with the fact that
everybody wanders around in the wilderness a long while before
finding an audience. David Perell calls this the Four Months of
Quiet, where you might put out a blogpost a week for 15 straight
weeks and only get noticed on the 16th. For me it was about a year.
For Troy Hunt, it took years of blogging about everything under the
sun before finding his niche as the Security Guy. Think about the
community you serve as well. Focus on a single platform rather
than scatter your shots – every platform has quirks and nuances that
make certain types of content perform better on it than anywhere
else. Bootstrap your readership on that platform and then transfer it
to a domain you control.

Note: More on “owning a domain” in Marketing


Yourself (Chapter 39)

Bottom line: be patient, hone your writing. You’ll find your groove
eventually. Endure long enough to get noticed – you will be noticed,
because people who’ve done it notice others who are doing it. Game
recognizes game.
What you write is strongly influenced by what you read. Read and
do interesting things. Dive down rabbit holes. Go back in time.
If you just read the same stuff everyone else does, don’t be puzzled
why nobody reads what you write.

Write down what “everyone” knows but doesn’t write down. Address
the two questions everyone wants to know: “So What?” and “Now
What?” Explain complex things simply. It’s a guarantee that there
will be people that will be eternally grateful. Every tribe needs a
scribe. Not everything can be written down – Polanyi’s paradox
teaches us that there are many things we cannot – but plenty of
knowledge isn’t written down simply because nobody bothered to.
This book consolidates tacit knowledge learned from years of
personal and collective experience, but anyone could have written it
if they were determined enough.

If you want to do well in SEO, you can try doing TDD: Title Driven
Development. Use keyword research like KeySearch to find
keywords you can rank for. Then pick a standard title format that
you know works because you’ve read dozens of these before (these
ideas are from Monica Lent’s free blogging course):

React Router with TypeScript: The Complete Guide


How to use React Router with TypeScript
Step-by-step: How to use React Router with TypeScript
Use React Router with TypeScript (2020 Guide)

Alternatively, if you want to offer more context, a popular template


for writing has 4 steps:

Telling a compelling story


Relating it to your personal experience
Proposing a solution
Ending with Practical How-To Tips.

This format is popular for everything from self-help to recipe blogs


because it works.
That said, sometimes readers just want the deep dive – write the
most comprehensive, ultimate resource possible on your topic! This
is known as the Skyscraper technique in the content marketing
world. Corbett Barr calls this Write Epic Shit – the Internet
disproportionately rewards high effort, high quality content. This
can be about anything from A Complete Guide to CSS Grid to
Falsehoods Programmers Believe About Names. However, this can
be exhausting if you try to do it all the time, so don’t feel like you
have to hold everything to you do to an impossibly high standard.
See also Flavio’s SEO learnings from blogging every day.

Don’t be afraid to remix your writing. It’s almost certain that nobody
will read everything you write. The last part of David Perell’s Five
Pillars of Writing is repackaging existing work. If the ideas connect,
link back to them, or copy them over, or throw them out and rewrite
it better. You will seem enormously productive, and your work will
seem of incredibly high quality, to people who don’t know you are
remixing prior work. For example: 10 chapters in this book were
previously blog posts, which helped get this book done faster, though
all have been extensively reworked.

If you want feedback fast, there is a way to almost guarantee it -


Pick Up What They Put Down (Chapter 19). In the words of Dale
Carnegie: “To be interesting, be interested (in others)”. Build
relationships one by one instead of spraying your writing to an
uncaring Internet and praying it works.

My advice to people to unlock creativity is really just go


put things out into the world. Any old things - not
impressive things - just anything. You can go imitate
things, like a musician who does cover songs… Creativity is
just doing stuff, it’s just putting stuff out there, it doesn’t
have to be shockingly original. - Derek Sivers
18.3.3 The DIY PhD

You can become a very good, well regarded writer by earning a “Do-
It-Yourself PhD”:

Look for a Nexus of Interest, the most interesting topic to


you that is also interesting to others
Write a million words to deliberately improve from where
you are, to becoming the world’s foremost expert on that topic

The first part is straightforward. Most life advice converges on some


form of Ikigai, the idea that you should do the intersection of what
you love, what you are good at, what the world needs, and what you
can be paid for:
However this is unattainable if you don’t yet know any of these.
Writing is the way to get there. So we can make two simplifying
assumptions:

Instead of the hackneyed advice of “do what you love”, we


assume that you will learn to love what you do well. This is
the more realistic truth and it better explains why people
unironically love, and are great at, all sorts of things from tax
code optimization to designing high availability systems for
multibillion dollar corporations.
Whatever the world needs, you can be paid for it. As
Naval Ravikant has often noted: “The internet has massively
broadened the possible space of careers. Most people haven’t
figured this out yet.” Global reach has freed every niche from
geographical constraints, and global payment systems have
enabled everyone to create viable businesses serving every
niche.

With that, we collapse the four parts of the Ikigai concept into just
two: Find something that is most interesting to you, that is also
interesting to others. That is the raw essence of Ikigai, and that is
what I call your Nexus of Interest.

The second part is less obvious – writing a milion words as a means


to both find, and grow into, the predominant expert in your Nexus of
Interest.

Why a million words?

It’s not about the precise number, it’s about the order of magnitude
of effort that will turn you into a world class authority. You’ve
already written a million words once, probably twice in your life.
Sum up everything you ever wrote from your first word to your last
high school exam (or whatever is equivalent in your life path). That
was about a million words to get you from illiterate to highly literate.
Then, if you went to college, especially a liberal arts one, you wrote
another million-ish words to get your degree, across your essays,
senior thesis, class projects, extracurricular activities, and so on.

You achieved so much just by writing what people assigned you to


write. Now, as an adult, imagine what happens when you write a
million words to find, research, and share what you assign to
yourself. You don’t need any admissions committee to give you
permission. You don’t need a supervising professor to sponsor your
work (though mentors can help!). You don’t need a pre-existing field
with departments and grants and endowments. You just need to find
your Nexus of Interest and write and publish more work than anyone
else on earth towards it.

THAT is the DIY PhD.

Take any pace you want. I like the symmetry of 1000 words a day for
1000 days. Absent weekends and days off, there are 250 days in a
year, so that works out to four 250 word pages of notes, ideas,
blogposts, documentation, and code comments for four years.

So how do you learn to write (anything) well? There’s only


one answer: you’ll learn to write well if you write. A
lot. - Jacob Kaplan-Moss, on the Django Docs

Among writing experts, it is almost universally agreed that quantity


begets quality (but it doesn’t “just happen”, you have to
deliberately improve):

Jeff Atwood’s How To Achieve Ultimate Blog Success In One


Easy Step has one step: “Pick a schedule you can live with,
and stick to it… If you can demonstrate a willingness to write,
and a desire to keep continually improving your writing,
you will eventually be successful.”
Tim Ferriss, the bestselling author, uses this rule: Write two
crappy pages per day. He keeps the expectations low enough
that he is not so intimidated that he never gets started.
Julia Cameron starts her day with three pages of longhand,
stream of consciousness writing and calls it her Morning Pages -
Brian Koppelman does this to override negativity and jumpstart
his own creativity to write great shows enjoyed by billions.
It happens that 2 pages at 500 words each adds up to
1000 words a day. That’s exactly what Nathan Barry
committed to in 2012 before he published his first book, built a
following, and eventually created a 9-figure email marketing
business. He committed to writing 1000 words a day and even
made an app to track it. His realization: “Slow, consistent
progress is the only way to make big things happen”.

You’re probably thinking it can’t be that simple. There are a million


other things that go into making great writing, and we’re not
addressing any of that in this simple goal. Yes, that’s a future chapter
of this book, but I’m banking on you to figure that out as you go
along. But you don’t get there if you don’t, at a minimum,
write more.

The truth is: It almost doesn’t matter how well you write. Some of
the best regarded developer-writers, like Steve Yegge, Patrick
McKenzie, and Dan Luu don’t obey any traditional patterns of Good
Writing. Run-on sentences, long paragraphs of unstructured rants,
obscure jargony references, none of it matters. What matters is that
they know what they like to talk about and what captures their
readers’ interests.

The traditional writing advice we get in school is very bad


because it doesn’t focus on what’s important in writing.
Grammar, style, structure, none of that matter. You know
what matters? Entertain your reader or inform your
reader. -Nick Maggiuli, Of Dollars and Data

1000 words a day is a significant commitment - anywhere from 2-5


hours of writing, depending on your process and purpose.
Remember that it doesn’t have to be good - it just has to be useful to
your future self. You can get there with:

500 words of notes on everything you read and learn and watch
and listen to
250 words journaling your state of mind and your goals
(journaling is a great way to time travel)
250 words of actual writing meant for others to read -
documentation, blogposts, etc.

That doesn’t look so bad, does it? Of course, tweak it however you
like. The way you count words is really up to you. When Nathan
Barry committed to 1000 words a day, significant acts of creation -
like recording a YouTube video or podcast - counted towards his
quota. For me, tweets and code do not count. Brain dumping a list
of ideas, like I did before I wrote this essay, counts. Writing
summaries of articles and private journal entries count. You might
hold yourself to different standards. Your life, your rules.

If the 1000 a day pace is too much given your existing commitments,
take it slower for longer. 800 words a day for five years. 666 words a
day for six years. 400 for ten. Adjust to taste! It’s a marathon,
not a sprint.

When you commit to writing a million words, a few things


happen:

You will be more selective about what you consume.


Writing notes and summarizing takes time. If you consume
content with the intention of writing down what you learn, you
will have less time and therefore have to be more picky. When
you switch from consume-to-consume to consume-to-create,
you naturally spend less time being a passive consumer and
more of an active remixer and creator.
You will want to get more out of what you write. You will
want to use your writing to help you work through or learn
things that will help you in your day job. Quoting Addy Osmani:
“Write about what you learn. It pushes you to understand
topics better. Sometimes the gaps in your knowledge only
become clear when you try explaining things to others. It’s OK
if no one reads what you write. You get a lot out of just doing it
for you.” Over time, you may want to try writing long,
concentrated repos of information that build over time
(Chapter 13), instead of a disconnected series of one-offs.
You will want to share it. Since you spent the time to write
it, you want to increase the return on investment by making sure
it reaches the widest appropriate audience. Most developer
writing dies in chat and private email. You should aim to
compound your impact by increasing reach and longevity. (To
be clear: you shouldn’t publish everything you write!)
You will quote yourself. Since you have so much writing
capacity, over time you will have written down your position and
definitive list of resources on any particular topic. Your writing
becomes your own Second Brain. (Others will quote you too!)
You won’t be afraid to write. When you are called upon to
write for something at work that really matters, others might
flinch, but you will have been practicing at high volume for
much longer at a much higher standard than anyone else.
You will want to invest in writing better. Since you’re
committed, you might as well get good. One way is to have a
writing system, separating pre-writing from writing (see: Mise
en Place Writing, Chapter 36), or even getting professional
coaching or training. The investment makes sense because
you’ve committed to writing for the very long run.
You will get better at writing. Just from having tried out
every form of writing about every topic under every life
scenario. Other people will look at your work and wonder how
you got there. You’ll tell them - like I’m telling you now - but
they won’t believe you. There must be a secret. There isn’t.

All that, from a simple commitment of writing a million words, on


the most interesting things to you that are also interesting to others.
It’s simple, not easy. You may encounter many personal obstacles to
completing this. But if you can overcome them, I really don’t see
how you cannot succeed.
18.4 Committing to Writing
I am not a parent, but I liken it to what I’ve heard about that first day
you come home with your first child. You’re afraid, you don’t know if
you’re the person to do this, you don’t know what you don’t know.
But you’ve just signed up to raise this child for the next 2 decades.
For the next 10 million minutes of your life you will be a
parent. So: you read up, try things out, learn from your mistakes,
and you “parent” every day. Every year millions of people commit,
and end up more or less figuring out how to be great parents their
kids love.

It’s the same with your writing, your personal brand, your career.
It’s your baby. You’ll figure out how to parent it once you realize
it’s yours and you have no choice but to do it every day.

It can help to find a community of people going through the same


thing as you are. A bunch of writing commitment platforms exist:
750 Words, Diary Email, WriteNext, Commit, Reddit’s No Zero Days,
and Writing Prompts, or this book’s own community. You can even
write in a Git repo and use GitHub’s streak tracker as a commitment
device. Whatever floats your boat!

This chapter isn’t writing advice. This is advice to write. I have


writing advice, but you can only get there once you write like you
breathe.

“I write because I’m scared of writing, but I’m more scared


of not writing.” – Gloria E. Anzaldúa
Chapter 19
Pick Up What They Put Down
Let’s say you’re sold on the idea of Learning In Public
(Chapter 9). You want to start right away but are feeling intimidated
at all the advice out there:

“Just start a blog for the past you!” but you’ve done that
before - and no one read it - and you lost interest.
“Ask people what they want to read!” but you don’t have
people to ask, and people always say yes to free content anyway.
Which you write and they then don’t read. So you lose interest.
“Don’t worry it takes a while to get an audience!” but all
the people telling you that are unrelatable because they’re
already successful in your eyes, so you lose interest.

You’re not alone.

In the past two years I’ve talked to a couple hundred people at


various stages of their #LearnInPublic journey, and of course I
went thru it myself. It’s still too hard to start, no matter how many
well-intentioned voices tell you what they do and how they did it.

I think, like any new habit or diet, the best plan for you is the
plan you can stick to.

After doing a lot of thinking, I have a hack for you. It is six words
long:

19.1 Pick Up What They Put Down


Who’s “they”? Anyone you look up to, anyone who knows more
than you in the thing you’re trying to learn. If that’s still too broad
for you: Look for the maintainers of libraries and languages you use,
or the people who put out YouTube videos, podcasts, books,
blogposts and courses.

What do you mean by “put down”? Any new library, demo,


video, podcast, book, blogpost, or course that they put out. It is
important that it be new. By virtue of it being new, it is
simultaneously at the top of their minds, and also the most likely to
lack genuine feedback.

(Psst… This is where you come in!)

How do I pick “it” up? Here is a nonexhaustive smattering of


ideas for you:

If it’s a new library, go try it out. Report bugs, ask


questions about ANY confusing documentation, make a demo
using the library, then blog about it!
If it’s a new demo, go read the source code! Then write a
walkthrough of the source code explaining everything in your
own words.
If it’s a new video/talk/podcast/book/blogpost,
summarize it in your own words.
If it’s a new course, go through it, highlight the top three
things you learned.
Sketch notes for literally anything are always LOVED.
Tan Li Hau literally became a Svelte maintainer by picking up
TODO’s in the Svelte codebase
Come up with your own ideas, I’m not the boss of you!

The BIG requirement about any of the above is that you MUST
genuinely love/be excited about the thing you’re picking
up. If you don’t love it, move on quietly. You don’t want to build a
brand of shitting on things people put out.
You must also close the loop - when you have produced anything
(e.g. a blogpost) based on their work, tag the creator in social media.
Twitter is inherently designed for this, but you can also reply in a
comment or email it to them with a nice note.

19.2 What happens when you do


this?
There is a VERY high chance that you will get feedback on your
blogpost or demo or tweet or whatever, directly from them. A
retweet and/or follow back is common, especially on repeated
interaction where you prove yourself an eager, earnest learner.

If you try your very best to understand the topic, AND you still get
something wrong, you will be corrected. If you keep your ego small,
you will handle it. In fact, being wrong in public will be your biggest
source of personal growth.

19.3 Why does this work on them?


Simple: not enough people do it. That’s why this is a hack.

Activity on the Internet has an insane Zipf’s law distribution. This is


sometimes called the “one percent rule” - 90% of people passively
view content, 9% comment on content, 1% create. I would endorse
this but for the fact that it’s not extreme enough:

I help moderate a subreddit with 300k monthly unique


visitors - charitably, about 2k of them actually comment, and say
100 people consistently submit content.
I get 2-3m tweet impressions a month, but only about 1-2k
mentions/replies.
Pick any YouTube video you care about. Look at the view count,
and look at the number of comments.

Basically, the correct number of passive consumption is closer to


99%, and less than 1% even comment on newly created content. I’m
not exaggerating in the least.

Anecdote: Cesar Kuriyama, creator of 1 Second Everyday,


randomly tweeted at Jon Favreau about a script he wrote
that didn’t get picked up. This piqued Jon’s interest as
most fans didn’t talk about his failures, causing Jon to look
into Cesar’s bio. Jon ended up writing Cesar’s app into his
classic movie, Chef.

In short, people are lazy. This also means you can get ahead via
strategic nonlaziness.

What’s the strategy? Say it with me: PICK UP WHAT THEY PUT
DOWN.

There is a dire lack of feedback everywhere. Yes, there are industry


superstars with inboxes too hot to respond to. You will get ignored.
But even they go out of their way to respond to some feedback. And
we already established there aren’t too much of those.

On Twitter in particular, people can be shy promoting their own


work. But if someone else on the Internet says nice things about
their work, well, shit, they can RT that all day long.

19.4 Why does this work on -you-?


Feedback, feedback, feedback. You lose interest when you get no
feedback. What we all crave to keep going is feedback that we’re
doing something wrong, or right, anything to prime the next action
we take. The fact that we don’t know what the feedback will be
makes it a “variable reward” - which is human catnip for forming a
new habit.

Read Nir Eyal’s Hooked model for more explanation, but basically
we are setting up:

Trigger: Something new was created


Action: “Pick it up” a.k.a you create some piece of content
based on the new thing
Variable Reward: You get feedback or endorsement or
criticism from the creator
Investment: You respond to, or internalize, the feedback so
you get better the next time around. (aka “learning”)

19.5 Your call to action


In the next month, dozens of cool new libraries and demos and talks
and podcasts and courses will be released, on things that you want to
learn.

Pick three that interest you and “pick up” on them.

I virtually guarantee you get feedback on at least one. If you don’t


aim too high, you will go three for three.

Do this 12 times.

You will end the year having learned a good deal and having made
many new friends along the way. Including me… if you (ahem) tag
me.
Chapter 20
Part III: Strategy
Strategy applies anytime you make major irreversible
decisions, in the face of uncertainty. Let’s discuss the major
Strategic decisions that you will encounter in your Coding Career:

Intro to Strategy (Chapter 21)


Learning Strategy:

Learning Gears (Chapter 22)


Specialist vs Generalist (Chapter 23)
Betting on Technologies (Chapter 24)

Career Strategy:

Profit Center vs Cost Center (Chapter 25)


Engineering Career Ladders (Chapter 26)

Business Strategy:

Intro to Tech Strategy (Chapter 27)


Strategic Awareness (Chapter 28)
Megatrends (Chapter 29)
Chapter 21
Intro to Strategy
Most people are more familiar with Strategy Games than they are
with Strategy. They bear superficial similarity - the need to plan
ahead - but the differences are critical.

I’ll use the language of James P. Carse’s Finite and Infinite Games:

Strategy in Games offer you infinite runs of a Finite Game,


where you have almost perfect information and the rules don’t
change.
Strategy in Life gives you one run of an Infinite Game, where
misinformation outnumbers information, and the rules are
constantly in flux.

How is Real Life Strategy relevant to your coding career?

Working on the right problem dominates speed of


execution on a problem. The “10x engineer” is a popular
term - widely debunked, but large variations in engineer impact
do exist. Yet if you look at code metrics, high impact engineers
don’t stand out by lines of code or number of commits. In the
words of one Googler:

For those who work inside Google, it’s well worth it to


look at Jeff (Dean, head of Google Brain) & Sanjay
(Ghemawat, cocreator of MapReduce) ‘s commit
history and code review dashboard. They aren’t
actually all that much more productive in terms of code
written than a decent SWE3 who knows his codebase.
The reason they have a reputation as rockstars is that
they can apply this productivity to things that
really matter; they’re able to pick out the really
important parts of the problem and then focus their
efforts there, so that the end result ends up being much
more impactful than what the SWE3 wrote.

Engineering Leaders can make disastrous decisions.


This sounds obvious in the abstract, but in the workplace it is
common to accept the HIPPO (Highest Paid Person’s Opinion)
with no critical thought. This has direct implications for your
career - you clearly want to work on projects that will be
successful. Imagine working under Vic Gundotra on Google
Plus. Or on Digg’s v4 rewrite following a Google algorithm
update. Or the thousands of other less dramatic failures that get
swept under the rug in tech. You need to understand the larger
context your coding lives in; to push back when appropriate
(tactful pushback is a GREAT career skill); and to ask for
reassignment when you are being pushed into unsalvageable
failure.
Agency. You own your career when you start being aware of
what’s around you and taking control of what you work on.
Agency = Resourcefulness + Initiative. A decent programmer
used to be able to work at IBM for 30 years, with the expectation
that IBM would take care their career if you just stick with them
long enough. Those days are long gone. Jobs today are
bifurcated - you either tell a machine what to do (you live above
the API) or a machine tells you what to do (you live below the
API). You can choose to take control, or be controlled. Act, or
be acted upon. A good manager will be your ally in your
personal journey, while a bad manager will only see you as a tool
to accomplish their goals. But even with a good manager you
bear ultimate responsibility for your career. Never
them.
21.1 What is Strategy?
There are a lot of definitions of Strategy out there and only some of
them are good. We are in Corporate Business Speak territory, after
all! Let me quote a few:

Strategy is the problem of choosing problems.


Strategy answers: “What should we be doing?”
Strategy defines where to play and how to win.

There are four aspects of Strategy:

A mental model of present Reality - where you, your


competitors, and the larger technological landscape are and are
going
A Vision of the future - where you want to go
A Plan for getting from here to there
A Policy - choosing what to do and what not to do with clear
rationale and understanding of tradeoffs

This was first formulated by Henry Mintzberg as Plan, Pattern,


Position, and Perspective - because business types love
alliteration - with a 5th P for “Ploy” added for decoy/fakeout plays. I
have redefined these elements so as to be more applicable for Tech
Strategy and your personal career strategy.

It helps to know what is Good and Bad Strategy. Fortunately, there’s


a book for just that.

Good Strategy:

Is Simple and Obvious - it says No to complexity


Has a theory or Diagnosis on the key challenge to overcome
Includes guiding policies and actions to take to overcome the
challenge
Is Coherent - all actions reinforce and support each other
rather than compete

Bad Strategy:

Has a bunch of Fluff - corporate business speak


Fails to face the challenge - the central problem the
company faces
Mistakes goals for strategy - statements of desire rather
than concrete plans (we will get it if just we want it hard enough)
Has objectives which fail to address critical issues (because they
are inconvenient)

21.1.1 How Do I Use Strategy?

Everything I have described may feel a bit out of reach. You aren’t a
general or a founder. You aren’t even a senior engineering leader
yet. I get it.

But strategy applies anytime you make major irreversible


decisions, in the face of uncertainty. This makes intuitive
sense. If some decision was reversible, you’d just try it and “see what
works.” And if you had no uncertainty, your decision would be
obvious. As with all decision making, “no strategy” is also a strategy -
it is you trusting your fate to the strategic choices of someone else. If
you hope to grow professionally, nondecision will be increasingly less
valid.

This section will help you think through major strategic aspects of a
coding career: how to bet on technologies, whether you should be a
specialist or generalist, technology business models, and everything
in between.

You should also try to develop a mental framework for


understanding reality. Yes, that felt as absurd to type as it was to
read. Tech is immensely complex and noisy, yet there are clear
supercycles and winners that you need to stay on top of. You need a
way to filter and organize information about information
technology. We will touch on Systems Thinking, Ecosystem
Awareness, and Megatrends.

Because you should understand the economics of what you work on,
I will also introduce the basics of Tech Strategy. Advertising vs SaaS
vs Marketplace business models. Horizontal vs Vertical. And other
ABC’s of the Business of Software.

Teaching Strategy is an ambitious task. I’m not an expert. I don’t


know your specific situation, and the experiences of me and my
friends may not be representative. My hope is to teach you to think
about Strategy, rather than do the thinking for you.

21.1.2 Don’t Stress Too Much

It takes a rare genius to understand Strategy. I certainly don’t. But I


know to spot people who do, really listen to what they say, and
translate it to my context. I hope to open your eyes to this as well.

I also want to caution against getting too swallowed up in Strategy.


Analysis paralysis helps nobody. You will make missteps. Don’t try
to undo them – what’s done is done, reassess without sentimental
attachment to sunk cost.

As a software person, your skills are transferable, so you are less


locked in than people in other professions. Finally, on a long enough
time horizon, most decisions become reversible. If you feel stressed
out, take a longer view. This, too, shall pass.

A final thought: Peter Drucker is famous for saying that “Culture eats
Strategy for breakfast”. Whatever fancy strategy you or your
leadership adopt, remember that people are always at the heart of
your work, and great people can overcome bad strategy when united
by a strong culture.
Chapter 22
Learning Gears
I can think of four gears of Learning In Public.

22.1 Explorer
Your Explorer gear is your high speed, low power gear. You’re just
trying to cover as much ground as possible, in many directions.

The main problem to solve is that you don’t know what you
don’t know.
The creative exhaust you make are mainly notes to self,
possibly in terms only you understand, possibly noting problems
only you have. This is mostly in gists and blogposts and tweets
and (good) StackOverflow questions, because text is cheap to
produce, although Twitch streams are also on the rise. You are
often laying out literally your entire state of knowledge for a
metaphorical rubber duck, looking for holes and documenting
for the future.
Your public output is episodic - there is no unifying theme -
you are just a field correspondent reporting from whatever
foreign land you find yourself in. This is still useful, because you
can’t connect the dots until much later in life.
The public commitment level is low, usually doable in one
day sprints, so this is a great way to get started Learning In
Public and also finding what resonates so you can switch gears.
It is easy to fall off the wagon though, because no one’s really
expecting anything from you, because you haven’t committed
that much.
22.2 Settler
Your Settler gear is a high speed, high power gear. You’ve found
good, fertile ground, and there is an established playbook you can
follow.

The main problem to solve is one of pure learning. You know


what you don’t know, and your sole job is to learn what
everyone else already knows.
The creative exhaust you make are still notes to self, just
like with the Explorer gear. Your task is to move up Bloom’s
Taxonomy (discussed in Chapter 9, Learn in Public) as
quickly as you can, and to explore the knowledge graph of your
technology (discussed in Chapter 11, Know Your Tools).
Your public output is less essential - a lot of what you are
learning will already be stated very well elsewhere. However
now you can have a unifying theme, because you are focusing on
something! A great thing you can do here is to keep a cheatsheet
and list of links to what you have found helpful in your journey
(a great form of Open Source Knowledge – Chapter 13).
The public commitment can be a bit higher, for example by
reporting your progress on social media and doing daily streaks
like 100 Days of Code. This can be helpful in providing
motivation and external reinforcement for your progress – note
that people can be very helpful and forgiving especially when
you note you are just learning in public rather than being an
expert.

22.3 Connector
Most people should aim for your Connector gear to be their
default. This is a powerful, yet nimble gear. You connect people and
ideas.
The main problem to solve is that you know things others
don’t know. Hence you should share that and they need to
hear you. That takes a little extra effort.
The creative exhaust you make is explicitly meant for
others. This means some effort is required that isn’t just about
your learning, but more about making things easy to digest.
Here are the talks, tutorials, cartoons, cheatsheets, books, etc -
Higher effort, higher usefulness, longer lasting. You usually
arent sharing everything you know, though, so it can feel like
you’re learning less. However, this is the best way to master
fundamentals because you are forced to cover your bases and be
able to answer questions you haven’t thought to ask.
You don’t have a grand overarching theme to your work, that
one thing you are known for, but usually you are juggling
multiple themes, and also learning and teaching about their
intersections.
The public commitment is moderate - usually for a few weeks
or months - and often involves active exercise of soft skills that
you may feel ill equipped for. Check your ego at the door and
learn that too. You are “putting yourself out there”. But also
remember Learning In Public is an art, not a science: always rely
on and refine your taste rather than objectively trying to please
everyone. Find your people, lean on strengths you always
thought were irrelevant for coding. You are presenting yourself
as an expert here, so make sure you cover your bases responsibly
so as not to mislead beginners.

Examples:

Samantha Ming with her JavaScript tips


Hiro Nishimura with her AWS Newbies community
Julia Evans with her Zines
Lin Clark with Web Assembly

See also: Pick Up What They Put Down (Chapter 19)


22.4 Miner
Reserve the Miner gear for when you’ve struck gold. Something
that resonates with people, that you are also abnormally fascinated
by. When you strike gold, you’ll know. Stop and plant your flag –
this is where you should definitely choose to become a Specialist over
a Generalist (Chapter 23). Then dig in for years – this is a low speed,
high power gear.

The main problem to solve is that something important is too


hard, or the world knows too little about something this
important. Therefore you dive deep into something
nobody else does.
The creative exhaust you make is very specialized - you do
research and build community and infrastructure.
Miners are also Builders – they build whatever is necessary to
achieve that ultimate end goal. What you do is meant to last.
Before you, the thing was very hard, or impossible. After you,
the thing becomes much easier. The world will thank you.
You now have one theme that not just unifies your work, but
that you become synonymous with. Every person in the world
who has the problem you solve, will eventually find you, because
that is how the Internet works. (Coincidentally, you no longer
need to “put yourself out there”, people will come to you.) This
might feel boring since you’re just about one thing all the time,
but what seems like one topic to you today (e.g. Machine
Learning) will eventually subdivide into different disciplines
when you go deep enough (e.g. Supervised Learning,
Unsupervised Learning, Reinforcement Learning).
The public commitment is very high - on the order of years
and careers. You’re digging a mine and spending energy far
more than any other sane person is doing - it helps if the area
you’ve chosen has a good chance of widening and deepening at
the same time you’re mining. So have some form of macro
thesis for why this field in general will be increasingly
important. (More in Chapter 24, Betting on Technologies
and Chapter 28, Strategic Awareness)

Examples:

Tobias Koppers with Webpack


Jen Simmons with CSS
Lea Verou with CSS
Evan You with Vue
Ryan Dahl with Node, then Deno

22.5 Why “Gears”?


These are “gears” and not “levels” or “modes” because you can step in
and out of any gear depending on what kind of terrain you’re on and
how fast and deep you need to go. Just like with biking, one gear
isn’t necessarily better or worse than another, it just depends what
you are trying to do.

22.6 What do I do now?


If you’re just starting to #LearnInPublic, start as an Explorer. Map
out whatever you’re learning, whatever tickles your fancy. Go as fast
as you like, an inch deep and a mile wide.

When you know where you want to settle and focus, become a
Settler. Learn how to learn, and learn what everyone else already
knows about the topic.
When you have a good sense of the terrain and see other Explorers
you can help, start being a Connector. Link people and ideas, use
your full creative talents. Go back and cover gaps in your knowledge.

If you find yourself tripping over gold, start Mining. Dig into what
people don’t know, talk about what people don’t know they don’t
know, build infrastructure and communities to make it all easier. If
it turns out a dud, switch gears, no shame in moving on.

Four gears of learning, all in Public. Get started!


Chapter 23
Specialist or Generalist?
Let’s get this out of the way first - you can be extremely successful as
either a specialist or a generalist. It just happens that different
situations call for different types of developers.

It is hard to discuss this topic intelligently when people cannot even


agree on definitions. Someone who looks like a generalist in certain
circles, looks like a specialist to everyone else standing outside that
circle. Specialization is in the eye of the beholder.

Consider Michael Phelps. In the 2008 Olympics he won 8 gold


medals. Eight. (The guy is so ridiculous that he set a record for
setting records.) To most mortals, he looks like a swimming
specialist - you wouldn’t put him in a basketball lineup, for example.
To swimmers, he looks like an untouchable generalist - setting solo
and relay world records in freestyle, butterfly, and medley categories
at multiple distances in the span of seven days.

Everything is concentric circles. Just as you feel like you’ve


specialized in something, you realize the array of subfields that fan
out with people well ahead of you in each. If you’re trying to
generalize, there’s always one more level up, down, or sideways to go.

As it turns out - this is a useful fractal you can exploit.

23.1 Leverage vs Self Sufficiency


We have acknowledged that the definition of specialists and
generalists are ill-defined. The debate is often muddled further with
whether or not non-technical skills are included (usually a strawman
depending on whether one is arguing for or against generalising).

Yet, we can still try to make some useful observations.

Specialising and Generalising thrive under different


conditions.

For example, when you specialize in maintaining five nines of


database reliability with single millisecond latency and strongly
consistent transactions across five global regions, there are perhaps
less than 100 companies in the world that would need your services.
But you would have a tremendous impact on them and they would
pay through the roof for you. This is because Specialists benefit
from Leverage.

You don’t have to be at a BigCo to do this - A lot of Xooglers (ex-


Googlers) set up shop outside Google and basically offer Google-
infrastructure-inspired tech for the masses.

Generalists thrive when Self Sufficiency comes at a


premium. If you can design and code, you can build a creaky MVP
that lasts just long enough to prove out demand. This then justifies
hiring real specialists to fix your janky prototype and build to scale.
Or you can learn as you go, allowing you to do it yourself.

You don’t have to be at a scrappy startup to do this. Generalists can


get things done inside BigCos by being able to work better with
counterparts, and/or sidestepping the formal process and doing it
themselves when politics and prioritization get in the way.

23.2 The “Full Stack” Developer


Many generalists just aren’t. We all specialize in something, because
it is impossible to know everything. For a long while, the term “Full
Stack Developer” was in vogue. This trended because it was a useful
fiction:

it helped employers justify expensive hires as pluripotent deals


(“Two in One!”)
it helped developers market themselves as capable of doing
more
it helped educators/bootcamps sell the idea that you need full
stack education

The truth, of course, is that “full stack” developers tended to be


backend developers that learned a bit of JavaScript:

With some specialised Platform as a Service services like Firebase


and Amplify, frontend devs could also get in on the game:
Of course, this is a tired meme now, and more enlightened takes -
like hiring “full stack teams” - have emerged.

It is also understood that marketing yourself as a generalist is more


difficult, because people don’t know what box to place you in. It can
be a recipe for overpromising and under delivering when it actually
comes to working with you.

However there are clear benefits to being generally capable. If you


are on a small startup team, you will generalize and handle things
that you’ve never trained for - which makes you a GREAT generalist
hire for future teams. Even in a large company, being able to speak
the language of your counterparts can help you get what you need
more effectively. And nobody said that being a “generalist” has to
mean exactly equal competence on all dimensions.

23.3 “T Shaped” and “Pi Shaped”


As an industry, we will not stop trying to have our cake and eat it
too. With “Full Stack” in disgrace, the current iteration of this is the
“T Shaped” engineer. This was first defined by Valve in their
Employee Handbook:

This combination of breadth and depth is, of course, appealing, but


convenient in its avoidance of acknowledging any real tradeoffs. The
straw man argument here is that by this definition, virtually
everyone who is considered a specialist can be considered T shaped,
because what person doesn’t try to develop other basic skills in order
to function?

Of course, if tradeoffs don’t exist, why not go further? Scott Adams


says we should become very good at two or more things. Be a “Pi
Shaped” person! Thanks Scott!
And while we’re making things up, why stop there? You should be a
Comb Shaped person instead!!
I’m throwing shade not because people like this don’t exist. They do.
It’s just not helpful general advice, because these discussions
conveniently leave out having to give up anything of consequence in
order to get these advantages, or act like what shape you are is more
choice than chance. <sarcasm> The downsides are always small,
the upside is always huge. Great. Nice Medium article. Life
changing. </sarcasm>

Probably the best take I’ve seen is Jeff Scott’s reply to me:

From my experience most developers are pear shaped!


23.4 Look Inside, Not Out
At our core, we are all dealing with our own insecurities and
philosophies of success. Do we do better by capitalizing on our
strengths, or covering gaps in our weaknesses? Go faster and do one
thing well or go slower and be more adaptable?

Malcolm Gladwell’s Outliers popularized the “10,000 Hour Rule”,


arguing for extreme specialization. Then David Epstein’s Range
made the case for the total opposite.

The world will never stop coming up with ways to tell you that you
are not good enough, that you are missing out, that you should do
the opposite of what you’re doing. It is difficult to read (and write!)
advice that fundamentally accepts that there are multiple paths to
success. The real debate is less an outward facing one of What The
World Wants, and more an inward facing one of What Do I
Want.

Only you can answer that. I’m confident that once you figure it out,
you’ll find a way to be successful at it, whether as a generalist,
specialist, or comb. Shape your world to fit you, rather than twist
yourself into what you think the world wants.

23.5 When In Doubt, Specialize


I do have a prescriptive suggestion though, in case you wanted one.
When in doubt, specialize. There are a few reasons for this:

Most people have a wide range of interests anyway; in


other words, the natural tendency is to be a generalist and to
learn Just in Case. So you need to lean against the bias in order
to achieve the right mix.
You will seldom be forced to specialize, but you will be
forced to generalize. Since specialization thrives with
leverage, you will mostly choose to be in those positions where
you increase your specialization. However, when you are thrust
into situations of needing to be self-sufficient, e.g. in a small
startup, you will be forced to generalize anyway.
Learning how to be an Expert is a skill in itself. When
you start a lot of things you just get good at being a starter. This
is a fairly mundane process of doing the things everybody knows
you should do to get started - reading docs, going through
tutorials, making toy projects. When you become an expert in
something, you also learn how to be an expert. You know what
it’s like to push past the first Dunning Kruger peak, feel the
depths of the ignorant intermediate, and to see things through
to become advanced in a domain. This makes all subsequent
expertise gain easier.
Specialization is Fractal. Because you lack domain
knowledge, what looks like specialization to you now may not
look like it the more you learn about the domain and the deeper
you go. Experts thrive on narrowness. When PhD students
write their theses, they don’t address all of politics, the stock
market, or the human body, they study narrow things like the
political landscape of a particular year, the valuation vs
momentum debate, or how sleep affects productivity. Mastery
needs a boundary.

To paraphrase Tim Ferris, probably all of the developer heroes you


look up to are walking flaws who’ve maximized one or two strengths.
Here’s Dan Abramov’s list of Things He Doesn’t Know - that he
knows he doesn’t know.

23.6 Specialist in Public, Generalist


in Private?
Here’s a final thought related to marketing yourself as a generalist or
specialist. You don’t have to put your full self on display at all times.
It can help tremendously to be publicly known for a specific set of
skills, while privately you maintain active interests in other
capabilities.

Cory House saw a 15x increase in consulting enquiries when he


decided to specialize in transitioning to React instead of offering
general consulting.

Same dev. Different pitch. 15x opportunities.


Chapter 24
Betting on Technologies
Now that you have a good idea of tech business models and tech
adoption theory, it’s time to talk about how you adopt tech yourself.

24.1 Never Betting On Anything

“You are not superior just because you see the world in an
odious light.” - François-René de Chateaubriand

First we should discuss the gloomy specter of the pessimists. A great


way to limit downside risk is to simply never take any risks. You hear
this a lot from jaded developers, who are often right about certain
technologies being overrated, but are also very keen on making sure
everyone knows how much they don’t care.

This is, of course, not a great personal brand, but more importantly, I
always think about the adage that “a broken clock is right twice
a day”. Yes, tech trends are cyclical, and often what’s old is new
again, but it is objectively untrue that technology never progresses.

Pessimists view technology as a swinging pendulum, endlessly tick-


ing and tock-ing while going nowhere. The reality is more like a
climber’s journey up a mountain, tacking left and turning right in a
series of switchbacks, sometimes slipping and running into dead
ends, but always trying to climb upwards.
To paraphrase George Bernard Shaw:

The cynical dev thinks technology never changes. The


optimistic dev persists in trying to change technology.
Therefore all progress depends on the optimistic
dev.

It is everyone’s prerogative to be conservative with their tech


choices. But people who judge with the benefit of hindsight should
never denigrate the efforts of people who are trying to build the
future - because they might actually succeed in discouraging
efforts.

We also don’t learn anything by retroactively explaining success after


it is obvious. Humans are good, too good, at back-fitting causality ex
post - it is too easy to draw the wrong lessons, to confirm existing
biases, to take the absence of evidence as evidence of absence. The
scientific method of learning the true underlying rules of the world is
to form hypotheses ex ante (without the benefit of hindsight), and
then to test those theories.

A more constructive approach - still without betting on new tech - is


to simply offer up lessons from the past. It is true that people who
don’t learn from history are doomed to repeat it.

24.2 Data Driven Investing


The other way to avoid taking risks is to suspend judgment and try to
base our betting decisions on objective data instead. There are
plenty of empty metrics in development - GitHub stars, npm
downloads, Hacker News upvotes, Twitter mentions. There are even
great automated tools that track these - the Changelog and Mikeal
Rogers’ daily newsletter are two examples in general open source.
Programmer Surveys are another source of high level trend data, for
example the Tiobe Index, GitHub Octoverse, and StackOverflow
surveys for languages, and then ecosystem specific ones like the npm
and State of JavaScript surveys.

These are fine, but they are all imperfect proxies for things we
actually care about - how useful the technology is for our
needs. As a rule, the easier to obtain the data is, the less value it
has. We care about popularity to the extent that it de-risks your
choices - bugs are more likely to be caught, documentation is likely
to be complete, and third party libraries are available to fill any gaps.
For the really big technologies, jobs are likely to be available. But as
we grow in our dev capabilities and preferences, what other people
like is increasingly less relevant to us.

Note: see Good Enough is better than Best


(Chapter 16) for a deeper discussion!

24.3 How To Be Early


As a technologist, you will frequently find yourself on either side of
Geoffrey Moore’s “chasm”, either as an Early Adopter or as part of
the Early or Late Majority (see Chapter 28, Strategic Awareness
for an in-depth explanation). The career upside, and risk, of betting
on tech early is well understood, but it is worth discussing how early
to be and where in the stack to take risks.

24.3.1 Managing Risk

Your primary job is to manage your overall technology risk.


Technology is a means to an end. You should try to avoid making
bets that could jeopardize your ultimate end goal. If your goal is
getting a job, then your risk appetite is fairly low - just aim to gain
expertise in what your target companies already use. If you have job
security, or already have a stack that you are comfortable with, then
you have a higher risk appetite for expanding your toolkit. If you’re
trying to do something truly cutting edge, then you should
absolutely be trying out all sorts of new and unproven approaches.

Thoughtbot and Echobind have a good approach that I liken to


“Innovation Credits”. The rule is basically that when picking a
stack for a client project, you’re only allowed to pick one or two new
technologies to use, and everything else should be familiar tech.
They go so far as to allocate 1 day a week as “investment time”, and
budget in delays to their estimates for things to go wrong. You don’t
have to go to the same extent, but allocating some exploration time is
a great idea.

24.3.2 Know What’s Missing

As you build things and grow comfortable with your stack, you
should be mindful of where your productivity isn’t as great as it could
be. Some of the best developers you’ve heard of made their names
because they have a “low bullshit tolerance” - leading them to create
the tools, libraries, and languages that they then become famous for.
It turns out that a lot of developers share the same frustrations as
you do - but don’t do anything about it, because they can’t imagine a
better way, or don’t mind working around the technology’s
limitations.

One way to inoculate yourself against acquiring “bullshit tolerance”


is to occasionally look across the bow to other developer ecosystems.
If you’re in Full-stack JavaScript, check out Rails. If you’re in Rails,
check out Laravel. If you’re in React Native, check out Flutter. And
so on. You’ll see a lot of things that are the same or worse, but every
now and then you’ll find something that that community takes for
granted, but you find absolutely mind-blowing. That’s an idea you
should steal, or a standard you should start demanding of your own
stack.

I call this “Exposure Therapy”. It’s like a neat inverse to Second


System Syndrome. You’re not evaluating things in order to switch -
you’re opening your mind to what’s possible out there, so that you
don’t get too comfortable with the status quo. Conferences and
YouTube channels are very good ways of exposing yourself to
alternative ecosystems, because you can try to understand ideas and
observe effectiveness at a high level without getting lost in the
details.

Keep a list of the problems you constantly run into again and again.
Here’s a list for UI Engineering. Solutions come and go,
problems always remain.

When you know what you’re looking for, it’s easier to sift
through the noise and evaluate new solutions. Having built a
sense of what’s missing in your world, it’s much easier to go through
the constant stream of new projects and launches, and pattern match
against how the new technology could fit in your workflow.

24.3.3 Evaluation

Be careful not to only judge the project based on how it is today. If


you’re early, there will almost always be problems with it. It may
have lousy docs, be full of bugs or have missing functionality. This
will make it look inferior to alternatives that exist today. That’s not
what you’re looking for. You’re looking for the core idea, the thing it
does differently, and, assuming everything else is fixable (it is), how
game changing that would be to your world.

Ben Horowitz, of Andreesen Horowitz, is fond of explaining it this


way - New technology is usually inferior to existing
alternatives in every way but one. He applies it most to crypto,
but we could easily argue this for NoSQL or React or any other major
new wave in tech. In Thomas Kuhn’s The Structure of Scientific
Revolutions, he shows how almost every significant scientific
breakthrough is first a break with tradition, old ways of thinking, and
old paradigms. This is why we sometimes call them paradigm shifts.

You should also be aware that the technically superior project often
does not “win”. Often this is because the superior qualities require
too much change, whereas the “less superior” project compromises
technical merit for compatibility. Economics rewards evolution over
revolution. This happens again and again in tech history, from VHS
vs Betamax, to React + Redux + TypeScript vs Elm. Of course, in
personal projects, you shouldn’t need to care who “wins” (as we
discussed in Chapter 16), but that changes when you are literally
trying to bet on a winner for career or investment purposes.

24.3.4 Don’t Surf Every Wave

Even after careful risk management, selection, and evaluation, there


are still many people who try to keep up on every new thing. Unless
this is literally your sole job, don’t do this. It is a fast track to
burnout. Try to have an investment thesis for how the technology
fits into a longer lasting Megatrend (Chapter 29)that makes your
investment worth it.

Dave Rupert of the Shop Talk Show had a great analogy for this:

“When you surf, if you paddle for every wave, you just get
destroyed… You hurt and out of breath and it’s dangerous,
to be honest, because you could literally drown. You see the
good surfers. They just effortlessly paddle out. They
figured out how to do that. They sit out there until a big
wave comes. They know how to find a big wave. Then they
say, ‘Yeah, I’ll ride that big wave because that big wave is
worth my time.’ They don’t waste energy. All energy is
put towards good surfing.”

24.3.5 People

The other factor to weigh heavily is the people behind the


project. If the project maintainers have a track record of running
high quality projects, that should be an immediate upgrade in terms
of your interest level. Of course, famous maintainers will already
have this halo effect surrounding all their work. But you should be
paying attention to the lesser known ones as well, who aren’t as
much in the limelight but who steadfastly put out quality open
source and tooling that you rely on.

When it comes to People involved early in a new project, you have an


ace in your hand. You. When you choose to become actively
involved as a maintainer/contributor, instead of just as a passive
user, you gain the power to affect the direction and potential upside
of the technology. Being Early is the best time you can tie
your career to a technology and grow as it grows. You
basically buy a career call option on the tech, which is even better
than owning equity. If it works out, your career benefits from your
involvement and contributions. Jessie Frazelle’s career rose with
Docker, Charity Majors with MongoDB, Ryan Florence with React,
Kelsey Hightower with Kubernetes. None were project originators,
all just decided to join while still early and reaped the rewards of the
contributions.

“The best way to predict the future is to to create it.” -


Dennis Gabor

It shouldn’t come as a surprise that when betting on technology, it


isn’t just about the technology itself. Technology happens as the
result of superhuman efforts by very human people, and betting on
tech is almost the same as betting on the people.

It is with this framing that we come to the topic of project values.

24.4 The Value of Values


Values are destiny.
I was first exposed to this idea via Bryan Cantrill, CTO of Joyent (and
elaborated in this talk). Here is a sampling of software platform
values:

Resiliency
Velocity
Interoperability
Simplicity
Security
Maintainability
Performance
Compatibility
Availability

Building technology involves making tradeoff after tradeoff. As


much as these are all desirable values, and we of course want to
achieve all of these qualities, our decisions reveal what we actually
value when we have to sacrifice one for the other. For example,
“Internet Architecture” values availability and simplicity over
security and performance. It isn’t good enough to have stated values;
what truly matters is the values that are evidenced by repeated
action. The people who run the software project vote for the values
espoused by the project with every decision.

Sometimes you get lucky, and the community leaders actually write
down their values on a document. The published Goals and
priorities for C++ list just six goals and four non-goals. Even then,
proclaimed values are only half the story - actions tell the other 99%.

If you fundamentally disagree the values of the community, you will


increasingly disagree with decisions made, actions taken, and even
the way public communication is done. These things can matter
even more than the underlying tech. When you go to industry events
or get clients and customers, you will eventually have to deal with
people in your community, and you will enjoy this a lot more if you
share the same values. The more critical the technology is to your
workflow, the more you must align in values, because it impacts
everything from future development right down to the gritty details
of test suite quality and semantic versioning (Versioning is subjective
because what is considered a bug is subjective).

This is why you see things like TJ Holowaychuk leaving Node.js and
Guido van Rossum laying down his Python leadership. Values
conflict is the ultimate reason why a technology will fail to work out
for you, as it is the hardest to fix. So when betting on a technology,
you would do well to get as much clarity as possible on what it
values, and to contribute to shaping positive values as you get
involved.
Chapter 25
Profit Centers vs Cost Centers
As an employee, you should be aware of whether you work in a
“profit center”, a “cost center”, or a “investment center”. This is a
somewhat artificial, and arguably toxic, classification, but it can
predict company behavior, so it is worth discussing.

25.1 A Disclaimer
If you see people acting one way while vehemently denying its very
existence, you may have hit on some fundamental, inconvenient,
truth. That is how I warily, carefully, approach this loaded topic. It
is extremely loaded because it concerns the relative worth of
employees, which is not at all polite conversation.

My only goal here is to offer you first exposure to the received


wisdom on this topic for those who haven’t even heard of this, and
then to leave you to come to your own conclusions. I don’t even
know how to feel about it myself, apart from the fact that I very
definitely have mixed feelings on the topic.

25.2 Definitions
Alright, I’ve covered my ass. Here goes:

Profit centers bring in money to the company. There is no


limit to how much they can bring in, however their outcomes are
not always within their control (e.g. due to the economy and
competitive landscape).
Cost centers spend the company’s money as efficiently as
possible. The maximum possible savings is 100%, however
controlling spending is more predictable (as it is tied to things
within company control).
Investment centers hemorrhage the company’s money today
in hopes of profit tomorrow. This can take the form of
conducting R&D, or creating loss leaders that draw future
customers.

Now, as a developer in a dev team: Which are you in? Which do


you want to be in?

The problem is that these concepts don’t exist in formal accounting.


They are a matter of perception, and therefore sometimes the subject
of intense politics and spin:

An out of control cost center might justify itself as an investment


center based on promising future benefit that never arrives.
A desparate or greedy profit center might find a loophole that
lets them book profit upfront and misattribute the true cost to a
cost center.
Investment centers get set up when business is going well, waste
money for years with no accountability, and get shut down at the
first sign of trouble.

These shenanigans aren’t theoretical, they happen all the time.

25.3 “Close to The Money”


Time for a quick anecdote to help you understand how real this is
outside of tech.
When I was in investment banking, we not only directly
acknowledged the profit center/cost center divide, we formalized it
in department group names:

“Sales and Trading” and Corporate Finance directly dealt with


clients, closed deals, and booked revenues, hence they were the
Front Office.
Risk and Compliance reviewed deals for regulatory, market, and
counterparty exposure limits, therefore they were the Middle
Office.
Accounting, Logistics, and Operations did the dirty jobs of
confirming and clearing trades with their counterparts at other
institutions, the final step of any trade or deal, hence they were
the Back Office.

The bewildering array of departments in the bank was originally


hard to remember, until a trader pulled me over and explained,
“Look, it’s simple. You make more money the closer you are to The
Money.” (In a bank, “The Money” meant either the clients, who had
the money, or having executive decision on deals, where the bank
made money.)

It was true. Front Office people could make millions as a cut of the
revenue they brought in. Sharp suits, flashy smiles, corner offices,
busy busy. Middle Office people mostly consisted of retired Front
Office people or model quants (people who measure risk rather than
take it). Back Office was generally the lowest paid and had the worst
literal office space and budget. Dim lighting, TPS reports.
Promotions went one way (from Back to Middle to Front) but never
the other.

Can you spot the profit center and the cost centers? Look, I pass no
judgment on whether this is the right way to run a business and treat
employees. I merely observe that this is a thing that happens.
It isn’t about power - if you screwed up something, the social
structure inverted. Middle Office’s sole job is to rein in Front Office
people when they overstep, and Back Office can make Front Office’s
lives a living hell pretty much on command, as there is always
something they screwed up.

We had no “investment centers” - banks aren’t in the business of


innovation or rapid customer acquisition. I’d say they’re pretty rare
in most companies, but tech companies may have them because they
understand the importance of playing long term games. This is one
of the responsibilities of the CTO compared to the VP of Engineering.

If you are interested in doing research and doing cutting edge work,
get an Investment Center job, free from the shackles of financial
accountability. You’ve probably heard of the amazing advancements
that came out of Xerox PARC and today Microsoft Research and
Google X are probably its spiritual successor. However it is true that
there are much fewer corporate research labs today than before.

25.4 Profit Center, Cost Center


Profit Center “budgets” are “revenue budgets” - i.e. how much they
are on hook to make according to that year’s plan. Profit Centers
think about growth, and what could go right. Cost Center budgets
are what we normal human beings call budgets - an amount of
money set aside that you are cleared to spend. Cost Centers think
about efficiency, and what could go wrong.

Profit Center headcount is based on external opportunity - if


someone with a great network can be brought in that will boost
revenues, or a new market opportunity opens up that requires more
hires, objections are few and far between. Cost Center headcount is
based on internal efficiency - you look for credentials, stability, track
record, and you win by doing more with less. Headcount increases
go through heavy vetting and political horsetrading (not always true;
a company in hypergrowth may actually need to grow Cost Centers
faster than any other department).

When the company isn’t doing well, the company is loath to let go of
top Profit Center people, because they have to do the math around
the loss in revenue vs the money saved. Cost Center people are net
money burners though, so it is easier to let some go and ask those
who remain to do more. This isn’t always true; when the economy is
tanking or the competitive landscape has shifted, there might be not
enough market opportunity to keep around Profit Center people. If
your company has salespeople, talk to them about how they break
down sales pipelines for more information.

Profit Centers and Cost Centers can’t live without each other. They
are partners more than competitors. Profit Centers don’t deserve
100% credit for all the profit they make, because Cost Centers make
it possible for them to get that revenue. Cost Centers aren’t to blame
for 100% of the money they spend, because they to a large part spend
it on behalf of Profit Centers. And yet companies sometimes forget.

If you personally have been through some of this - I’m sorry for
bringing it up - but also we should consider where the developer sits
in all of this.

25.5 The Developer’s Choice


Where does the developer sit? There’s a take going around that
developers are treated like profit centers but are just highly paid cost
centers. I don’t know that it’s always true. It is all a matter of
framing.

On one hand, developer efficiency is a point of pride. The company


does want you to get more done with less. Developers don’t have
direct revenue attribution, and dev teams sure do spend a lot of
money. When you design scalable systems, you are “doing more with
less” - hopefully the cost to maintain the system grows sub-linearly
relative to the number of users of the system, for example. Arguably
you are a high-performing cost center.

On the other, developers are highly paid, highly in demand, have


great offices, and when a new market opportunity opens up, more
developers are needed to write the code to go after that opportunity.
When you create a feature used by millions, like Snapchat Stories or
Facebook’s Newsfeed, that then drives billions of market value to the
company, you are most definitely a profit center.

You can make a good case for either side, even for the exact same
job! Consider the Billing Engineer - their job is to make sure bills go
out, and payments get processed, with discounts, dunning, and
upgrades applied appropriately. Seems like a
reliability/stability/efficiency issue. But if they make even a 1%
improvement in recovery rates, that’s real money. You literally
cannot get closer to The Money than the Billing Engineer.

I think what you are depends on how you are perceived by


management. If you sit on a product team that is going gangbusters,
you are now a profit center, because you helped make that. If you
work on a project that doesn’t make revenue yet, you work on an
investment center. If your company/team/manager fails to translate
your work into business results, you are a very expensive cost center.
Regardless of what you are, it is possible to do well in any of
these roles by beating expectations. Just understand how beating
your quarterly goals might not translate to long term reward from
the company if you’re simply in the wrong strategic place at the
wrong time.

The entire Strategy section of this book is dedicated to helping you


select projects and companies where you will be a profit center, and
if you aren’t in one, to understand how to potentially turn or pitch
your work into something that is a profit center. But regardless of
where you sit, do always acknowledge the contributions of the people
who helped you along the way.
Chapter 26
Career Ladders
“What will it take to get to the next level?”

This is a very open ended question, but it can be nice to set some
guidelines around your company’s expectations. As an individual
contributor, career ladders tell us what the company ostensibly
values (and, by omission, what it doesn’t value). Because they are
formally endorsed systems, you should plan your strategic choices
around your company’s ladder. However, you should try to value
doing the right thing and being a good teammate, over mercenary
optimization to check boxes on an assessment rubric.

26.1 When and Why to Ladder


Some companies don’t have formal ladders at all; they may be too
small to justify the formality. However, it is still helpful for you to
have a clear discussion with your managers about what is expected
for you to succeed in your role. They should want you to earn more
responsibility, increase compensation, and have some long term plan
to keep you growing and engaged for the next 5-10 years. If they
don’t seem to care about giving you a fulfilling long term career, this
is a big red flag.

Companies generally start introducing formal ladders once


engineering gets past 40-50 people. Given a standard ratio of 1
manager to 6-8 engineers, that means between 5-8 engineering
teams - just about the breaking point where a VP of Engineering
stops being able to equitably manage the career progressions of
everyone on a case by case basis. If you see an opportunity to ask for
formal laddering, go for it. Your leadership in the matter will give
you a voice in setting up the system you work in.

Many engineers feel the need to go into engineering management to


reach the next level. However, the demands of managing people
instead of code are wildly different (as discussed in (Chapter 7)).
This can burn out the employee and cost the company a great
engineer, in a perverse form of Peter Principle. Companies combat
this by establishing an equivalent technical leadership track
alongside the natural managerial tracks that form, in the hopes of
creating viable career paths for excellent engineers who don’t want to
manage people. This “Technical Leadership” or “Individual
Contributor” track is what we will focus on for this chapter.

Ladders also serve as a way to normalize experience between


companies. Your title matters when and if you need to get your next
job. Without an industry recognizable level, recruiters can easily
“underlevel” you just to fill a spot, setting your career and
compensation back by years. Counterintuitively, you also don’t want
to have a title well ahead of your experience level. Title inflation
reflects badly on your employer, which then reflects badly on you.

Some companies want to be flatter organizations, and actually stop


at the Senior Software Engineer title - roles and responsibilities then
start taking more precedence than title. Others, like Netflix, only
start at Senior Software Engineer. Is it clear that there’s no
industrywide pattern? Sorry.

26.2 Our Approach


For the first part of this book, we mainly focused on getting you from
Junior to Senior Engineer. We cover this in its own dedicated
chapter in the Careers section (Chapter 5).
The rest of this chapter is focused on giving you a general intuition
for career strategy throughout your coding career. This is difficult
not least because every company and every situation is different -
however we do have a lot of hard data collected from public
engineering ladders (see below). We can combine that with intuition
and anecdata from shared experiences to arrive at some probably
good ideas.

26.3 What Companies Want


There is some consensus on what to call each experience level. If we
had to condense each:

Junior: Learning best practices, executing under guidance.


“Intermediate” developers also fall into this bucket by virtue of
being not-senior.
Senior: Independent execution, mentorship of Juniors.
Staff: Team lead, defining best practices, architecture,
improving productivity.
Principal: Industry accomplishments, owning
technology/roadmap.
Large companies also have “Architect”, “Distinguished” and
“Fellow” titles to reflect various degrees of super-seniority.

This loosely maps to the five-stage Dreyfus model of Directed Skill


Acquisition:

Novice: Rigid adherence to rules or plans. Little situational


perception. No (or limited) discretionary judgment.
Advanced Beginner: Guidelines for action based on attributes
and aspects, which are all equal and separate. Limited
situational perception.
Competent: Conscious deliberate planning. Standardized and
routine procedures.
Proficient: Sees situations holistically rather than as aspects.
Perceives deviations from normal patterns. Uses maxims for
guidance, whose meanings are contextual.
Expert: No longer relies on rules, guidelines or maxims.
Intuitive grasp of situations. Analytic approach used only in
novel situations.

All companies track progression on multiple dimensions - here is an


amalgam of how the extreme ends of the experience spectrum look
like so you can place yourself and find a direction to improve.

26.3.1 Most Junior

Technical Competence

Learning best practices and the codebase


Can work on scoped problems with some guidance
Write clean code and tests
Participate in code reviews and technical design

Execution

Commits to & completes tasks within expected time frame,


holding themselves accountable.
Building estimation skills.
Asks for help to get unblocked when necessary.
Learning tools and resources.

Communication

Learning to work collaboratively on a team and communicate in


meetings.
Effectively communicates work status to teammates and
manager.
Proactively asks questions and reaches out for help when stuck.
Voices concerns or need for clarification to their manager.
Accepts feedback graciously and learns from experience.

Influence

Has project/team-level impact.


Pairs to gain knowledge.
Represents their team well to others in the company.
May participate in hiring.

26.3.2 Most Senior

Technical Competence

Technical leadership for their domain


Independently designing solutions for scale and reliability
Primary expert across multiple areas
Focused on highest impact, most critical, future-facing decisions
and guidance, advancing company technically and affecting
business success.

Execution

Able to plan & execute large, complex projects with


interdependencies across teams and systems, spanning months
to years.
Looked to as a model for balancing product and engineering
concerns.
Trusted with any critical project or initiative.
Owns capacity and growth of technical systems across multiple
domains, defining key metrics.
Creates a compelling technical vision with company-level
impact, anticipating future needs.

Communication
Comfortably communicates complex issues to diverse audiences
inside & outside the company.
Proactively identifies and remedies communication gaps and
issues.

Influence

Routinely has org- to industry-level impact.


May work with exec team on high level technical guidance.
Has obvious impact on company’s technical trajectory.
Influences company goals and strategy, identifying new business
growth opportunities.
Expert on company’s platform, architecture, and workflow.
Builds leaders.
Educates across the org.
Defines and models engineering brand, patterns, and practices.
External ambassador, drawing engineers to the company.
Recognized leader within company and possibly in broader
technical community.
Leads complex initiatives with long-term, strategic value.

26.3.3 Other Dimensions

Many ladders evaluate employees based on how they demonstrate


Company Values as well, covering themes from teamwork,
disagree and commit, growth mindset, ability to give and act upon
feedback, and degree of trust. If you are in a position to influence
your company ladder, consider advocating for including sponsorship
of underrepresented minorities directly into your company ladder
(discussed in Chapter 6). The best way to show you really care about
making a dent in tech’s diversity problem is to make it a part of your
formal evaluation and promotion criteria.

26.4 Individual Company Ladders


Quite a few companies publicly share their engineering ladders.
Here, we will take a brief look at each, but of course feel free to dive
into each to appreciate fuller details.

Fog Creek: from 2009, but obviously Joel’s thinking has been
very influential. Focus is on growing ownership, ability to write
production code independently, shipping experience, and at
senior levels, design/planning/architecture. Teamwork, self
study, mentorship, and impact are all key, as well as the Joel
Test.
Rent the Runway (spreadsheet): from 2015. Takes a fun D&D
inspired Dex/Str/Wis/Cha stats based evaluation,
corresponding to technical skill, productivity, impact, and
communication/leadership. Management track is also included,
with more focus on architecture, hiring, organizational skills,
and leadership/salesmanship.
Artsy: inspired by Rent the Runway
CapGemini UK: also inspired by Rent the Runway
Basecamp: Pretty minimal, just like the rest of the company’s
ethos.
Thumbtack (spreadsheet): from 2019. Breaks down technical
skills into code quality/testing, debugging, and
scoping/project design, and nontechnical factors to
collaboration, citizenship, leadership, and impact.
Leadership is interestingly broken down into Autonomy,
Judgement, Initiative, and Consensus Building.
CircleCI (spreadsheet): one of the most well known ladders,
detailed but not overwhelming. Notably, one of the values
assessed is Security.
Envoy: pretty simple ladder list, by a hot company.
Financial Times (webapp). Even has an API! Only four areas
across Technical, Leadership, Delivery, and Communication are
assessed. Feels manageable.
Patreon: focuses on five dimensions of Technical, Execution,
Communication, Influence, and Maturity
Meetup: splits roles into Makers and Managers.
Makers focus on Architecture & framework & software
development, Best practices & architecture & code reviews,
Technical skills evaluation & mentoring, Introduce new
engineering tools & mentor adoption, and Recommend
process improvements & support adoption.
Managers focus on Performance evaluation, Career growth,
Recruiting & resourcing, Rollout process improvements &
adoption of engineering tools and Organization &
administrative.

Socialbakers: seems pretty similar to Meetup’s ladder


Medium (gist): has tracks for Mobile, Servers, Foundations,
Web client, Project Management, Communication, Craft,
Initiative, Org design, Accomplishment, Wellbeing, Career
development, Evangelism, Community, Recruiting, and
Mentorship! Phew!
Starling Software: Uses Big O notation to denote levels,
which is a fun shibboleth. Skills are broken out to Computer
Science, Software Engineering, Programming, Experience, and
Knowledge. This one has a long record on Hacker News but is a
good map of things that we can work on.
Kickstarter: basically a bunch of job descriptions, including
Data careers and CTO.
Brandwatch: explains levels at a high level, and then breaks it
out for IC’s and Management in this spreadsheet. A total of 15
attributes to work on!
Spotify: famous for its “Squad/Tribe” structure - emphasizes
“Steps”, with a simple list of five sets of behaviors they want:

Values team success over individual success


Continuously improves themselves and team
Holds themselves and others accountable
Thinks about the business impact of their work
Demonstrates mastery of their discipline
Chuck Groom - this is unusual - personal thoughts on a Job
Ladder, though the author is a senior engineering leader at VTS.
Good discussions on how having ladders helps, as well as
descriptions of Anti-patterns. The Principal Engineer
“antipatterns” are notable:

Over-emphasis on scaling or high availability far


beyond business needs. Spends too much time chasing
the newest “shiny” technology. Doesn’t collaborate or
ask questions. Condescending. Has “pet” agenda.
Pisses off senior leadership.

Khan Academy (doc)


Monzo: A clear, simple ladder
Square (spreadsheet):
More: https://www.cnblogs.com/dhcn/p/10729002.html

More ladders (non engineering) are available at Progression.fyi,


which can help give further grounding for companywide leveling.
See also the Holloway guide to Job Titles and Levels.
Chapter 27
Intro to Tech Strategy
This is a very high level overview of tech strategy. That is, the
business of software rather than the art and science of creating
software itself.

It goes without saying that your coding does not have independent
value. It must be applied usefully on some economic problem to
have sustainable real world impact.

27.1 Tech Strategy and Your Career


Perhaps more pertinent to your career: your coding ability will be
associated with the success of your company. We infer better ability
in someone who was an early engineer at Uber, despite having no
knowledge of their actual contributions, compared to someone at an
unknown startup who may have accomplished far more interesting
things.

Even if you don’t care about that, and never intend to be a founder,
your understanding of the business you’re in allows you to offer
suggestions and prioritize work in alignment with economic
opportunity. It may not feel like much, but as the person closest to
the code, you have a tremendous amount of autonomy to the final
experience delivered:

You make delivery estimations, and give advance warning of


serious technical blockers
You make technical tradeoffs between the “quick and dirty” way
and the “right” way
You pick abstractions for scale and pluggability vs rejecting
premature abstraction
You evaluate commercial solutions compared to the cost of a
custom solution - the infamous “build vs buy” decision
You can defensively code for every probable system failure, or
understand where failures are more acceptable than their cure
You sweat the fine details of Accessibility, UI/UX, Uptime and
Response time because it matters to users
You can find the easy-to-implement “low hanging fruit” ideas
offered by your data models and pre-existing frameworks (and
plugins), and can suggest them to your product owners.

As you advance in autonomy, you will get to pick the projects you
work on, and even pitch new initiatives that you eventually own (this
is a GREAT career move).

If you read the story of how Google Maps’ Satellite view was almost
named “Bird Mode” due to a CEO decision, but was ignored by the
product team, you will understand how your broad-ranging powers
even go as far as naming products, which is in no developer’s job
description. When the chips are down, Developers are designers
and product managers of last resort.

As you increase in seniority, you will also have to grow in your


business judgment. In fact, taking a glance over any Engineering
Career Ladder (Chapter 26) will tell you how important your
business impact is to your career advancement.

Finally - the technologies that you work with are also strongly
influenced by their economic incentives. “Free and Open Source”
does not mean “Free of any commercial considerations.” Nor does it
mean “Open Direction decided by Direct Democracy.” The platforms
you run on , whether it is the browsers, public clouds, databases,
payment/fulfilment platforms, or even language distributions, all
have massive investments. Well above 10 figures in some cases!
27.2 Software is Eating the World
In 2011, Marc Andreesen wrote “Why Software is Eating the World”
which set out the foundational thesis of his venture capital firm. I
am assigning this to you as required reading. It foretold the
rise of massive software businesses in the decade since, and made
the case for why every industry is now in the business of software.
Marc has since updated this with takes on healthcare, biotech and
crypto.

This is now widely understood in the software industry, and you


should at least be aware of it even if you disagree with it. (Though it
does make the software engineer the center of the new world, so you
will probably like it a little bit!)

27.3 Horizontal vs Vertical


The basic split in tech strategy is Horizontal vs Vertical
businesses.

If you work on infrastructure you might be familiar with “Horizontal


vs Vertical scaling”. This is different. Here we are talking with
respect to your customers:

If your business is designed from the ground up to serve a single


industry or customer profile, you are a Vertical business.
Vertical businesses typically grow by offering more and more
capabilities to serve the customers they have, despite these
features existing as standalone offerings elsewhere. The goal is
to be a “One Stop Shop”. User experience can be mindblowing
when it is vertically integrated - but frustrating when limitations
arise.
If your business can be used by customers across any industry,
you are a Horizontal business. Horizontal businesses typically
grow by reaching more and more kinds of customers, building
any integrations required or adding knobs and configs to
accommodate their use case. The goal is to “Do One Thing Well”
and be the best in the world at it. Many “API Economy”
developer tooling platforms are Horizontal: Stripe, Auth0, Okta,
Twilio.

The battle between Horizontal and Vertical is timeless in the history


of computing. Here is how Andy Grove, former CEO of Intel,
described the shift in the computing industry over his career:

New technology categories usually start vertical, because nobody else


makes all the components needed. Eventually the individual roles
become well-defined enough that horizontal specialists make sense.
Clayton Christensen described this as a movement from
“interdependent architectures to modular ones”. This usually
becomes an uncoordinated mess, so then a counterbalancing
movement happens and we arrive at an uneasy equilibrium with
both horizontal and vertical players in the same industry.

There are two other analogies typically offered to describe this


divide:

Apple (Vertical) vs Android (Horizontal): Apple is 100%


vertically integrated for the high end smartphone market. From
Apple Pay, iMessage, iCloud, macOS, all the way down to
making its own processors. Android is a free open source
operating system and it is used by all sorts of phone, watch, car,
home, camera, TV, even refrigerator manufacturers.
Bundling (Vertical) vs Unbundling (Horizontal): a
reference to this famous Jim Barksdale/Marc Andreesen quote:
“There are two ways to make money in software - bundling and
unbundling.” Depending on who you ask, we are in the middle
or tail end of a Great Unbundling in business software -
exchanging the Microsoft Office suite for Airtable, Zoom,
Notion, and Slack - before we get tired of jumping between
dozens of subscriptions and demand an integrated experience
once again.

The maturation of technology is usually rife for a “Cambrian


Explosion” of unbundling, which is exactly what happened to
Craigslist, Excel, and the chip design industry. Less mature
unbundling movements that have only recently begun are Cable TV
(splitting up into individual subscriptions like Disney+ and HBO
Go), universities (splitting into online courses), radio (splitting into
podcasts) and newspapers (though newspapers have already been
decimated by social media, top journalists are now leaving and
simply starting their own newsletters). There are cases to be made
for unbundling everything else from LinkedIn to banks as well.
These are all promising areas for startups.

None but the most disciplined of businesses are 100% horizontal or


vertical. There is usually a healthy debate within the company as to
which direction to pursue, as both are valid ways to grow. But
pursuing both can signal a lack of vision and inability to accept
tradeoffs and will lead to problems in resourcing, product
development and sales/marketing.

You’ll also hear this idea applied to other aspects of business -


Horizontal vs Vertical Integration, Horizontal vs Vertical
Acquisition, and Horizontal vs Vertical Strategy. They are all
variants of business expansion along one of these lines.

27.4 Business Models


The next dimension you should be aware of is business models.
Quite simply, this answers the question of “who pays?”, “what
directly makes revenue go up?”, and (not often enough) “what must
the company spend money on?”

The most common ones you should be aware of are Agencies,


Advertising, Subscriptions, and Marketplaces. Most other
companies that employ software engineers have aspects of these
embedded within them. I cannot do justice to them in the space I
have here, but I will at least introduce them and try to give you
enough to learn more.

27.4.1 Agencies

The Agency model is the most common one for small teams. I don’t
have numbers for this, but my guess is it is responsible for most tech
jobs as well.

With an agency model, you have one or more clients and you
are paid for your time.
If you are a dev team within a bigger, non-tech company, you are
basically an in-house agency with one client.
If you are a consultant or freelancer, you are a one-person
agency.
There are a thousand small ways to tweak dev setups and
payment terms, but broadly, as the amount of dev-hours grows,
so does the amount of money flowing into the agency.

Ideally, you should be trying to get the most done per hour, but
cynically, bad incentive systems can lead to just booking more hours.
The common thread is that your income isn’t fully pinned to the
success of your client’s business, which is sometimes a feature and
often a bug of the Principal-Agent Problem. Despite the flaws,
agencies are still so popular because of the sheer amount of work
that needs to be done, and the specialized talent needed for certain
types of high skill work.

27.4.2 Advertising

The Advertising (or Media) model is next most common. Here you
make money by increasing the traffic to your site or usage of your
product and then selling advertiser spots.

Sometimes the advertising is display ads (paying for Cost Per


Milles - aka ears and eyeballs - just to be present and build
brand awareness).
But most advertisers these days prefer performance based
marketing - paying for directly measurable user actions e.g.
Cost per Click.

Most social networks and news/opinion sites run this way, though
there is an absolutely massive assortment of marketing technology to
help ad buyers find the best ad inventory. Because end users pay
nothing and advertisers pay for access, the derisive view is that
“Users are the Product.” However this may not always be a negative
- the Wirecutter and the Points Guy are both well-regarded high
quality content sites that make their money from affiliate marketing,
which is a variant of performance based marketing (pay-on-purchase
rather than pay-per-click).

Social Media and Digital Media differ in one important way - digital
media companies have to hire journalists and editors to create the
content that draws people, whereas social media companies get
User-Generated Content for free.

Social media is a unique intersection of tech and society, where we


trade our information and attention for news and social status. On
paper you might be an ads business, but as far as humans are
concerned, you offer Status as a Service. People literally compete
to give you their best content for free. This sounds like a wildly
attractive proposition, and at first it was. You can see Reid
Hoffman’s Series B pitch deck for LinkedIn to appreciate just how
compelling it is. But in recent years the hidden “cost” of running a
social media company has emerged in the need for content
moderation. You might start out a technologist and end up spending
all your time debating the fine points of 47 U.S.C. § 230 and having
complex debates about deplatforming and misinformation.

With digital media companies, including podcasts, the trend has


been toward realizing that ads aren’t the only way to make money -
you can charge your audience directly! That leads us to
subscriptions.

Tip: The reality of most media companies today is to tend


toward some sort of hybrid Advertising (for free users) and
Subscription model (for highly engaged users), so it isn’t an
either-or proposition.

27.4.3 Subscription

The next most common type of business model is Subscriptions:


If you sell usage of your software, this is known as Software as a
Service (SaaS), which is an investment category all its own. The
common characteristic of the IaaS/PaaS/SaaS models is they
transform Fixed Cost to Variable Cost which provides immediate
value for customers.
Content subscriptions are the other major category. This
includes audio (e.g. Spotify), video (e.g. Netflix), news (e.g. the
New York Times), blogging (e.g. Stratechery), data (e.g.
Crunchbase) or membership to a professional
group/community. All of which require software to support
them.

Since users pay directly for the software/content/membership, and


can walk away at any time, the incentive alignment is clear - use
subscription revenue to make a better offering, which helps drive
more subscriptions, which helps finance a better offering, and so on.
Since digital content can be replicated infinitely, the gross margin
and therefore cash flow of these kinds of business is high. To grow,
the business has to expand its marketing funnel, increase conversion
rates, keep a lid on cost of content (e.g. revenue sharing with content
creators), and decrease churn.

Most subscription businesses are a buffet - pay your subscription and


it’s all-you-can-eat. This has an inherent flaw - some people just eat
a whole lot more than most. This is expensive to support and the
lighter users subsidize those who “abuse” the platform (by bringing
down average usage). Therefore all subscription business eventually
start charging per-seat, and then find their way toward some form of
metered billing (using some form of value metrics). Doing this too
eagerly can have the perverse effect of punishing your most engaged
users.

Fun fact: Marc Benioff is widely credited with inventing


SaaS, and ironically introduced it with the famous “No
Software” campaign in 1999.
27.4.4 Marketplaces

Marketplaces are the hardest software businesses to build, and


therefore there are fewer of them than other kinds of business.
However, once established, they exhibit gobsmacking double-sided
network effects, which makes them very valuable (Bill Gurley
describes marketplaces as creating “money out of nowhere”).
Developers both use and work for marketplaces every day without
realizing it - ranging from Airbnb and Uber to Cameo and Udemy
(see this list for more).

Marketplaces match buyer and seller, just like their offline


counterparts. The marketplace gives both sides an assurance of:

liquidity (buyers will be able to find what they want, sellers will
be able to sell what they have, and both can do it faster than
anywhere else)
and quality (buyers are good customers whose checks don’t
bounce, and sellers must not sell fake or defective products, or
they get kicked off the platform).

In exchange, it takes a fee from either the buyer or seller or both.


Because the fee typically is a percentage of the money that changes
hands, this is called a take rate and marketplaces want to grow the
Gross Merchandise Volume it is based on. Take rates range wildly
based on platform power - Gumroad charges 3.5% while Apple and
Google’s app stores take 30%.

This model sounds simple, but there are a lot of ways to make
additional revenue. For example, suppliers often pay certification or
listing fees, or they could instead be paid to join. It also turns out
that a marketplace’s own site is prime ad space and that customers
will pay for better service. So as your marketplace grows up the
Hierarchy of Marketplaces, you can build both an entire advertising
business AND an entire subscription business INSIDE a marketplace
business, which is what Amazon has done.

In a way, this is the business model to end all business


models, because you essentially now run your own
economy.

Most platforms eventually add marketplaces, sometimes called App


Stores. Fun fact: Steve Jobs gave Marc Benioff the idea for Salesforce
AppExchange, the first “App Store” in 2005.

Two final, major advantages you need to know:

Marketplaces don’t own inventory, since suppliers are the ones


to bring their inventory to market. This makes them asset light,
which means they can scale enormously with little investment.
Airbnb offers more room nights than any hotel chain in the
world, without owning any hotels. Uber and Lyft transport more
passengers than any taxi company, without owning a car.
Large enough marketplaces drive both seller and buyer to
optimize for each other - buyers want high ratings
(especially when buying repeat services) and sellers want great
reviews. The slightest nuances of the platform - everything from
picture dimensions to product offered - will be exploited to
exactly meet the marketplace’s needs. This not only means that
buyers and sellers are optimizing for each other for free, it also
makes starting a competitor marketplace extremely difficult
since investments have been made and reputations gained. In
other words, great marketplaces have positive virtuous cycles.

These benefits aren’t free - marketplaces are hard to build for a


few reasons:

Fakes and Disputes: Marketplaces offer an implicit or explicit


guarantee of quality, which means they need a way to handle
what happens when things go wrong.
If goods are sold, you must handle the issue of fakes,
lemons, and returns. This might not seem fun, but Zappos
made great return policy a competitive advantage.
If services are sold, you must handle the billion things that
can go wrong when humans work for humans, and you’re
not around to verify what actually happened. Airbnb had to
roll out a Million Dollar Liability Insurance Program to
reassure hosts, whereas Uber uses its rating system to keep
drivers in line.
The art of maintaining marketplace quality is an entire
discipline of its own. Underlying the entire discussion is
the fundamental problem of how to create trust
between strangers. The best place to learn more is
Lenny Rachitsky’s research.

Cutting out the Middleman: Every strong supplier


eventually chafes at paying the take rate. At stake is not only
more revenue, but also a more direct, long term relationship
with the customer, free of any unfavorable changes the
marketplace may make in future. For service marketplaces,
buyers and sellers who like each other enough can simply take
their relationship “offline”. This means that buyer and seller
churn (also known as platform leakage) is a huge problem for
marketplaces, and it must provide a compelling reason for both
sides to stay on even after they have found each other. Two
natural reasons to stay are polar opposites: either infrequent,
large transactions where reputation matters (Airbnb) or
frequent, small ones where you don’t care who does it in a form
of perfect competition (Uber).
The Chicken-and-Egg Issue (alternatively, the “cold start”
problem): If there aren’t enough buyers, it is not compelling for
suppliers to join the platform. If there aren’t enough suppliers,
buyers won’t even come by. A marketplace can toggle back and
forth between being demand or supply constrained a few times
in its life. As many as 40% of marketplaces remain supply
constrained throughout their entire life, which is why having an
encyclopedia of ways to grow marketplace supply is a hot topic.
Political Risk: Successful marketplaces are very disruptive to
the livelihoods of many legacy sellers because they commoditize
their offering. There is almost always political backlash because
of the tremendous power shift. If lobbying is successful, your
marketplace could be destroyed by legislative fiat.

One way to get past many of these issues is to be your own supplier -
so that you only grow the demand side of the market. This is
sometimes called “single player mode”. If your “marketplace” has
value without any network effects, then it has a reasonably good
chance of attracting enough people to get network effects (Often
referred to as “come for the tool, stay for the network”). You could
view all ecommerce businesses as “one-sided marketplaces”,
although the trendy term for this is Direct to Consumer or “D2C”.

27.4.5 Gaming

In reviewing this section, Julian Garamendy pointed out one other


business model that wasn’t quite accounted for: Gaming. Given that
gaming is a huge megatrend (we discuss megatrends in more detail
in Chapter 29), I feel I must discuss this somewhat. Some games,
like World of Warcraft, are subscription businesses. Others, console
and PC games like Zelda and Red Dead Redemption, are one-off
purchases, akin to D2C ecommerce with entirely virtual goods.

But there is a massive genre of games which consist of


microtransactions and real money auction houses - games like
Fortnite, Candy Crush, Star Wars Battlefront and Diablo 3. These
rely on “whales” getting hooked, and are more akin to casinos. They
may not be the most beneficial software humanity makes, but they
generate enough money that they must be acknowledged.
27.5 Platforms and Aggregators
I’ve used the word “Platform” a couple times without definition.
The word is horrendously overloaded, so that you can never be sure
what is meant without more context. When it comes to the business
of software, though, you can do a lot worse than listen to Chamath
Palihapitiya quoting Bill Gates:

I was in charge of Facebook Platform. We trumpeted it out


like it was some hot shit big deal. And I remember when we
raised money from Bill Gates, 3 or 4 months after — like
our funding history was $5M, $83M, $500M, and then
$15B. When that $15B happened a few months after
Facebook Platform(…) Gates said something along the lines
of, “That’s a crock of shit. This isn’t a platform. A
platform is when the economic value of everybody
that uses it, exceeds the value of the company that
creates it. Then it’s a platform.

He’s right. The Bill Gates Line defines Platforms as serving an


ecosystem that exists because of them, but is also much bigger than
them. And because Platforms are such tremendous economic
centers of gravity, we need to differentiate them from your average,
run-of-the-mill marketplaces (which, I hope I have established, are
powerful economic engines already).

The three most important platforms of all time are Windows, iOS
and Android. Per Ben Thompson, it’s no coincidence that all are
operating systems:

Windows was the OS for the Desktop Age: Developers


made apps to run on Windows and manufacturers made
hardware to run Windows, which made Windows more
attractive for both sides. Quoting Ben:

The end result was one of the most perfect business


models ever: commoditized hardware vendors
competed to make Windows computers faster and
cheaper, while software developers simultaneously
made those same Windows computers more capable
and harder to leave.

iOS and Android are the OS for the Mobile Age:


Developers make apps for iOS and Android, and users are
trained to find everything via the Google and Apple Play Stores,
which makes iOS and Android more attractive for both sides.

Note: Ben originally called Google Search a platform,


but changed his mind as he developed his theory
further.

Because of its unprecedented success as the main cross-platform


platform for gaming, Epic Games’ Unreal Engine must also be
considered in the same league. As with all things Gaming-related,
see Matthew Ball’s epic Epic Games primer for more details.

Platforms exist on a higher level than business models - for Windows


it was licensing, while for Google it is ads. Yet the two-sided nature
of a Platform makes it seem like a Marketplace, and Bill Gates’
definition seems comparable to GMV.

But Platforms don’t play the transaction volume game - their M.O. is
to look at the most critical use cases and to build them out as
subsequent products. Windows built out Office (Word, Excel,
Outlook, etc), and then Windows Server. Google built GSuite (Docs,
Sheets, Gmail, etc), and acquired YouTube.

I mentioned that the usage of the term “Platform” is quite


overloaded. Hugh Durkin identifies three traits:

serving multiple different types of consumers


facilitating efficient value exchange through building
and operating a marketplace
building a shared set of common standards through
standardised internal and external facing APIs

Search around and you’ll find more definitions. Everyone tries to put
their own spin on it, which mainly serves to show that it’s an
important thing to be.

Not all Platforms are economic powerhouses. If the market is not a


natural monopoly, then there may be a lot of competitors, and a race
to the bottom in terms of pricing. This happens in many industries
from publishing to semiconductors. In fact there is often a
phenomenon where platforms become the least value-adding part of
the supply chain, with relative power flowing to creators and
distributors. Stan Shih, founder of Acer, famously called this the
Smiling Curve, and the concept has been extended to everything
from self-driving cars to Taylor Swift (aka the music industry).
For platforms to do well, they have to constantly add value or achieve
unbeatable network effect. Some financiers have seen great success
reducing competition by rolling up a group of platforms.

A contrasting economic model to Platforms are known as


Aggregators.

27.5.1 Aggregators

Aggregators are the main characters of Aggregation Theory, defined


by Ben Thompson.

Note: If this seems strangely focused on the theories of one


person, it’s because Ben has shaped the entire zeitgeist of
tech with this theory, to the point of being quoted at Apple
keynotes - so I feel compelled to introduce it to you.

Aggregators must have three characteristics:

Direct relationship with users (payments, accounts, regular


usage)
Zero Marginal Costs for serving users
Demand-driven Multi-sided Networks with Decreasing
Acquisition Costs (aka a very specific type of the two-sided
network effect we have discussed)

Aggregators take advantage of a fundamental shift in power enabled


by the Internet and the digital economy. Because the marginal cost
of digital goods is zero, the ability to generate profits has shifted from
companies that control the distribution of scarce resources
(Suppliers) to those that control demand for abundant ones
(Aggregators).
If you aggregate users, you call the shots. This means great
user experience is paramount, and explains the tremendous amount
of investment in web and mobile clients over the past ten years.
(One answer to why React developers are in such demand.)

Levels of Aggregators:

1. Supply Acquisition - they have a great user relationship, but


buy their supply, e.g. Netflix and Spotify. Content cost is a
concern.
2. Supply Transaction Costs - they don’t buy their supply, but
pay some marginal costs to bring suppliers onboard, e.g. Uber
and Airbnb.
3. Zero Supply Costs - they don’t buy their supply, and incur no
supplier acquisition cost, e.g. Amazon.
4. Super-Aggregators - they have at least three sides - users,
suppliers, advertisers, and have zero marginal costs on all of
them. E.g. Facebook (with Instagram), Snapchat and
Google.

27.5.2 Platforms vs Aggregators

It can help to situate these two models by contrasting them. I’ll point
you to Ben’s writeup on his site:

Platforms (e.g. Windows) are critical for their suppliers (e.g.


Windows apps) to function, Aggregators (e.g. Google) aren’t critical
for their suppliers (e.g. websites) to function.

Platforms facilitate a relationship between users and 3rd-party


developers, while Aggregators intermediate the relationship between
users and 3rd-party developers.

Platforms help people do things (aka Bicycles for the mind),


Aggregators do things for people.
To find more information, you can read Ben Thompson’s body of
work - be aware, his definitions changed between 2015 to 2019. Also,
the commonly accepted usage of the word “Platforms” also
encompasses Aggregators.

One final point is relevant for us - Both Platforms and Aggregators


make it so much easier for suppliers to reach customers that it
enables new types of businesses to be created atop them. Apple,
Microsoft, YouTube, Amazon, Teachable and others have all minted
millionaires, and developers can make a great living working on
them or for them.

27.6 Other Strategic Perspectives


As you might see, the analysis of what drives the rise and fall of tech
companies can get very nuanced indeed. Though tech giants get all
the limelight, good ideas are fractal, and you can apply them in
smaller contexts within your professional network, language
ecosystem, and internal company politics.

I haven’t any room left but want to share a few more interesting
dynamics you can investigate on your own:

The funding of Open Source is always a point of contention


- Open Core models are increasingly viable and benefit the
developer ecosystem while also being great employers.
However, if your core is open, anyone can compete with you on
hosting your core, so this has caused the Great Relicensing.
Land Grab vs Organic Growth: some business opportunities
must grow rapidly due to a Winner-Takes-Most network effect,
and so should raise VC. Others will always be one of many so
profit and unit economics should be a core focus for
bootstrapped growth. Joel Spolsky has a good introduction to
this idea.
Categorical Imperatives: I have a suspicion that software has
intrinsic desires, expressed by inevitable and unimaginative
customer and product manager feature requests. If you
anthropomorphize the codebase you are working on and treat it
as a living, breathing thing, you can think about what IT
“wants”. You can therefore predict what features you are going
to have to build. Examples:

Every collaboration app wants email


Every data analysis app wants the power of Excel
Every marketplace wants to be two-sided
Every social app wants chat
Every User Generated Content app wants Snapchat’s Stories
format
Every B2B app wants a dashboard
Every site author eventually wants a CMS
Chapter 28
Strategic Awareness
Strategic Awareness = Focus + Technology Adoption +
Value Chain + Systems Thinking

As discussed in Intro to Strategy (Chapter 21), The basic starting


block for Strategy is having a mental model of present reality.
This is not only important for making future plans (getting from here
to there), but also for sifting through the deluge of information
coming at us from every angle.

This chapter is dedicated to giving you some basic ideas for where to
start.

I really, really hesitated to call this “Strategic Awareness”. The term


is associated with some rather stuffy business management
education material. But the term is right - be aware of what’s around
you, focusing on things that matter to you, for the purpose of
forming some information consumption, technology choice
and career strategy for yourself.

28.1 Concern vs Influence


In Stephen Covey’s 7 Habits of Highly Effective People, he makes a
distrinction between proactive people - who focus on what they can
do and influence - and reactive people - who focus their energy on
things beyond their control. He visualizes it with two concentric
circles:

A larger Circle of Concern: including everything you care


about, from personal concerns (health, relationships, etc) to
global concerns (climate, pandemic, etc).
A smaller Circle of Influence: including the things we have
the power to affect. Some authors define a third zone of
Control which separates direct control from indirect influence.

The idea is that people are happier, and more effective, when their
Circle of Influence covers a large percentage of their Circle of
Concern. The converse, a person whose Concern far exceeds their
Influence, is one who spends their time impotently raging and
fretting. With the Circle of Concern, information is pushed to you,
and you are unknowingly manipulated by news cycles and marketing
calendars. When operating in the Circle of Influence, you have the
power to pull the information you need, and you gain back personal
agency.

The real trick to these Circles, of course, is that they exist entirely
within your mind. You have the power to both contract your Circle
of Concern (aka Focus) and expand your Circle of Influence (aka
Competence, Power, Network). The rest of this book deals with your
Circle of Influence, so here we shall concern ourselves with helping
you focus.

Ways to shrink your Circle of Concern as a developer:

Have a primary domain that you concern yourself with -


projects, news, and discussions in this always take priority over
everything else.
Don’t spend too much time on Hacker News, or on email news
recap newsletters.
Trim your unrelated follow list on Twitter (it is never personal,
you can refollow in future).
Learn Just in Time instead of Just in Case.
Prefer grooming relationships with people who know things you
don’t know, and resist the urge to learn everything yourself.
Get comfortable lampshading ignorance (Chapter 34).
Having better things to do than know everything is always a
valid defense.

“Stop caring so much” is very persuasive, of course - but in tech,


things move fast, and sometimes you do have to keep tabs on things
you don’t yet use. So we need something more nuanced than a
binary Concern/Ignore model.

28.2 Levels of Concern


For Enterprises, Thoughtworks has split out Circles of Concern into
four levels, called a Technology Radar:

Adopt: A strong recommendation for adoption


Trial: Try this out on projects with risk tolerance
Assess: Explore to understand how it might affect you
Hold: Don’t bother

If you are a participant in the ecosystems that Thoughtworks


surveys, you’ll understand that as an Enterprise communication tool,
their radars are necessarily behind the cutting edge. But having
gradations of concerns seems right.

For example, as a frontend/serverless developer, I have strongly


adopted React, whereas Svelte is worth trialing on projects. I think
Machine Learning will change our lives, but it doesnt impact me
professionally yet, so I am assessing it. I have decided to hold off
looking at everything to do with Blockchain and Kubernetes.
Each level can warrant a different level of engagement. For Assess,
it can be sufficient to just listen to one regular “overview” podcast,
like This Week in Machine Learning. Trial technologies are worth
looking through docs and demos and trying on new projects. Adopt
technologies don’t have to be things you actively use in production,
but as a professional in your field, you should be familiar with and
have opinions about (eg by going through talks, source code, or
following GitHub issues, Twitter threads, or email newsletters).

28.3 Bias to Action

Richard Feynman was fond of giving the following advice


on how to be a genius: You have to keep a dozen of your
favorite problems constantly present in your mind,
although by and large they will lay in a dormant state.
Every time you hear or read a new trick or a new result, test
it against each of your twelve problems to see whether it
helps. Every once in a while there will be a hit, and people
will say: “How did he do it? He must be a genius!” - Gian-
Carlo Rota

Quantity doesn’t beat quality when it comes to Strategic Awareness.


Have in mind a small list of problems that you are particularly
looking to answer. Richard Feynman had 12, you can probably make
do with that. Everything else can be let go, or is just akin to
entertainment. As Adam Robinson is fond of noting - beyond a
certain point, you don’t get smarter the more pieces of information
you have, you only feel smarter.

Richard Hamming, in his famous “You and Your Research”


lecture, put it more bluntly: “If you are not thinking
about important questions, then you are not going
to do anything important. “ Keep a short list!

Know What You Want, and Know What People Want. You
don’t have to be interested in everything - knowing what you want
can help you only look out for projects that will be helpful to you, and
knowing what people want can help you pick projects that will be
well received.

Your information inflow should be managed to help you create


action. Not quantity of consumption. People brag about how many
books they read in a year, or obsessively keep up with headlines
(because of Fear of Missing Information). Or you could clip and
organize and summarize everything and have gorgeous notes
everyone fawns over. Great — if your goal is pretty notes. Optimize
for action, not consumption.

“Point of view” is that quintessentially human solution to


information overload, an intuitive process of reducing
things to an essential relevant and manageable minimum…
In a world of hyper abundant content, point of view
will become the scarcest of resources. - Paul Saffo

28.4 Understanding Technology


Adoption
Not everyone adopts technology at the same rate. The key to
your effectiveness comes from understanding what stage a given
technology is in, which stage you want to be at, and (optionally) how
to move technologies to the next stage.
28.4.1 The Rogers Curve

In 1957, Joe M. Bohlen, George M. Beal and Everett M. Rogers first


proposed a bell curve-like distribution of technology adoption, now
known as the Rogers curve:

This gave a simple visualization to an intuitive idea - that technology


comes to life by diffusing from an core set of Innovators, has
crucial usecases proven out by Early Adopters, then put into
widespread use by the optimistic Early Majority and conservative
Late Majority, followed by reluctant Laggards.

These stages do not just reflect the personality of people adopting a


static technology - they also match with the technology itself
improving and maturing over time. For example, you might expect a
technology at the Early Adopter stage to be full of bugs, and not have
a clear killer usecase yet. Whereas a Late Majority technology not
only is stable, it has great docs and a lot of already successful case
studies of others putting that tech in production.
The risk profiles of adopting a technology at earlier stages are
commensurate with career rewards. Here I’ll simply quote Charity
Majors, CTO of Honeycomb:

It’s much easier and faster to become an expert in a subject


still young and evolving, and people are actively looking for
new voices to listen to.

However, of course there’s always a fear that the technology fails,


and you will have wasted a bunch of your time tearing your hair out
over tech that nobody really cared about. This is not quite true for a
few reasons:

technology rarely fails, it just… sputters out quietly


you will have gained a DEEP appreciation for the actual problem
area, which gives you a leg up for the next wave of innovation
the people you work with will also go on to do other things, and
you will have a camaraderie borne out of shared pain that
nobody else can match (e.g.: the MooTools mafia)

28.4.2 Crossing the Chasm

It turns out that not all the transitions between stages are equal.
Geoffrey Moore nailed this dynamic in his seminal book: Crossing
the Chasm.

The “Chasm” thus named refers to the extraordinarily difficult jump


between Early Adopter and Early Majority. Early Adopters can be
very forgiving and imaginative, while Early Majority need a lot of the
documentation and usecases paved for them before they will jump
aboard.
Marketing to and building for these two audiences are very different
propositions, hence the argument of the book is that the company or
technologist’s strategy must change drastically between every stage,
especially across the Chasm.

If you are keeping tabs on technologies, it can be very rewarding to


watch for technologies that are just teetering on the brink of Crossing
the Chasm, and to jump on just before, or help it cross.

If you are creating technology, whether at a startup or working on


open source, you probably want to pay attention to the remaining
obstacles for your tech Crossing the Chasm, and to systematically
dismantle them.

28.4.3 The Gartner Hype Cycle

Of course, in tech, expectations can run ahead of or behind reality.


As social animals, we can sense heightened expectations much more
intuitively than reality. Just like financial cycles, tech expectations
anticipate more future progress the faster real progress is made,
guaranteeing that hype runs ahead of reality, which also causes
subsequent disillusionment:

To defend against this:

understand sources of inflated expectations (Journalists -


including citizen journalists like newsletter editors and
podcasters - who don’t work hands-on with the tech, people
whose paychecks depend on the tech’s adoption)
have a process for reality checks (befriending the people
involved, testing the tech out, understanding physical
limitations and foundational first principles)
remember that the best time to build is often in the Trough of
Disillusionment, as it is not as noisy as the Hype Peak, while
simultaneously, the Hype Peak often causes a great deal of
infrastructure investment that makes it cheaper to build during
the Trough.

You can look through Gartner’s writings over time for many, many,
examples of Hype cycle applied to different industries - I will not list
them here.

A technology will go through multiple hype cycles over time. By


some counts there have been at least eight AI Winters. Yet the
builders keep building, and if you zoom out, these cycles smooth out
over time. And that is what we will now do.

28.4.4 The Perez Surge Cycle

Not to get all Calculus 101 on you, but if you took an integral to the
Rogers curve, you end up with an S curve going from 0% of the
population to 100% of the population.

The history of technology is full of S-curves:


And the spread of information technology also means technology
spreads faster over time.

Carlota Perez has made a career of studying this:


You can see the imprints of Moore’s Chasm here. The Installation
Age has a slow build-up, then something happens, and a turning
point is reached, and all of a sudden the technology has crossed the
chasm, and we are now in the mature Deployment Age.

If you lived through the Coronavirus Pandemic of 2020, you saw


Zoom zoom through this turning point - a video conferencing tool
mostly used by techies, suddenly became a household name for both
students and retirees, with unsponsored shoutouts by major
television shows like SNL. Accordingly, new problems arose - Zoom-
bombing, more scrutiny on security practices, and the need to
manage massive thousand person events.

The Deployment phase can look very different from the previous -
you go from building the tech, to building on and around the tech.
To give you an example closer to home, I applied this to explain the
rise of React metaframeworks:
If you are looking to build tech, understand where your tech is in the
adoption cycle through these mental models, and build what is
needed.

28.5 Technology Value Chain


Technologies don’t exist in a vacuum.

In order to deliver apps, you chain tech components together (in a


“value chain”) to build them. Some of these, like electricity, are
commoditized - cheap, and highly available. Others, like cloud
services, are productized - cheaper than building yourself, and not
core to your value prosposition. Still others, like a proprietary
compression algorithm, is “secret sauce” and must be coded by you.
28.5.1 The Law of Complements

One of the most fundamental laws of technology microeconomics is


that increases in supply of one technology drops the unit price of that
technology, which then causes the value of related technologies to
increase. That’s a lot of words, so let me give some examples:

One of the most salient driving forces in technology has been


Moore’s law - computer chip performance (loosely defined)
doubling every 18 months for 50 years. Yet the person to make
the most wealth from this trend has been Bill Gates, who wrote
the software that runs on this hardware - even if it got worse at a
commensurate rate. In fact a popular variant of Wirth’s Law is
christened Gates’ law: “The speed of software halves every 18
months.”
This is akin to the legendary founding story of Levi’s Jeans -
during a gold rush, sell shovels.
In much the same way, Larry Page and Sergey Brin made the
most wealth from the world going online, not the ISPs that
helped make it happen.

Joel Spolsky (and later Gwern Branwen) wrote about this strategy as
“Commoditize Your Complement”. This assumes a great deal of
agency on your part, which you may not have since you aren’t Google
or IBM. But you see the influence of this law in every huge and
aspiring-to-be-huge tech platform - it puts itself at the center of its
world, and commoditizes all the adjacent technologies that it works
with (often you hear this as “framework agnostic” or “language
agnostic” or “You can use ${THING EVERYONE USES} or
${DISTANT SECOND FEW PEOPLE USE} or ${THIRD THING
NOBODY USES} with us!”). Fill in the blanks with your favorite
platform - If I named names, I’d piss someone off!

The overall lesson is this: Look out for things which are rapidly
becoming cheaper/easier because adjacent things will become a
lot more valuable as a result. As a supplier and creator of technology,
you want to be next to the hype.

28.5.2 Wardley Maps

We have established that it is valuable to understand when adjacent


parts of a value chain are commoditizing. This happens to closely
map to Technology Adoption Curves - the more widely adopted
something is, the more commoditized it is.

What if we went two dimensional? What if we plotted


commoditization on an X axis, and closeness to the customer on the
Y axis?

We have just invented Wardley Maps:


At first glance these can feel like mumbo jumbo, overly complex
charts, but it actually makes an intuitive model for mapping out an
entire ecosystem in context of all its moving parts. Simon Wardley
reframes tech maturity into four stages: Genesis, Custom,
Productized, and Commoditized, and then vertically arranges
tech components by visibility to the end user.

I didn’t get it at first - it took watching a few talks (1, 2, 3 and more)
for it to actually sink in - but hopefully by introducing Wardley Maps
in context of Technology Adoption Curves and Commoditizing
Complements, I have made the connections for you to understand
the value of mapping an ecosystem.
You can maintain a mental map or actually go through the exercise of
drawing out the ecosystem you work in - but the implications are
clear - you should want to help technology commoditize,
and then you should want to work right next to that
technology.

28.6 Systems Thinking


The ultimate, abstract form of everything discussed in this chapter is
known as Systems Thinking. This is a very deep, very meta field, and
staying on topic with self proclaimed Systems Thinkers can be a
challenge. But it is the über-mental model for understanding
complex systems, and so deserves a short introduction.

The field of systems thinking traces its origins to Donella Meadows,


who worked with the Club of Rome to lead the influential 1972
Limits to Growth report, laying out scenarios for global growth for
the next 100 years. The basic understanding of systems was spelled
out in a seminal essay, the Twelve Leverage Points (subsequently a
book).

Tip: See First Principles Thinking (Chapter 17) for


more on Systems Thinking.

While Technology Adoption Curves and Wardley Maps deal with


fixed paradigms and vague models, the Systems Thinking movement
offers some insight both for quantifying the “leverage points” in a
system (read: bottlenecks where you will be most effective) and for
quickly traversing up paradigms to higher perspectives, spawning
more insightful questions.
Will Larson, CTO at Calm, has some good writing applying systems
thinking to engineering management, and of course as an engineer,
designing and running systems is a core architectural skill, as much
as you also work within a larger system. Teaching you to apply this is
beyond the scope of this book; I just hope to introduce it to you here
and invite you to explore further.

28.7 Other Strategies for Strategic


Awareness
Congrats on reading all the way through! This was one of the most
abstract, challenging chapters in the book, and a lot of work remains
for you to apply these raw ideas to your specific situation. I did my
best; but each of these things are books unto themselves, so I merely
gave you the Grand Tour.

A few final tips for keeping tabs on your ecosystem, staying focused
while keeping up to date:

Keep a reference counter for technologies: Every time


you hear about a technology and think “I should check it out!” -
keep a mental or literal tally. Only actually check it out once
your counter hits five - enough that it isn’t a flash in the pan, but
also not too late that you’re ignoring something that could be
amazing.
Debounce your Information: Whenever you run into
something new, ask: Do I need to know now? Does this
information have an expiry date? A nice trick to force yourself to
do this is to put everything on time delay - for example, all new
blogposts and articles must be stored in a Read Later app like
Instapaper, and new YouTube talks relegated to the Watch Later
list. If, in a week, you look at it and are no longer as interested,
delete without guilt. You have just gained back hours of your life
by denying the dopamine hit of checking out new things. (Note:
Exception for this is when you are trying to Pick Up What They
Put Down.)
Understand the value of Information: As a knowledge
worker, you need to establish a very strong sense as a curator of
knowledge. Here’s a preference order to get you started: - Value
private information over publicly known things - Value timeless
information over novel information - Value subtle nuances over
sensational headlines - Value digesting high quality pieces over
consuming sheer quantity
Make it easy to try things out: Having no place to try things
out is a barrier to trying things out. You need to lower activation
energy for trying things out. Fortunately most documentation
comes with good demos, but also you can build expertise with
some quick-start services to trying things out - CodePen, Glitch,
CodeSandbox, Netlify, Render.com for web developers. On my
laptop, I always have a “testbeds” folder for throwaway stuff,
and I can jump to it easily with rupa/z - just knowing that
everything in the folder is disposable gives me great peace of
mind. Having a Breakable Toy also lets you swap out
technologies in production, freeing you from endless tutorial
hell of trivial Hello World examples.
Pay attention to Narrative Violations. The term is
somewhat debated, but basically when smart people do
something quite uncharacteristic, or trends make a sudden
reversal, it is a sign you might not understand it fully, and there
may be a deeper underlying reason to be discovered. I liken it to
Neo noticing the duplicate cat, indicating a Glitch in the Matrix.
Pay. Attention. Most people are too content to only see things
that confirm their prior worldview. Actively seek out things that
don’t fit, because that is where you have more to learn.
Keep Tabs on Megatrends: Some trends are clearly massive,
slow-moving, yet inevitable. You can position for the future by
living in the future. In fact, this is what we will discuss in the
very next chapter!
Chapter 29
Megatrends
It can sometimes feel like we have reached a “steady state” in tech.
This is known as the End of History illusion: the temptation to
conclude that what you have today is the best possible outcome. This
is often due to lack of imagination and sense of place in history, but
also some deserved cynicism from seeing major failures and
overhyped disappointments.

The first thing to realize is that the tech “everybody” uses isn’t that
old. The first web site was published in 1990. Git was released in
2005. Both iPhone and Android were launched in 2007. Both the
modern serverless and container paradigms began in 2014. It is
highly likely that someone is working on something right now, that
will change the world not just in your lifetime, but in less than a
decade from today.

You don’t have to be super early to benefit from Megatrends.


Sometimes you can just surf the wave of something much, much
bigger than yourself. If it is just “obvious” (perhaps a loaded term)
that something is a Big Deal, but on its way to be absolutely huge,
you can gain a significant advantage by simply “living in the future”,
as Paul Graham puts it, and building what’s missing. Developers and
consumers, as a population, are much slower moving than you can
be. Even “obvious” evolutions don’t happen overnight.

Developers interact with Megatrends in two ways:

They fuel and profit from Megatrends by working on companies


and products that reach the broader non-developer market.
This has primarily financial benefits for the developer.
They are influenced by and contribute to Megatrends within the
developer ecosystem itself. This has primarily career benefits
for the developer.

The trick, of course, is identifying what is or is not going to be a


Megatrend.

29.1 Definitions
Blackrock defines Megatrends as “structural shifts that are longer
term in nature and have irreversible consequences for the world
around us.” If you visualize tech history as a series of S curves, as we
have previously discussed, you can easily identify these Megatrends
after the fact. Our task is to identify and act upon Megatrends while
we are still in the middle of their evolution.

The first and easiest feature to notice is that Megatrends are


measured on the order of magnitude of population percentages.
Smaller projects may use absolute numbers of downloads or signups
or active users, their monthly or annual percentage growth, or some
other vanity metric. Most startups’ projections of Total Addressable
Market are complete pie in the sky - but it starts being real when
complete strangers also start talking about adoption in terms of
percentage TAM capture.

Momentum of population capture is important. If you see the


adoption go from 1% to 3% to 5% to 7% to 8%, it isn’t the end of
things, but the trend is obviously in danger of petering out. Trends
have been known to experience revival after a momentary pause;
Eugene Wei has a great essay on this, calling them Invisible
Asymptotes, but identifying and breaking Invisible Asymptotes is out
of scope of this book. For our purposes, we play in the kiddie pool of
identifying Megatrends: my advice is to look for double digit
growth in population adoption from year to year (viral
megatrends), or look for trends that have gone on for double
digit years (generational shifts). Population-scale movements are
more like ocean liners than tugboats - once they commit to changing
direction, they will probably keep moving in that direction for a long
while. Long enough for you to jump on, get ahead, and invest at least
part of your effort and career.

I’ve mentioned the term “vanity metric”. That’s a slightly derogatory


term - all metrics are imperfect, and the better framing is more that
there is a hierarchy of metrics that matter. It’s easier to get signups
than it is to get active users, and easier to get active users than
paying users. But one thing more valuable than money is
time. If your technology measures engagement in hours per day
rather than monthly active usage (i.e. someone who uses it five
minutes a month counts), then you have established a habit that is
sticking, and is therefore more likely to be worth investing in. A
popular way users self-describe this effect is that they are “living in”
the tool.

Megatrends are often tied to generational shifts. A newer


generation will often opt to choose a slightly different way of doing
the same thing that has existed before, and for some reason the later
iteration will be the breakout technology instead. This will seem very
puzzling to the older generation, who gripe and grumble that they
were on to the hot new thing “before it was cool”. Newer generations
do this partially to distance themselves from the past, but often also
because platform shifts or new technologies enable things that just
couldn’t be done before. For example:

the smartphone enabled location-aware apps like Uber


the Internet enabled infinite shelf space like Amazon
virtualization enabled cloud computing like AWS and Azure
the personal computer enabled spreadsheet applications like
Excel
This is why there is always oversize interest in future potential
platform shifts like cryptocurrency, virtual reality, quantum
supremacy and deep learning.

The absence of any prior baggage also allows for skeuomorphisms


(intentionally crafting the new thing to look like the analog of the old
thing, to help intuition when transferring platforms) to eventually be
abandoned in favor of “native” assumptions (throwing away all
semblance of the old thing and leveraging the full capabilities of the
new platform).

Megatrends don’t just spread across time, but space as well. As


William Gibson observed, “the future is here, it’s just not
evenly distributed yet.” Because so many startups start and
prove themselves out in the US, and yet take many years before going
abroad, the Samwer Brothers have made a career starting clones of
successful American startups in Europe and Asia. Chinese students
in America have returned home as Hai Gui, setting up the “YouTube
of China”, the “Google of China”, the “Amazon of China”, the
“Expedia of China”, the “Uber of China”, and so on. The Indian
Institutes of Technology have an even closer bond with American
institutions. The founders of two generations of semiconductor
titans, Morris Chang of TSMC and Jensen Huang of Nvidia,
graduated from MIT and Stanford, had successful careers in the US,
and returned home to Taiwan to start their empires. Even within a
country there can be an advantage in import the future -
Governments, VC firms and investment banks are known for
organizing inspiration trips from Silicon Valley to New York and
back, and from every other city to tech hubs.

As far as Developer Megatrends go, one pretty reliable metric is


seeing large companies announce that they have adopted a certain
technology. When you see Airbnb announce that they have adopted
TypeScript or Shopify moving to React Native, these are the end
results of months, often years, of careful evaluation, and the
investment of the equivalent of millions of dollars in developer
hours. Even the announcements have to be carefully vetted by
marketing and legal teams, considering the credibility impact of
potentially reversing a very public decision. As much as your needs
may not be the same as BigCos, endorsements from them do carry
more weight as it means that the technology has been vetted for
scale, they will contribute open source support, and the technology
has formally become a job differentiator both on the recruiting and
the prospective employee sides.

29.2 Examples
An example here might help. TypeScript is an example of a very
clear developer Megatrend in the JavaScript ecosystem. You might
personally dislike TypeScript, but if you make tools for developers,
this audience is increasingly difficult to ignore. Piecing together
survey results, usage of TypeScript rose from 21% to 34% to 47% to
62% of all JavaScript developers from 2016-2019. Want to bet if it
keeps rising in 2020 and beyond?

I don’t know the developer ecosystem you work with as well as you
do, so it is hard for me to give more examples that might connect.
We can draw up similar numbers for Docker or Kubernetes or
GitHub or StackOverflow.

As an investor, former product manager, and prospective


entrepreneur, I keep a list of more Megatrend examples in the
consumer world, all software enabled:

Gaming is capturing a LOT more revenue and time than


movies, music, TV, and literally any other form of
entertainment. The definitive essay on this is Matthew Ball’s 7
Reasons Why Video Gaming Will Take Over - I’ll just refer you
to it rather than rehash his points.
The Creator Economy is enabling more people to make a
living becoming teachers and content creators by building the
payment rails and storefronts for all kinds of creators. It might
have started with Patreon and Kickstarter, but now dedicated
platforms are rising up for everything from podcasts to
newsletters to video courses to adult content to, yes, ebooks like
the one you’re reading now :) By cutting out the gatekeepers
(universities, tv networks, book publishers, etc), a lot more
diverse, niche interests can find an audience, and consumers can
directly support creators without a large chunk of money going
to middlemen just because.
The No Code/Robotic Process Automation trend is helping
non-developers create commodity software. The fact is the
world’s demand for software and automation (100% of the
population) greatly exceeds the available supply of developers
(0.4% of the population), and a lot of these needs don’t actually
require custom, handcrafted code. So both No Code players and
RPA providers are finding a great deal of traction by making it a
lot easier to bypass hiring a developer to create standard sites,
apps and workflows.
Remote Work - this was already a Megatrend before Covid-19,
but of course all software that supports Remote Work is in
extreme demand. In particular, real-time collaboration is now a
table-stakes feature of most B2B software.
Privacy is increasingly a differentiating feature all on its own.
European GDPR requirements aside, startups like Fathom,
Fastmail, and Hey can now credibly compete with the likes of
Facebook and Google by simply promising not to compromise
on user privacy. Snapchat, of course, got its initial traction
thanks to ephemeral posting. DuckDuckGo is growing 50%
annually, and is at 1.5% of Google search traffic. What does a
more privacy conscious internet look like 20 years from now?

Software isn’t everything; there are a good deal more interesting


“hard” technology trends like the renewed Space Race, Quantum
Computing, Carbon Capture, and Plant Based Meat. But, as a rule,
bytes are easier to manipulate than atoms, and the majority of
developers are better served staying in the software domain,
especially in their early career.

29.3 Building Your List of


Megatrends
It matters more that you build the habit of looking out for
Megatrends, than agreeing on my specific list of Megatrends (here
are some others, by the way - your list needs to involve your filter on
the world, or it just grows out of control). You also don’t have to go
from 0% to 100% right away - approach this like you would a
scientific hypothesis. Be on the lookout for the next big thing, put
out some feelers, and if you see some success, spend more time on it,
repeat. The beauty of Megatrends is that you do have time to test
and observe, so long as you are committed to moving fast once
you’re sure.

Any time you can think of something that is possible this


year and wasn’t possible last year, you should pay
attention. You may have the seed of a great startup idea.
This is especially true if next year will be too late. When
you can say “I am sure this is going to happen, I’m
just not sure if we’ll be the ones to do it”, that’s a
good sign. - Sam Altman on Idea Generation

One final observation. Even trend watchers often underestimate the


sheer scale and magnitude of Megatrends. It is very common to feel
like you already missed the boat, because you are more attuned to
developments than the general population:

When Tim Sweeney started Epic Games in 1991, he “had a


sinking feeling it was too late” to start a game dev company.
Today, Unreal Engine and Fortnite are undisputed kings of the
game dev world.
When Marc Andreesen moved to Silicon Valley in 1994, he felt
like he’d already missed the tech boom, but ended up founding
Netscape.
When Kevin Systrom and Mike Krieger started out, their
original app was one of a throng of trendy social, location
sensitive, mobile apps including GoWalla, Foursquare and
Groupon, with Yelp an already established player, when they
eventually landed on Instagram.
When Chad Hurley and Steve Chen made their own video
sharing site, they faced a crowd of existing media sharing apps
including Dailymotion, Vimeo, Flickr, Webshots, Ofoto,
Shutterfly, Snapfish, Ebaumsworld, etc, but of course YouTube
eventually won out.
The lesson is clear: it is normal to feel “late” to a Megatrend. Just
looking out for Megatrends at all puts you ahead of the vast majority
of the population who do not reflect on their place in history.
Further, while first movers have an advantage, it is always more
important to be the last mover in a MegaTrend - those are the ones
that end up counting.
Chapter 30
Part IV: Tactics
Finally, let’s discuss the common Tactical skills that will help you in
your Coding Career:

Negotiating (Chapter 31)


Learning in Private (Chapter 32)
Design for Developers in a Hurry (Chapter 33)
Lampshading (Chapter 34)
Conference CFPs (Chapter 35)
Mise en Place Writing (Chapter 36)
Side Projects (Chapter 37)
Developer’s Guide to Twitter (Chapter 38)
Marketing Yourself (Chapter 39)
Chapter 31
Negotiating
I can personally attest to the value of negotiation. I was recently able
to negotiate an additional $50k/year in cash + RSUs at a BigCo. All
it took was three phone/email conversations over two weeks. Prior
to that, I got an improvement of $10k/year in options with a single
email. It has nothing to do with code, or my ability to contribute, but
negotiating is one of the highest ROI activities I have ever
done, despite objectively sucking at it!

Aside: If you’re new to this topic, it means that this is


probably going to be the highest value chapter in
the book. Which is sobering to realize as an author!

Negotiating is one of those areas that is well-covered by existing


content. I am tempted to just provide links to the definitive
resources. However, I feel I can still add value by offering a
summary with my own commentary.

31.1 General Advice


But before that, some tips of my own:

Don’t accept right away! Always negotiate. Nobody is going


to take away your offer because you tried to negotiate.
Never lie. This industry leaks like a sieve. Especially among
recruiters and hiring managers. But where you aren’t ready to
disclose them, strategic omission of facts is fine.
Get a coach? You can hire coaches like Josh Doody (author of
Fearless Salary Negotiation) to help you. It makes economic
sense to pay a sizable % of your salary increase for this, because
you get to keep benefiting in perpetuity. I personally have not
yet done so, as I wanted to try it myself.
Know your worth. Glassdoor and Levels.fyi are good for
getting salary data, but Team Blind is also good for advice and
comp package review. Subreddits like /r/cscareerquestions and
others in your niche will also run salary surveys. These will help
you figure out what you’re worth. Also be hyperaware of things
you’ve done which make you stand out from others in your
experience band. And make sure They know it.
Transparency cuts both ways. Some companies have strict
bands, and even publish their salary calculations. Like Buffer,
Krit and GitLab. You can use these to triangulate your own
market value, but if you’re interviewing at such a company, you
may have to find non-cash negotiation points. They are likely to
be inflexible due to their unusual transparency, though everyone
makes exceptions.
Don’t let short-term greed compromise your long-term
career. A high-paying job you hate isn’t better than a
moderately well-paying job you love. You can also make a
judgment call on accepting less money for more
learning/professional growth in the direction you want. But
don’t let them talk you into taking less money for more
responsibility.
Offers and Negotiations have a massive gender bias.
Whether consciously or unconsciously, tech companies
repeatedly end up in situations where they pay women 20%
less than their male counterparts and employ all sorts of
negotiation and silencing tactics to make you accept it. This is
grossly unfair but it is real; learn to recognize the excuses
companies make and make clear that you know how this game is
played too (because you have read everything in this chapter).
Remember also that good companies and well intentioned
people make these mistakes too – work with them and help
them be better if you can.
No amount of negotiation will overcome being
underleveled. Every company has salary bands, but most
positions are flexible in terms of which band they hire at.
Especially for the right person, aka you! If you should be at an
L6 level but somehow fall into the L5 track in your conversation
with recruiters, find out fast and make sure that you’re being
considered for the most senior band possible. This helps way
before talking specific numbers.
No amount of negotiation will overcome not having a
good alternative. This is known as a Best Alternative to a
Negotiated Agreement in negotiation lingo. Remember that
simply staying at your existing job is a strong BATNA, as is
striking out on your own as a freelancer/entrepreneur given
your existing audience or network. If the economy is good and
you’re interviewing at a BigCo with a competing offer from
another BigCo, previously stated obstacles (“That’s as high as we
go for this band, I’m sorry”) can magically disappear (“I talked
to our director and we’re going to make an exception for you”).
This is worth $100k+ in some cases.
Think win-win. Negotiation is best done without a Zero-Sum
mindset: “I’m negotiating with you. I win. You lose.” Instead,
try a Positive-Sum attitude: “I want the best situation to do great
work for you, but I have options. You have room to go higher.
Let’s find something that works for both of us.”

31.2 Summaries of Experts


There are three people who dominate the discussion on Developer
Salary Negotiation right now: Patrick McKenzie, Haseeb Qureshi
(especially for early careers), and Josh Doody. Here are each of their
main talking points, with commentary from me:
31.2.1 Patrick McKenzie on Salary Negotiation

Patrick McKenzie’s thoughts on Salary Negotiation:

A five minute conversation can lead to $5-15k a year more in


salary. Taking in 401k contributions and future salary
compounding, this can add up to an extra $100k over ten
years.
Negotiation is not haggling or greed. It is what rich, successful,
in-demand people do.
Your client/company/recruiter has far more information than
you do, and feels very differently about negotiation than you do.
It is NOT an even playing field.

They know what every employee makes


They know what everyone at peer companies make,
especially those they have to make counter offers for
They know how much budget they have
They have negotiated more times than you have, by
multiple orders of magnitude
They may think less of you if you don’t negotiate

Everyone in this discussion is a businessperson. You


will not be blackballed for negotiating. Remember, it’s usually
not their money. They have a budget, and a concession from
them means a lot more to you than it does to them.
Your negotiation started before you applied. If you apply
through regular channels, you get priced as a commodity. If
hiring managers seek you out for your expertise, you have a
much stronger position. Conversations like these end with
resumes as a formality, instead of beginning with them as a way
to get interest.
Only negotiate salary after you have agreement in principle
from someone with hiring authority that, if a mutually
acceptable compensation can be agreed upon, you will be hired.
“Yes - If we agree on terms”, not “No - But we might hire you if
you’re cheap.” This ensures they have invested sufficient time to
hire you and increases their stakes. It also ensures that, at
worst, the offer you arrive at is the one they initially give.
Never Give a Number First. This “rule” is almost always the
right move. Many recruiters will try all sorts of tricks to get you
to disclose your prior salary (it is illegal to require this) or
discuss your salary expectations. This puts an immediate upper
limit on what they will offer you. Patrick suggests some talk
scripts to help avoid giving a number, including what to say if
you have exhausted every option and they insist on wanting a
number from you. (A talk script is a pre-planned list of
responses to various scenarios, often used by salespeople to
guide customers down a favorable path (see example). This is
better than improvising where you can make silly mistakes.
Professional recruiters, like these at Google and Facebook, are
using these when they talk to you. You can choose to arm
yourself in return.)
Listen To What People Tell You. Repeat It Back To
Them. People are most persuaded by their own words and
behaviors. This is related to the idea of Mirroring in
negotiations. Make a note of everything that matters to them
that helps you make your case. Look for mutually beneficial
movements - what “We” and “You” need, instead of what “I”
need. Phrase things positively rather than score debating
points.
Research the Company. Speak with ex-employees,
customers and current employees. Look for what they value,
what success looks like internally, what the culture is like, what
is easier for them to budge on.
New Information is Valuable - offering new information on
your skill set, life story and potential value-creation helps them
justify your negotiation to their bosses. e.g. “I increased sales by
3% at $PREVIOUS_COMPANY. That is worth millions to you.
Getting me that extra $5k would make this a much easier
decision.”
Non-Cash Dimensions - Cash is only one part of total
compensation, and total comp is only one part of the whole job.
Salaries are often constrained by salary bands and it can be
easier to offer RSUs/Options. The higher up you go in level, the
more stock dominates your compensation. See The Open Guide
to Equity Compensation for more information. You can also
find more room on signing bonuses, vacations, work-from-home
benefits, travel opportunities, titles and project assignments.

31.2.2 Haseeb Qureshi on Ten Rules for Negotiating

Haseeb Qureshi negotiated a $250k offer from Airbnb coming out of


his bootcamp. Here are his Ten Rules:

1. Get everything in writing: Any information they provide you


is helpful both when negotiating and when making your final
decision.
2. Always keep the door open: Never give up your negotiating
power until you’re absolutely ready to make an informed,
deliberate final decision. Protect your information!
3. Information is power: This includes telling them what you
used to make, and telling them at what point you will sign.
Given an offer, don’t ask for more money or equity or anything
of the sort. Don’t comment on any specific details of the offer
except to clarify them.
4. Always be positive: Your excitement is one of your most
valuable assets in a negotiation. The most convincing way to
signal this is to reiterate that you love the mission, the team, or
the problem they’re working on, and really want to see things
work out.
5. Don’t be the decision maker: By mentioning
mentors/family, you’re no longer the only person the recruiter
needs to win over. There’s no point in them trying to bully and
intimidate you; the “true decision-maker” is beyond their reach.
6. Have alternatives: If you’re already in the pipeline with other
companies (which you should be if you’re doing it right), you
should proactively reach out and let them know that you’ve just
received an offer. Demand breeds demand. Reject exploding
offers.
7. Proclaim reasons for everything: Most people recoil from
negotiating, except when they have to. Just stating a reason —
any reason — makes your request feel human and important.
It’s not you being greedy, it’s you trying to fulfill your goals.
State a reason for everything, and you’ll find recruiters more
willing to become your advocate. Emphasize your unique value
alongside your ask. Good thing you wrote everything down!
8. Be motivated by more than just money: How much
training you get, what your first project will be, which team you
join, or even who your mentor will be — these are all things you
can and should negotiate.
9. Understand what they value: Salary is the hardest for them
to give. Stock/Signing Bonuses/Relocation/Training expenses
are much easier. But be careful not to let fictional stock
valuations sway you!
10. Be winnable: Give any company you’re talking to a clear path
on how to win you. Don’t BS them or play stupid games. Be
clear and unequivocal with your preferences and timeline.
11. Making the Final Decision: Assert your deadline, clearly and
continually. Use your final decision as your trump card, and “If
you can improve the salary by 10k a year, then I’ll be ready to
sign” as the final move.

31.2.3 Josh Doody on Fearless Salary Negotiation

Josh Doody (author of Fearless Salary Negotiation):

You should negotiate your job offer even if it already


seems pretty good. The best way to begin the salary
negotiation is by sending a counter offer email. Eventually, the
negotiation will move to the phone. But it’s best to negotiate
over email as long as you can because it’s easier to manage the
process and avoid mistakes.
The first thing you should do when you get a job offer is ask for
some time to think it over.
Do not disclose your salary history or salary
requirements. This can be uncomfortable, but it’s your first
opportunity to negotiate a much higher salary.
Typically, your counter offer will be 10–20% more than their
offer, and you’ll focus on your base salary at first.
Josh provides a “detailed counter offer email template” to help!

31.3 Further Good Reads on


General Negotiation
Never Split the Difference by Chris Voss. Learn negotiation
from a former FBI hostage negotiator!
Bargaining for Advantage: Negotiation Strategies for Reasonable
People by G. Richard Shell. I had the good fortune of auditing
his classes during my time in business school. He is a sublime
teacher and this is one of the foundational texts in negotiation in
American business.
Getting to Yes: Negotiating Agreement Without Giving In by
Fisher, Ury and Patton. Another business school classic on
Negotiation, with a very pragmatic followup in Getting Past No.
Chapter 32
Learning in Private
I am known for my advice on Learning in Public. You could easily
assume that I think you should do everything in public, or else you
are Doing Life Wrong.

But no, of course I don’t think that everything should be


public. I don’t even think everyone should Learn In Public, as I
have taken great pains to explain in every talk and podcast I do.

The more realistic phrasing of “Learn In Public” is “Learn More In


Public”, by which I’m saying most people would benefit from going a
little more public than 0%, which is the default for the vast majority
of people. In practice, this only means going from 0% to maybe 1%
or 5% or 30% public. The majority of the time, you are still learning
in private.

So here are some thoughts on how to Learn In Private well.

32.1 Improving What You Consume


People over Content: Follow people over content sources. When
you come across a quality blog, podcast, or talk, notice the person
behind it and follow what else they do. A lot of how content works
these days is through aggregators, like Reddit or Hacker News, or an
industry blog or podcast or conference. The quality may vary quite a
lot despite the best curation efforts. Titles and upvotes may be
gamed for SEO. But a quality person is likely to be quality for life.
You already know you are the average of the X people you spend time
with - so curate those people. RSS feeds help here.
The expanded form of this is Following the Graph - not only
following people, but following the people they follow (the best way
to get in their heads). Tracing back work histories and tracing
forward new workstreams. Most things are made by only a small set
of prime movers and they are usually (by definition) not hard to find.

Read Good Books Cover To Cover: Authors spend a lot of time


nailing down details in books because of how permanent it is. They
also spend a lot of time organizing the structure and relative weight
of the content with some educational goal in mind. If you come
across a highly recommended book (or just one that starts off well),
do it the justice of going cover-to-cover. You may get bad chapters or
sections, but you won’t know til you plow through it. Particularly pay
attention to endings, since people often don’t make it to the end but
many authors put The Good Stuff at the end (ahem!). Usually
this is the “unimportant details” that they didn’t want to clutter the
introduction with. This is especially relevant if you are Intermediate
at whatever you’re doing. Think about it: Beginners need tutorials as
they give the shortest path to success, Experts just need to tinker and
keep up to date, but Intermediates need context and clear
explanation of details.

Read Source Code: People often treat the open source movement
as “code that I can use for free”, forgetting the premise that it’s also
“code that you can freely fork for your needs”. But we are so spoiled
that we even forget that it is “code that you can read to learn from
masters”. As Ryan Florence has noted: “I get asked all the time ‘how
do I level up?’ Read code. Read lots of code.” It’s simple, but not
easy. One of Paul Irish’s early hits was 10 Things I Learned from the
jQuery Source (followed by 11 more things) - granted, this was a
public talk, but it could easily be private learning. I curate the list of
open source React Project Ideas on /r/reactjs for this reason.

Subscribe to Repos and Issues: Just like there is a metalanguage


behind the language, behind the code, there is metacode -
discussions and attempts on Github Repos and Issues by
collaborators, all in the open. If Reading Source Code is reading
code-frozen-in-time, then subscribing to repos and issues is reading
code-in-motion. Since a developer’s job is to put code-in-motion,
learning how to do this by watching others is a great idea.

32.2 Getting More Out of What You


Consume
Have a Goal: You will go further if you put more effort into learning
one thing rather than a random assortment, thus diffusing your
efforts. You also gain the superpower of having the permission to
ignore things if they’re not on-goal for now - you can always come
back later if your goals change.

I do believe that Systems are more important than Goals. This whole
thing you’re reading is a proto-System. But Systems can be focused
by Goals. Sometimes you can stuff a system into a goal -
Ultralearning seems to have caught some fire recently as a form of
super intense, immersive learning. Joe Previte summarizes it as
such: “Set a goal to experiment say with a new technology for 31
days. Check it out. See what you think. Write down what you
learn.” Note that I’m not saying you have to have a goal at all times.
Sometimes undirected learning is fun and leads to serendipity.

Take Notes: A syllogism:

There’s no point learning anything if you can’t recall it - or


rather, the more you can recall, the more you actually learned.
There is a natural limit on how much you can recall at any time.
So to learn more than your brain can hold, you must take notes.

This is currently in vogue as Building a Second Brain, but it should


be no surprise that “Personal Knowledge Management” is a key life
habit for knowledge workers. It’s not a fad. It’s something
professionals have always learned in order to get good.

I have a bias toward digital notes because search is a superpower.


But search is no substitute for organization, which at its simplest is
a tagging system, but at its best is a “minimum spanning taxonomy”
of the subject matter.

For the same amount of content stored, an organized mind will


always outperform a disorganized one.

Spaced Repetition: Another tactic is just trying to increase how


much you can recall. Michael Nielsen is famous for making
bombastic claims about the capacity of Long Term Memory, but the
basic principle is sound: use spaced repetition learning. Anki is the
leader here. I’ll be honest, I don’t do this much. In a way, having a
daily habit of pursuing the same topic, and making sure to take
searchable notes leads you toward spaced repetition anyway. But of
course, I could always do a better job of this because I often have to
recall things on the spot in interviews and workshops.

Deliberate Practice: A lot has been made of Gladwell’s


popularization of the 10,000 hour rule, but it is undisputed that you
grow the most when you practice at the edge of your abilities. Don’t
be surprised if you spend 10,000 hours staying within your comfort
zone and don’t get any better. You have to deliberately push your
limits when you practice, or your limits will never move. Enough
said? Enough said. But I do want to highlight two ways to home in
on the exact limits of your ability:

Pick Up What They Put Down: I have called this “the


Ultimate Hack for Learning in Public” (Chapter 19), but of
course you can also do it in private. Follow up on anything and
everything your unknowing mentor says is good, or is yet to be
done, or straight up just replicate their work. Which leads to…
The Ben Franklin Method: I’ve read this before, but was
recently reminded by Mike White. The “Ben Franklin” method
is shorthand for a Dissect and Reconstruct process for training
yourself to notice differences in quality between your output and
your input. This is why you think your work sucks - your tastes
have zoomed far ahead of your abilities. Ira Glass calls this The
Gap. The Ben Franklin method is a feedback loop for closing
The Gap.

The Feynman technique is a similar framing of this,


which is more self oriented rather than focused on
replicating techniques of others.

32.3 Go Meta
Active over Reactive: Active Learning is Pull-based - You try to
do something, find gaps, and then go seek out what you need to get it
done. Most learning starts out Reactive - you see something new,
you learn it. Push-based. The problem is that the content industry
has swung waaaay too far towards drowning you under a deluge of
content. Additionally, Reactive Learning doesn’t serve your goals - it
serves someone else’s. Part of learning is learning what to learn, and
Serendipity is a wonderful thing, but Just-In-Case learning is not
productive long-term. The right mix of learning will include more
Just-in-Time Active Learning than is natural or feels comfortable.

I confess I don’t do this well at all and would welcome ideas for how
to make Active Learning more of a habit.

Compare and Contrast Multiple Perspectives: I find a


shocking number of devs cannot objectively hold competing ideas in
their head at the same time. They just state their point of view over
and over and over again and attack the weakest argument of their
opponents. This is unacceptable to me. The Fifth of the Seven
Habits is Seek First to Understand, then To Be Understood. You are
more effective if you can summarize the best arguments of all major
parties in a way that THEY agree with. This is a non judgmental
“schools of thought” mode of learning that I wish more people
adopted.

As a bonus, once you can do this well, you also become more
persuasive to people who disagree with you. Because you took the
time to understand them. This is sometimes called Steel-manning
(more from Andrew Chen), as opposed to Straw-man arguments.

Distinguish Game vs Metagame: Much of learning is focused on


how to do better at the Game you’re playing, whatever the game is.
But the best players recognize that the rules of the game are
changing even while it is being played. If they are smart, or
passionate, they are also actively involved in changing the rules of
the game while they are playing it. If you don’t want to keep
“fighting the last war,” and arriving at the top of your game only to
have the game change on you, you must also pay attention to how the
game is changing. Often, this takes the form of realizing that there’s
a bigger game out there than the one you once thought was your
whole world.

See Also: Big L Notation (expanding on why “Learn In


Public” is the fastest way to learn)

32.4 Further References


Sarah Drasner: Learning to Learn
The Ladybug Podcast: Learning to Learn
Cory House: Programming Your Brain: The Art of Learning in
Three Steps
Chapter 33
Design for Developers in a
Hurry
You don’t need to have a designer to spark joy in your work. But it is
important - rationally or not, people simply pay more attention to
demos with nicer designs than demos that don’t. That’s the idea of
Sparking Joy - adding lightweight touches to delight users!

“I don’t consider myself a designer. I consider myself a


developer who can design… I create designs so that
people are interested in my code.” - Sarah Drasner

This may just be a nice-to-have for a backend developer, but if you


do any frontend work at all, it is surely an advantage to show that
you can add some design flair, without direction from a card-
carrying Designer.

33.1 Spark Joy Repo


You can find a full, maintained, curated directory of
everything below at its dedicated repo: https://github.com/sw-
yx/spark-joy. The intent of this section is primarily to give you a
high level overview of elements you can rather than comprehensively
listing every resource. If you find something not mentioned, swing
by to contribute!
33.2 Frameworks
The easiest way to get an instant design lift is to use a premade
design framework. There are a lot of these, so you should curate a
short list of frameworks you like - your “toolkit” of sparking joy.

You should use different frameworks based on your usecase. I split


them into “heavy”, “drop-in”, and CSS resets. Here are a short list of
them for you to check out:

Heavy (offering a lot of components, requiring a steeper


learning curve): Bootstrap (popular but overused), Foundation,
Blaze UI, PatternFly, UIKit, Weightless. These often have
framework-specific ports, including ReactStrap and Material-UI
Drop-in CSS (CSS only, “light” and often “fun” frameworks).

Serious: Spectre.css, PureCSS, LitCSS, ScreenCSS,


MVPCSS, and a lot more in the Drop-in Minimal CSS repo
Fun: PaperCSS (handwriting-like css), TerminalCSS,
NES.css, 98.css

Resets (the lightest of all, just resetting default user agent styles
to something just not-ugly): Nanoreset, Destyle, Andy Bell,
Normalize.css

If you’re doing a Demo, the Fun frameworks can be really easy wins.
The popularity of handwriting styles have led to XKCD-inspired
charting and Graphics. Who doesn’t smile when looking at a demo
like this!
Many vendors like Creative Tim and Tailwind UI offer free and
premium custom styled components that you can explore as well.

33.3 Layout
If you need more control than the frameworks give you, you will need
to learn some basics of design.

The most immediate impact you can have here is to add more
spacing - developers as a rule tend to like information crammed
together, so we need to space things out a little more than we are
comfortable for general audience reading. Also consider
standardizing the vertical “rhythm” in your site. For example, you
can restrict yourself to a small set of css variables that are 0.5x,
0.75x, 1x, 2x, and 3x a given base size (say 1em or 16px). Because
margin collapsing can be hard to manage, use single-direction
margin declarations to simplify your rulesets.

Next, you should be familiar with the simple CSS incantations that
make common layout paradigms - CSSLayout and Every Layout are
the definitive resources you can use. In particular, the Holy Grail
layout is so named because it is so common for apps and sites.

When you have laid out all your images and elements, consider the
number of “lines” that are created in your design. You should try to
make elements across your page line up as much as possible. This is
a lot easier to do if you set box-sizing: border-box to make
your layout include padding and border.

For a deeper discussion of alignment, symmetry, anchoring, and


other great layout techniques to draw the eye, check Sarah Drasner’s
Design for Developers workshop.

33.4 Typography
The standard advice is to use either the System Font Stack - built-in
device fonts that are faster because no download is needed - or a
maximum of two custom fonts - one for headers and one for body
text. Canva’s Font Combinations app and Google Fonts can suggest
pairings for you.

Font selection is a rabbit hole and a discipline unto itself - just


remember that the high level goal is to pick based on the personality
you are trying to convey:

Elegant/Classic: serif like Freight Text


Playful: rounded sans serif like Proxima Soft or a
Handwritten font
Plain/Safe: neutral sans serif like Freight Sans

Don’t forget that you can also make your fonts responsive, using the
font-size: calc(1rem + 2px + ((100vw - 550px) /
250)) trick.

33.5 Color Palette


Having a constrained color palette can help you keep a consistent
brand identity and instil personality too.

Pick a primary “accent” or “highlight” color to match your


personality:

Blue: safe, familiar


Gold: expensive, sophisticated
Pink: fun, not so serious

You can blend that color with a grey for secondary content, and
lighter grey for tertiary content.

Don’t use system defaults for colors, they tend to be too harsh. An
example Blue palette:
Black: #1d1d1d
Purple: #b066ff
Blue: #203447
Light Blue: #1f4662
Blue2: #1C2F40
Yellow: #ffc600
Pink: #EB4471
White: #d7d7d7

There are dozens of free color picking tools like Adobe Color, Coolors
and FlatUI that you can use to settle on yours.

Two special notes for Sparking Joy with colors:

Take care to ensure that your color contrasts meet accessibility


guidelines - as a rule, dark text on light background passes more
easily than vice versa
Using CSS Variables for every color helps you implement Dark
Mode easily, which many users enjoy. Plan ahead - instead of
using variables like –black or –blue in your code, you should
use something “semantic” like –text-color or –link-color
so that it makes more sense swapping out colors for Dark mode.

33.6 Backgrounds
Interesting backgrounds can give a lot of texture and inspirational
feel to your work. Use them judiciously - it doesn’t help to have a
distracting background when the user should be looking in the
foreground!

Gradients only require a few lines of CSS, so have great


performance. You can generate good background gradients with free
tools like WebGradients, UI Gradients, and Gradient Animator.
If you want to get a little more interesting, you can use more CSS,
tesselating icons or subtle textures.

Marketing pages should grab attention. You can use something like
Bootstrap’s Jumbotron or a Hero Generator, together with free stock
photos from Unsplash or Pexels to add instant visual interest.

33.7 Icons and Illustrations


On the smaller end of the scale, having a consistent icon set that you
are comfortable with can help you use iconography to convey intent
rather than using text. FontAwesome is best known, but both paid
options like Shape.so and Streamline Icons, as well as great free
alternatives, like The Noun Project and CSS.GG, will be helpful in
various scenarios.

On the larger end of the scale, you can draw on free illustration
resources for your marketing pages and empty states. Undraw,
Humaaans and Ouch! are just a few examples of all the amazing free
illustrations out there for your demos. LottieFiles offer animated
illustrations.

For doing your own graphics, Canva and Snappa are the market
leading free tools for non-designers to do basic graphic design.

33.8 Animations and Video


Animations can be very involved if you want to do them well -
dedicated tools like Svgator and Greensock need dedicated study to
create custom animations.
If you don’t have the time, you can grab animations off the shelf for
everything from loading spinners (CSSFX and SpinKit) to buttons
(Animista and Animate.css). In general, you want to animate state
changes, so that you guide your user’s eyes smoothly to the next
state.

If you need more firepower in video form, video makers like


Animoto, Biteable and Powtoon are there to help.

33.9 Easter Eggs


You can add even more delight by rewarding users in surprising
ways:

Josh W. Comeau’s useSound helps you makes apps you can hear
React-Rewards help you add microinteractions that reward
success
Canvas based interactive visualization in 2D with Processing or
D3, or in 3D with Three.js (with great React demos in react-
three-fiber)
Konami Codes are popular easter eggs - GenieJS is a more
general keybinding library
Clippy.js to add a little virtual assistant for your site

The Nostalgia category in general is a very ripe field for sparking


joy. Clones of old Windows and iPods regularly rank well on Reddit.

33.10 Learning Design


Having put off actually learning design as much as possible, you can
finally dive into the many great “Design for Developers” resources
out there. Here are the canonical, extremely well known resources
you should check out:

7 Practical Tips for Cheating at Design by Adam Wathan & Steve


Schoger (who also wrote Refactoring UI in book form)
7 Rules for Creating Gorgeous UI by Erik Kennedy (who also
teaches Learn UI Design)
Design for Developers Frontend Masters Workshop by Sarah
Drasner (with repo here)
Degreeless Design by Tregg Frank

Nothing will beat practice by following the popular design


inspiration sites like Dribbble, CollectUI and Codrops to hone your
skill.

Good luck, and don’t forget to check out the spark-joy repo for
even more resources!
Chapter 34
Lampshading
“The person who asks is a fool for five minutes, but the
person who does not ask remains a fool forever.” -
Unknown

We are often told that Knowledge is Power. This is mostly true -


except for at least two points in your career.

Have you thought about how Ignorance can be Power too? I can
think of at least two stages in a career when you can wield lack of
knowledge as a form of power (in the neutral, ability to influence
others to do what you need sense, not in the petty dominating over
others sense).

And we’ll talk about how you can wield ignorance throughout the
rest of your career too - with Lampshading!

34.1 When you’re very senior


First, when you’re in senior management, typically at least a
couple layers removed from individual contributors. Beyond a
certain level you are not being paid to have the right answers - that’s
what your reports are for. It’s your job to ask the right questions, and
to enable your team to figure out how to get the answers.

In my career so far I’ve often noticed that it is senior management,


not middle or junior people, that are most likely to say “Whoa, whoa,
whoa. I don’t understand what’s going on here. Can you explain like
I’m five?” Done right, it can expose weak reasoning and bust
bullshit, particularly when framed with the (mostly correct) belief
that “If you can’t explain it simply, you don’t understand it well
enough.”.

Note I’m not absolving incompetent management of the need to


know domain knowledge necessary to be an effective leader. I’m
simply observing that at senior levels you are not expected to know
everything, and that’s an interesting violation of “Knowledge is
Power” you have probably experienced.

34.2 When you’re new


Second, when you’re new, typically entry level in a career or a new
joiner to a community or company. At this level, again, nobody
expects you to know anything. Sure, you needed to know enough to
fool someone into hiring you. But so long as you never lied or lied-
by-omission, nobody is going to turn around and fire you for having
holes in your knowledge.

Of course, there are cases where this doesn’t apply. Junior talent are
the most expendable, and some companies don’t have a healthy
attitude to mentorship and hiring. But in general, I find the tech
industry a lot better for mentoring than, say, finance. Tech
companies generally place explicit responsibility on seniors/team
leads to mentor juniors, especially as part of their career progression
goals.

You might imagine, having restarted my career 2-4 times depending


how you count it, that I have a good deal of personal experience with
being a total newbie.
34.3 Storytime!
Here I can tell you about my first day on my new dev job, fresh out of
bootcamp.

My team all joined on the same day - three new hires (me and two
more experienced devs). My new boss, a confident senior dev who
had had a long tenure with the firm, was walking us through our tech
stack. All of a sudden he paused, and said, “oh by the way, we’re
going to use TypeScript. You all know TypeScript, right?”. Coworker
1 nodded, Coworker 2 nodded. There was that unspoken sense of
duh, we’re all professionals here, of course we use TypeScript.

And then all eyes were on me.

I don’t do well with peer pressure. In Gretchen Rubin’s Four


Tendencies model, I’m an Obliger - I like to please people and put my
own concerns aside. Of course my bootcamp hadn’t taught
TypeScript, we’d only had three months to learn fullstack JS! And of
course I wanted to say yes!

I had a probably visible moment of panic, before going with “no I


don’t know TypeScript.” My boss simply nodded, saying, “you can
learn on the job”, and moved on.

I think in my first few months I probably had a dozen little tests like
that. Did I know how to do professional code reviews? (No) Did I
know how to do BEM naming? (No, and I proudly still don’t) Did I
know what Clean Code was? (eh.. nope).

Every time I confessed ignorance, they gave me what I needed to


learn, and I caught up. If I made a mistake, they taught me what I
did wrong. What were they gonna do, fire me? They knew what they
were doing when they hired me out of bootcamp.
34.4 Lampshading
So we see that confessing ignorance works at both the senior and
junior stages of careers. But it also works in isolated situations as
well, for example when you caveat what you don’t know while
learning in public.

Given my casual interest in creative writing, I often compare this


technique with Lampshading. To quote from TV Tropes:

Lampshade Hanging (or, more informally, Lampshading)


is the writers’ trick of dealing with any element of the story
that threatens the audience’s Willing Suspension of
Disbelief, whether a very implausible plot development, or
a particularly blatant use of a trope, by calling attention
to it and simply moving on.

Applied to real life: You call out your own weakness, so that others
can’t.

In fact, by most functional team dynamics, others are then obliged to


help you fix your weakness. This is soft power.

Many Americans (of a certain age) immediately sympathize with this


by linking it to the final battle in 8 Mile. In it, Eminem kicks off by
naming every single weakness of his that his opponent Papa Doc was
going to, literally stealing all the words from Papa Doc’s mouth and
turning himself into a sympathetic character. Weakness is
strength here purely because of lampshading.
34.5 The Stupid Question Safe
Harbor
In real life, I often lampshade by invoking the “Stupid Question Safe
Harbor” (SQSH).

A “Safe Harbor” is a legal idea that explicitly okays some behavior


that may be in a grey zone due to unclear rules. So I use it as an
analogy for how we act when someone says “I have a Stupid
Question”.

When we invoke the “Stupid Question Safe Harbor”, we are


acknowledging the question is potentially stupid, AND that we all
know that there’s not really such a thing as a stupid question, but
we’ll just get it out of the way to ask something really basic - because
getting mutual understanding is more important than saving face.

The trick here is you actually are saving face - now you’ve invoked
the SQSH, people understand you’re roleplaying, you’re explicitly
invoking a well understood mode of conversation, and you’re not
ACTUALLY that stupid. Right? Right?? nervous laughter

When you are in a group scenario, the SQSH has positive


externalities. There may be multiple people wondering the same
thing, but only one person has to “take the hit” of asking the “stupid
question”, and yet all benefit. I like performing this role of Stupid
Questions as a Service.

34.6 Advanced Lampshading


Once you learn to look out for Lampshading, you may see powerful
users of it out there in the wild who use it to Learn in Public:
Kyle Simpson famously was told “You Don’t Know JS” in an
interview, and turned that into his primary claim to fame,
controversial title and all.
I eventually took my own TypeScript learnings, explicitly
lampshaded that I was learning, and put them online and that
became the React TypeScript Cheatsheets
I frequently lampshade my mistakes during my talks. Clicker
not working? Call attention to it. Joke didn’t land? Call myself
out. Self aware, self deprecating humor is always appreciated by
the audience, and fills dead air. But you can also use it to set up
a Pledge, in advance of a Turn and the final Prestige, which is
exactly how I set up my own livecoding talks.
This woman lampshading masterfully to ward off all trolls on
Twitter
Who else lampshades very well? Let me know.
Chapter 35
Conference CFPs
When conferences want speakers, they have two options: invite well
known speakers or open up a selection process for all other
speakers. If you’re a new speaker, you’ll mostly get your speaking
opportunities through the latter process, which is called a Call for
Papers (CFP).

Don’t let the name fool you – you don’t have to write a paper to get
accepted! The term is a holdover from academic conferences where
you would submit papers you’d worked on. But there are other
commonalities – you send in one or more proposed talks, with a title
and abstract, and a review committee looks through all the
submissions to curate the lineup. This is usually done 3-6 months in
advance, so you have time to work on your talk if and when it is
accepted.

Speaking can open many doors for you. From building your
professional network, to getting in front of employers, to promoting
a great idea or library that you want everyone to know. Everyone
should try speaking - to teach what they learn and improve their
communication skills.

“The biggest boost for my career the past five years wasn’t
working at Facebook or being a manager, it was developing
public speaking skills.” - Charity Majors

However, the difficulty of getting a speaking opportunity ramps up


dramatically when you graduate from meetups and workplace lunch-
and-learns to a full-fledged developer conference. This chapter is
dedicated to helping you come up with great CFPs to help you start.
We can discuss actual speaking advice in a future chapter.

35.1 Who Am I to Advise You?


I’m not a veteran, world-class speaker. I don’t maintain any widely
used library or framework. I started my first dev job in January
2018. My first meetup talk was in Dec 2017. My first conference talk
was in Aug 2018. In the year-and-a-half since then I have spoken at
20+ events from 250 person local community conferences to 4k
person bigger ones, internationally from the UK to Sweden to India
and two JSConfs in Singapore and Hawaii.

I don’t say this to flex, merely to establish what I’ve done and also
what I’ve not yet done (e.g. been an emcee or been invited to more
“prestigious” conferences). I know I’m solidly on the B or C list. I’m
get a few conference invites, which give me more freedom from the
CFP process, but most of the time I still have to go through it. If
you’re a beginner, I hope that makes my advice more relatable to
you.

35.2 Watch a lot of talks


Speaking and CFPs and the world of conferences have their own
special language. And like any language, you learn best by
immersion.

My YouTube Watch List is 400+ videos long. When I have lunch or


am bored, I pull up a video and watch a talk. Most conferences
directly copy and paste titles and talk abstracts into the videos. Start
paying attention to those, since you’re about to start writing them.
Watching talks also trains the YouTube algorithm to start
recommending them rather than entertainment, which is a nice
nudge when I procrastinate.

You can find lists of more great talks on Hacker News.

35.3 Speak at a Meetup


If you haven’t spoken at a meetup yet, I strongly recommend you do
so a couple times before you speak at a conference. This is the best
chance to get your speaking nerves out of the way, iron out the
presentation technologies you want to use and trial your content on
people who aren’t your dog. On the flip side, meetup organizers are
always looking for speakers, so you will be doing them a favor. Some
meetup organizers like GitNation actively use meetups to seed future
conference speakers, so you may even get noticed for a conference
based on a meetup talk you give.

35.4 Pick a Conference


Once you know the conference, you roughly know the audience. First
time speakers often have a goal to speak, but they forget that
speakers are there to serve the audience and the goals of the
conference organizers. So the better you understand the conference
and the audience, the higher your odds of being accepted.

You can find conferences via community listings:

https://reactjs.org/community/conferences.html
https://events.vuejs.org/conferences/
https://jsconf.com/
https://conferences.css-tricks.com/
https://twitter.com/moztechcfps
https://twitter.com/cfp_land
https://twitter.com/callingallpaper
https://confs.tech/

If you’re new to conferences, “the game” can be rather opaque, so


here are some basic, general facts (each conf will have exceptions!):

Conference organizers want to sell tickets, have a great


content mix, and sell next year’s tickets, in roughly that
order. Speaker selection is a major part of how these goals are
achieved.
Fortunately, you don’t have to put butts in seats. Organizers will
invite more famous speakers to do that. This is important:
don’t do what they do. Not yet. They’re playing a different
game, and the exact specifics of the talk/abstract matters less.
You haven’t earned that yet.
Your job is therefore to be a part of their content selection. This
selection will be determined by the target audience of the
conference. The more established the conference is, the more
that “good selection” is a priority since ticket sales are assured.
Community conferences are often framework or language
focused. For example, JSConf takes a VERY wide variety of
topics - you don’t even have to use JS or program for the web. It
will always have room for the embedded JS talk or the creative
coding talk or the other creative coding talk or the other other
creative coding talk.
Company-sponsored conferences are often around a certain idea
or movement, even if you don’t use the particular company. For
example, Netlify sponsors JAMstackConf and yet invites
speakers who don’t necessarily use or talk about Netlify at all.
Scope is a little narrower and more “vertical” than “horizontal” if
that makes sense to you.
A conference’s speaker slots are limited. A rule of thumb is 8-12
speakers per day, per track (you can get more lightning talk
speakers at the cost of some full talk speakers). So a three day
single track conference has a max of 36 talks. The applicant pool
for a conference ranges from an average 200 to something like
800-1200 for a JSConf. (Some conferences are invite-only).
Your odds go down or up depending on these variables. A
rejection doesn’t sting as much once you see how incredibly
selective it is. It’s basically as non deterministic as applying for
colleges.
However since we already established the importance of mix,
there are subgames to be played here. Even if 70% of CFP
applicants use React, JSConf doesn’t want to suddenly have 70%
of talks be about React. So CFPs get put in buckets, whether
explicitly or subconsciously. React CFPs will be compared on
their merits with other React CFPs. And there will be some less
competitive categories. Again, this may not be an explicit policy,
but it happens regardless. Because “good mix” - in the
subjective view of reviewers - is so important.
Most conferences (again, with clear exceptions) will take big
names over unknowns per domain. For example, if both Sarah
Drasner and I were to submit a CFP on Vue or Design or SVG
animations, they would be silly not to take her over me.
However if this happened in every single talk, there would never
be any new faces on stage, and no pipeline for the next
generation of speakers. Given equal levels of unknown,
employers also get taken into account. This is why “blind” CFP
review is important for some level of equity, serendipity, and
renewal. In my experience, most CFPs are NOT blind. Mainly
because putting butts in seats is more important for most
conferences.

To sum up everything we just covered: As a first time speaker, your


best opportunities are to apply to multi-track, multi-day conferences
that have committed to a “blind” CFP review process, around a
framework or language or architecture you know well. You may have
a better shot speaking about a less competitive topic, if that option is
available to you.
You should especially seek out conferences that put out high
quality videos of every talk. This has two purposes. Part of your
first talk’s job is to be a calling card for your next talk. One
great talk can kickstart a great speaking career all on its own.
Secondly, you can tell the exact nature and tone of previous talks that
have been accepted for that specific conference, and therefore it is
much easier to do research when pitching your own talk, and then
preparing to speak for it.

35.5 Pick a Topic


Given you now know your target audience, there are two things to
sort out before you even start writing your title or abstract.

First, you have to find a topic. This is, at its simplest, finding the
intersection between the things you’re very interested in and the
things that everyone else is interested in. The simple reason for this
disparity in interest is that you’re gonna be spending a bunch more
time on this topic than the audience is, but you still need an audience
to show up (and, more to the point, for CFP reviewers to rate you
highly).

This intersection might either seem daunting or too broad to be


useful.

If you find it daunting: you don’t need to have a ton of


production experience in the topic to give a talk on it. You don’t
need to be the creator of the framework or library. You don’t
need to understand its internals. As long as you’ve probably
spent more time on your particular topic than your audience,
they’ll have something to learn from you. To some extent, you
can even “mortgage your future” a bit - propose a talk on
something you want to learn, before you’ve learned it, and use
the talk acceptance as an artificial deadline. I don’t recommend
always doing this, but I’ve seen it work well.
If you find it too broad to be useful: understand that in
aggregate, the interests of large groups of people are
predictable. They always want to know what the future holds.
They always want a comprehensive introduction to something
popular. They always want real life “war stories” of things they’ll
probably have to do in future, from people who’ve successfully
been through it. Developers always want easy ways to add
design touches without being a designer. And vice versa
designers. If you need ideas, think about which of your
experiences overlap with hot topics. Accessibility, Automation,
AI, Design Systems, No Code, GraphQL, Serverless, Service
Discovery, Infrastructure as Code. Everyone has the same
insecurities and in a way you are there to satisfy their
insecurities. Conference organizers look to other
conferences for inspiration, and so should you.

To be EXTRA CLEAR here: use this tactic only if you need it


- it is perfectly fine to do a talk about non hyped
technologies too. But people do respond to buzzwords!

A reliable way of gauging the interest of others is to look at


community watering holes. What topics keep coming up on Hacker
News, Twitter, or Reddit? You can niche down from
megacommunities to industry ones - for web development this would
be sites like Dev.to, CSS Tricks, and Smashing Magazine. What are
the most active github repos? What are megatrends on package
downloads? What are framework and library core team members
putting out? What are company leaders (whether ones you work at
or just notable ones in the news) doing that is interesting? But be
aware that sometimes people don’t know what they want until they
see it.
You can also gauge relative interest and your own interest by creating
more. Blog more and see which blog posts get abnormal traction.
Twitter, HN and Reddit are wonderful feedback mechanisms to
gauge interest. The MVP of a talk is a blogpost.

If you aren’t a great writer, that’s fine, you can also create demos.
Diana Smith has made a career of CSS art and I’ve never read a blog
post of hers. You can bet she’ll be accepted to speak anywhere (I’m
pretty sure she has spoken, I just can’t find it right now). Your
YouTube watch history and GitHub timeline are also great indicators
of your revealed interests.

A special note on nontechnical talks: I love them. Conference


organizers don’t. Advice on Career Management, Impostor
Syndrome, Salary Negotiation, Working Remote, Learning in Public
(Chapter 9)? They are great, and last longer than any technology you
choose. Conferences should have more of them. They don’t.

The reality is that the ultimate customers of conferences are the


bosses of the people attending conferences. They want to see some “I
can use this at work” return on investment on sending their
employees. Most bosses find sending people to technically-heavy
conferences easier to justify, hence there is more demand for
technical talks. Less cynically, the timeframes for measuring and
getting return on investment (2-3yrs, the stereotypical tenure of an
in-demand tech worker) dictate what you invest in.

If you work at a mission-driven company, for example a non profit or


a government entity or school system or museum, definitely see how
you can incorporate your social impact into your talk. Developers
are always looking for more inspiration on how their tech reaches out
to the “real world”, because most of us spend all day working on SaaS
apps and marketing pages.
35.6 Pick a Genre
Once you know your topic, there are several different genres of talk
that will dictate your CFP title and abstract. Of course, you can
choose not to stick to a genre, or to subvert a well known genre, but
within the confines of a CFP it is often easier to just stay inside a
genre. I haven’t collected a full list of genres, but here is a non
exhaustive list:

The War Story: This is a great first talk genre for someone
with some work experience. You simply tell a story of something
you went through at work, including setbacks, lessons learned,
and ESPECIALLY any quantitative benefits gained. You don’t
have to be the world expert in anything except your specific
situation. It usually helps if you work somewhere notable like
AirBnb but a lesser known name is fine if you advertise the
interesting elements of the story like Millie Macdonald did.
Library/Framework/Product Launch: Conference
organizers like to be at the start of something big. To do this
genre of talk well, you have to tackle an important problem, and
sell the idea that you have developed a good solution for it. You
don’t have to have made it yet, but of course it helps. Examples:
Dan Abramov, Ryan Dahl
How to X: How to do Error Handling in GraphQL. How to do
Input Masking in Vue. How to make Static Sites Dynamic. How
to Be a Web A/V Artist. 14 Ways to Bounce a Ball. You get the
gist!
Introduction to X: This is easy Meetup fodder, but is more
difficult to get traction at conferences, usually because
conference organizers don’t want to be perceived as having talks
which could just as easily have been on the docs or README
instead. So a good Introduction to X talk will also have to be
creatively framed and titled. One of these I’ve seen recently is
Louisa Barret’s Intro to Color Theory, except it wasn’t named
that. It was titled The Teenage Mutant Ninja Turtle Guide to
Color Theory. You can even add a single word like A Whirlwind
Introduction To TypeScript. See how this works?
What’s New in X: Straight survey of what’s new. This is also
often framed as “State of X”. You often have to be rather
established to do this kind of talk, like Mark Erikson or Ben
Ilegbodu, or Sarah Drasner or Evan You. But even if you’re not
super established, you can also bring data like Sacha Greif or
just straight up explain things entertainingly like Tara Manicsic.
Fundamentals: This is a GREAT genre for beginners (not that
it is exclusive to beginners). CS Fundamentals like Algorithms,
Data Structures, State Machines, and Coroutines are always
loved because they reinterpret boring things that everyone
“should” know, in a more familiar and up-to-date context. But I
name this genre more broadly because you can also think of
other fundamentals to teach, like the JS Event Loop, Visual
Design or Game Programming Techniques.
Live Coding: This is an intimidating genre to many, because a
mistake can derail a talk without a satisfying conclusion.
However, the “live wire act” fascinates audiences, for the same
reason we enjoy watching acrobats do death-defying stunts. We
know they are well-rehearsed but there is still a risk of
catastrophe. Being able to watch working code form over time
gives extreme confidence in the tool or concept being
demonstrated. Two less appreciated benefits are the familiarity
of IDE as presentation tool and the natural guard against
rushing (first time speakers, like me, make the mistake of
talking too fast to hide nervousness and risk losing audiences).
My best talk is a livecode talk and I think interest in this genre is
on the rise. SmashingConf is now organizing 100% livecode
conferences, and React Live is also 100% live code.
Heresy Talks: Definitely not for the faint of heart. To do a
Heresy talk, you have to go to a conference where >80% of
people love Technology X and tell them why Technology X isn’t
good enough (yet) or question the tropes that fans use to
oversell it. See Corey Quinn’s Heresy in the Church of Docker ad
DockerCon or Robert Zhu’s The Case Against GraphQL at
GraphQL Asia. The pro is that attention is guaranteed with all
your slandering. The con is that you better be confident in your
claims or be prepared to be torn apart.
Intersection Talks: This is definitely downstream of picking
your topic, but usually people with interests in X and interests in
Y are underserved with talks about X + Y. There are an infinite
number of topic intersections, too many to name, but just talk
about the obvious tips and tricks and notes that come to mind
when you consider intersections.
The Perf Talk: This is a great genre for speed demons. Pick a
common use case, start off with an inefficient, high number, and
whittle it down with trick after trick after trick. Here are
examples with Jake and Surma reducing an app’s TTI from 6
seconds to 1 and Sasha Aickin reducing React SSR from 1025ms
to 5ms.

35.7 Pick a Title


Your title is twice as important as your abstract. CFP reviewers will
look at both your title and your abstract. But conference attendees
often just look at your title. Especially in multi-track conferences,
most conferences only have room to print out your talk title, and that
will often be the deciding factor between whether your talk has
crickets or is standing-room-only (I know this from real experience).

But no pressure: you can still tweak your title after getting accepted.

To the extent that your genre dictates your title, just go with that.
(I’ve put all genre title examples above in the Genre section)

If you can come up with a memorable name that encapsulates your


core pitch, like Never Write Another HoC, do that. If your talk is
good, its title will be quoted back to you with surprising frequency, so
make it something you can live with.
Examples:

Never Write Another HoC


The Hard Parts of Open Source
What Is Success?
Simple Made Easy
Even Naming This Talk is Hard

Getting creative and eye-catching is helpful. Remember that CFP


reviewers will mostly be scanning through hundreds of CFPs, usually
in a Google sheet or table. Short titles stand out. Special buzzwords
stand out. Again, scan through old published conference schedules
to get an idea of what works.

If none of the above fit, don’t push it. Just take the most boring,
practical title you can do that touches on the main technologies you’ll
be demonstrating. Sometimes plain and simple is best!

35.8 Write an Abstract


With your genre and title chosen, your abstract will practically write
itself. You sketch an outline of the talk you want to do. If it helps,
you can bullet point out all the things you want to do in your talk,
group and sort your points, and then use that as brainstorm fodder
for your abstract. Don’t give away the whole talk, but show just
enough to pique interest.

Most conferences only ask for abstracts, but some will leave room for
more context on why you are the best person to present this topic
(it’s usually optional, but USE IT!!!).

The first paragraph of your abstract is most important, since it is


what will be printed and used in the YouTube description. Most
abstracts are just one paragraph. The first sentence draws the
attention. The last sentence seals the deal. As with all writing, Gary
Provost’s timeless advice on writing applies:

This sentence has five words. Here are five more words.
Five-word sentences are fine. But several together become
monotonous. Listen to what is happening. The writing is
getting boring. The sound of it drones. It’s like a stuck
record. The ear demands some variety. Now listen. I vary
the sentence length, and I create music. Music. The writing
sings. It has a pleasant rhythm, a lilt, a harmony. I use
short sentences. And I use sentences of medium length.
And sometimes, when I am certain the reader is rested, I
will engage him with a sentence of considerable length, a
sentence that burns with energy and builds with all the
impetus of a crescendo, the roll of the drums, the crash of
the cymbals–sounds that say listen to this, it is important.

Do that, for your talk. Use less words if you can. Most of my
abstracts are under 100 words.

Abstracts are great places to stick attention-grabbing data points.


Did you know TypeScript is at 65% adoption of JavaScript users? Or
that 51% of developers use VSCode? Or that “we recently refactored
100K lines of JavaScript to TypeScript”? Or that I slashed my
webpack build times by 20% with this one weird trick? We are
suckers for numbers.

Most abstract submissions allow markdown for emphasis and simple


styling. Use it. Sparingly.

Just like your talk title, you’ll rarely be held exactly to it. Nobody is
watching your talk holding you to your abstract at knifepoint. You
reserve the right to change things, hopefully not too drastically or too
last minute. You won’t use this right often, but it’s there if you need
it.

Run your abstract by a few developer friends, with no context. If


they don’t get it, that’s a problem. You likely have a better idea of
what your talk is than you’ve actually written down. Rip it up, try
again. Be more obvious, less abstract. Appeal to what people
will get out of your talk rather than the specifics of how to
get there (which is the reason why people should come to your
talk!).

35.9 Building a CFP Process


Ok, so you’ve written one CFP. Congrats! You’re not done.

You can see this 12 Minute Video of How I Write CFPs explaining
my process below

As you’ve probably heard, due to the selectivity and randomness,


CFP submission is a numbers game. So it’s more important that you
build a sustainable CFP process than have any particular CFP get
accepted. You’ll be submitting between 2-5 CFP’s per
conference, and there are probably dozens of conferences each year
that you are a good fit for.

To avoid accidentally becoming a fulltime CFP writer, you’ll want to


have a bank of topics and title/abstract samples that you can reuse. I
tend to run with 5-10 of these, of varying readiness to present
(remember, you don’t have to be a world expert in these topics to talk
about them). Tweak each submission to the conference’s target
audience as appropriate, like you would a cover letter in a mass job
search. In a way, you’re kind of looking for a job, or at least a short
term gig.
Get a good photo, use the same photo everywhere. People recognize
faces faster than names.

Write a short bio, you’ll be asked for it over and over again. Don’t
write down your life story, just a simple statement of what you do,
what you identify as and what you’re generally interested in. As your
speaking career grows you’ll want to have a short, medium, and long
bio on your site for organizers to just copy paste without asking.

As you start getting acceptances and recorded talks, keep a list of


your best talks. You’ll be asked for those in future CFPs. If you make
them easily discoverable and shareable, people will start inviting you
without a CFP.

35.10 Example CFPs and Peer


Review
Of course I have already given my advice that you should watch a
bunch of talks and pay attention to titles and descriptions. But it
helps to see examples of accepted CFPs, so I will list what I have
here:

You can find every single title and abstract for accepted, pending
and rejected (dead) talks on my site)
My first CFP (accepted for React Rally)
My first JSConf CFP (accepted for JSConf Hawaii)
React Rally Bad Example Proposal
David Khourshid’s React Rally CFP
Devon Lindsey’s React Rally CFP
Motherlode of CFP Examples from Will Larson also check Tweet
Thread

If you purchased the Community Package for this book, feel free to
drop your CFP for peer review in the community chat!
35.11 Next Steps & Recommended
Reads
Phew, that was a long chapter. I hope it helps! Ping me if you get
accepted, I will be cheering for you.

As always, I am not the only source of advice on this stage. Here are
other advice pieces I have come across:

Phil Nash: how to find CFPs


Peggy Rayzis:

1. State the problem


2. State your solution
3. What the audience will learn from your talk (optional: how
you plan to teach it)
4. 3-5 sentences max.

Dan Abramov: Preparing for a Tech Talk


CFPLand Guide to Speaking
How to get into Speaking with Karl Hughes of CFPLand

Author’s Note: This was purely advice on how to get your


CFPs accepted. In a future edition of this book I will add a
chapter on Speaking Advice – I cut that out for now due to
Covid-19.
Chapter 36
Mise en Place Writing
If you want to write, you probably want to write high quality articles,
in high quantity.

I know of only one way of doing this: Mise en Place Writing.


Instead of making writing a habit, you should make pre-writing a
habit. By decoupling writing from pre-writing, you can
write more, faster, and better.

36.1 Mise en Whatnow?


Wikipedia defines Mise en place as:

a French culinary phrase which means “putting in place” or


“everything in its place”. It refers to the setup required
before cooking, and is often used in professional kitchens to
refer to organizing and arranging the ingredients (e.g., cuts
of meat, relishes, sauces, par-cooked items, spices, freshly
chopped vegetables, and other components) that a cook will
require for the menu items that are expected to be prepared
during a shift

The idea is that cooking is faster, easier and more enjoyable if you
have all the stuff you’ll need to do prepared beforehand. It’s basically
all the fun parts of cooking separated from the boring parts. If you’ve
ever had the chance to do a cooking class in a foreign country (A
great way to appreciate local cuisine in personal travel or team
retreats), notice that it’s fun because all the prep is done for you.

Of course, for chefs, typically you’re also the one doing the prep so
you’re not really saving any work. But it can be nice to break work
up into more palatable (pun intended?) chunks of “prep” vs “cook”
instead of “Prep & Cook”. In fact, if you prep early, you also get a
chance to spot missing ingredients that you’ll need, and be able to
run out and get them, rather than discovering that you don’t have
them while cooking (!).

36.2 Writing isn’t Just Writing


What’s true for chefs is even more true for writers. The actual act of
writing is only the final assembly stage of a longer, more involved
process. Instead of grocery shopping (or stocking up), chopping,
measuring, cutting, peeling, slicing, we have ideation, research, peer
review, audience testing, reframing, illustration, organization, and
more.

The key insight of Mise en Place Writing is that we should


decouple writing from pre-writing.
Writing is an intensive, focused process. It takes me anywhere from
1-5 hours to pump out an average article - in that time I am doing
nothing else.

That’s a lot of continuous time dedicated to just one thing - rare in


today’s attention economy. If I were to add to that ideation and
research and organization and so on, it’d take even longer, and I’d do
a poorer job of it. Ironically, this is the stuff that actually has high
leverage on what readers will take away from what I write. So I
should spend more time on that.

36.3 Components of Pre-Writing


Pre-writing is low intensity and often serendipitous, dependent on
thoughts flowing into you rather than you putting thoughts out.
Here is a nonexclusive list of things that can be realistically counted
as pre-writing:

Ideation (Deciding the menu): Literally, what are possible


things you could be writing about? Raw Idea Velocity is the
focus here - remember you’re not signing up to actually deliver
the thing - but if you had a flash of inspiration or insight
sometime somewhere, write it down. It’s not uncommon for me
to watch a good talk and come out of it with two ideas of things
to write about.

If you feel like you lack ideas for things to write about, your
bar is too high. Even if it’s been definitively explained
elsewhere, you can still get value learning in public by
explaining in your own words to others who think like you.
If you have too MANY ideas - I can sometimes relate - run it
by a mental filter of What People Want. You’ll want to take
note of what people are interested in. Or, y’know, just ask
them what they want.

Research (Finding recipes): Links, facts, quotes, stories,


demos, repos, tweets, talks, podcasts, timelines, histories,
taxonomies. Your research journey starts immediately after the
Idea. When you get the Idea Flash, definitely note down its
origin. That’s research. This is the “meat” of many genres of
blogposts - concrete pieces of information that readers can take
away. Can you imagine doing comprehensive research just
before you write? You might never end up writing! You’re
collecting all the stuff you’re going to use to write in future,
except you’re doing it as you come across it.
Peer Review (Taste test with staff): Research will be a lot
easier and faster with Peer Review. This is an advantage of
having a network - a small group of people who know more than
you, that you can tap on to get more research direction and to
get a feel of immediate objections to address.
‍Audience Testing (Trial run with potential diners): This is a
little wider net than Peer Review - instead of consulting people
who know more than you, you’re now testing the messaging on
the people you’re writing this for. This is an extra step I rarely
do for my blogposts, but, for example, I’ll do this when chatting
with developers in conferences and meetups to gauge reaction.
Broadway shows have the concept of Workshopping in a smaller
audience, with the understanding that everything from plot to
props to cast can be changed based on feedback, before the show
actually launches live. For more highly produced pieces of
content, like talks, workshops, or books, this is worth investing
in so that you have the impact you hope for.
Reframing (Renaming or Improvising the dish): The initial
idea might not be what you actually end up writing. Whether it
is due to audience feedback or delayed inspiration, you might
find a more interesting angle to approach the topic, or find a
better analogy. It’s cheaper to pivot the entire focus of your
writing when you haven’t written it yet. Just by illustration -
this chapter you’re reading was originally titled “How and Why I
Write” - good, but not as interesting and memorable. I found a
better framing, and reframed.
Organization (Presenting the dish): Deciding on a structure
for your article sets it apart from a stream-of-consciousness
rant. It lets people zoom in and out of your thoughts by
skimming or diving in as needed. If you really need to deliver a
message, use the Tell them what you will tell them, Tell them,
and Tell them what you just told them metastructure, that
highlights the structure itself. I don’t always do that because it
can feel repetitive. But structure choice is important. See, for
example, that I’ve brought you along this list in roughly
chronological order.
Illustration (Taking a photo for the menu/website): A picture
speaks a thousand words. Think about how you can help the
reader give a visual reference for what you will describe - as a
bonus, it makes your thesis a lot more sharable. Some things
might be harder to illustrate - Maggie Appleton has great ideas
on how to illustrate the invisible. Mental imagery can work too -
you’ll notice I don’t use many visuals here - but I am invoking a
cooking analogy that you already have entrenched in your head.

As you can see, there’s a lot that you can do to improve your writing
before you write. We should have a separate workflow for
pre-writing than we do for writing.

36.4 The Pre-Writing Workflow


The idea of grooming a backlog is key to productive writing. For the
past few months I have been accumulating a backlog of ideas that
could be interesting topics to write about. As of right now it stands at
around 50-70 topics.

First, make sure you have a cross platform note-taking tool - I


evaluated Evernote, Notion, Roam Research, and SimpleNote, but
currently am using OneNote because it is free forever with the
backing of Microsoft, and has good offline support. I might move to
Joplin in future, or write my own. It’s not really about the tool - at
my scale, it’s trivial to switch tools - but the feature set needs to
support the workflow.

And the workflow is this - anytime you have any content idea
anywhere - reading something, watching a talk, listening to a
podcast, having a conversation with a friend, thinking to yourself in a
shower - you need to note it down in a searchable place. If it attaches
to some other relevant piece of thought, you collect these together in
a growing list of ideas, quotes, soundbites, links, talking points and
so on.

It has to be easy and fast. I don’t know about you but I can forget
ideas in minutes. If I don’t write it down it might be gone forever.
I’ve been known to jump out of the shower dripping wet just to go
write something down.

Human Brains are great at abstract thinking and creative


inspiration. Computers are great at storage and search. Use them as
your second brain.

Each note you make is a little kitchen, and you’re assembling the
pieces in place for a future you to come in and just get to cooking.

36.5 The Infinite Kitchen


When practicing Mise en Place, Chefs are limited by available
kitchen space-time. Yes, I am invoking space-time equality. You not
only have raw table square footage limits, but food laid out must be
consumed within a certain time as well.

Writers have no such restriction.

You, the writer, have an Infinite Kitchen in the Cloud.

Screw struggling to come up with 1 blogpost a month. You’re now


simultaneously preparing 50 blogposts at once. You’re adding
ingredients as they come in, you’re chopping them up, rearranging,
taste testing, noting what you’re still missing, throwing entire
kitchens out, smashing two kitchens together.

Have fun! Be messy! Get weird! No one else is watching!


And then you write.

36.6 Writing
The process of writing is the same whether I write once a day or I am
trying to create a monster skyscraper or even a book. I still separate
pre-writing from writing.

Each time I sit down to write, I go through my growing list and think
about what is the most interesting thing I could write about that day.
The nice thing about having a groomed backlog is that all the related
links and notes and thoughts from myself over time is collected in a
list ready for me to flesh out into a full piece. It’s just less
intimidating that way. But there’s also a little dopamine hit from this
concentrated dosage of inspiration from all my past selves who have
sent this message into the future.

The key insight of Mise en Place Writing is that we should


decouple writing from pre-writing. With that, our writing
improves, as well as our enjoyment of writing.

36.7 Improvisation is OK
With all that work done pre-writing, I might be giving you the
impression that I am strictly separating everything all the time and I
don’t deviate from the plan once I enter Writing Mode. Not true.
Writing Mode is another opportunity to re-experience the pre-
writing and the writing job all at the same time, just with the benefit
of some extra prep that I’ve done before hand.

Improvisation is OK.
36.8 Editing
A lot of people put heavy emphasis on editing. I agree that it can add
a lot of value. But I don’t do a lot of it. For one thing, I don’t have a
ton of time. For another, I find it often doesn’t add as much value as
hoped. You can run things by Hemingway or Grammarly but they
are no substitutes for human judgment. Finding a good editor is
harder than just grabbing a coworker, but that’s what a lot of people
do and accordingly they don’t get the same value as a good editor
would.

I wish I had more insights here but I just don’t have a ton of
experience with editing. I will say that I edit my posts a lot after
publication - they are all intended to be living documents in a Digital
Garden - so if something doesn’t read quite right or someone chimes
in with a crucial thing I overlooked, I will go change it. But usually,
it’s more important to err on the side of getting it out there rather
than be bogged down in heavy editing, especially when it can be
edited post-publication.
Chapter 37
Side Projects
Side Projects aren’t necessary to succeed in this industry, but they
offer a huge advantage for your learning and career development. I
make a strong recommendation that, if at all possible, you have
one or two side projects you are constantly shipping.

37.1 Why Side Projects?


Learn better. All side projects are forms of applying what you
learn. It’s amazing how much you learn when you try to use what
you have learned in theory. You quickly find the holes in your
understanding. You learn what is true and what is marketing BS.
You learn that not everyone knows what they’re talking about,
despite sounding smart. And of course you remember what you
use a whole lot better.

Breakable Toys. The book Apprenticeship Patterns popularized


this way of viewing side projects. Many software developers work in
an environment where the consequences of failure are high. But
experience is built upon failure. Exceptional progress can only be
made when exceptional risks are safe to take. By working on smaller
projects outside of work, you have a way to experiment and make
mistakes, without the usual consequences. You can get past Hello
World quicker with a Breakable Toy. When you encounter a new
way to do something, like a new library or framework, you can put it
into your side project to see how it feels in a nontrivial use case you
know well. When your colleagues ask for your opinion on certain
technologies, you’re no longer making a decision based on docs or
marketing, you can assert some authority from actually having used
it in something “real.”

Examples: Both Kent C. Dodds and Adam Rackis maintain


bookshelf apps (Kent’s, Adam’s) as breakable toys - must be
something about avid book readers! If learning a language,
Vincent Prouillet notes that creating a static site generator
is a great side project because of all the functionality
needed.

Prototyping new things. You don’t just have to work on apps.


You can try building your own X from scratch, or creating a “Lite”
version of something you already use. People often learn so much
from building a “Lite version” of their main app or tool that they end
up applying it to their actual work, like Dominic Gannaway did with
Inferno.js (now he is on the React core team), or Zack Argyle
building a Pinterest PWA and convincing the CEO to switch the real
Pinterest site over to a PWA (now he manages the React Native
team). Google used to be famous for its 20% rule, which spawned
amazing side projects like Gmail, Chromecast, and AdSense (worth
billions of dollars).

Practice Shipping. Shipping is a whole other discipline than


coding. When you ship code at work, you are doing the shipping
equivalent of bumper bowling. The system is set up to not let you
fail as much as possible. You have coworkers and bosses around you
to help you decide what to do, when to do it, how to market it, what
your budget is, what not to do. When you ship, your coworkers are
obliged to pay attention. None of this true in real life. When you
work on side projects you practice all the other noncode aspects of
coding that make your code matter: decision making, prioritizing,
marketing, documenting. If you dream of founding a startup
someday, you should practice these skills before you start relying on
them for a living. If you are a Junior Engineer looking to grow to
Senior, understand that one of the few things everybody identifies as
a key quality of a Senior Engineer is the ability to independently
execute. Act for the job you want.

Permissionless Improvement. The other thing about Side


Projects is that nobody can tell you no. As long as you don’t give
away company secrets, you can usually work on whatever you want.
The danger with company laddering, however well intentioned, is
that it puts a cap on your career progression, tuned to a theoretical
expectation of an average engineer. But you are not an average
engineer. You’re reading this book in your free time for crying out
loud! If you are feeling undervalued or artificially limited at work,
your side projects are an outlet where you can put your full awesome
on display. You shouldn’t have to keep your project a secret: If you
have a supportive manager, they will not only recognize that you are
trying to stretch your wings, but actively encourage you and give you
resources. A manager that is afraid of you improving yourself
shouldn’t be your manager at all. Which leads us nicely to….

Resume Builder. Side Projects should never be a required part of


any job application, but it usually helps to show that you can work
independently and that you are passionate and curious about
technology. Your current job might work on some legacy
technologies for good reason, but if you want to switch jobs to work
on a newer tech stack and have no experience in that stack, it can be
a resume saver to have a Side Project that demonstrates you have
built something nontrivial with the stack you want to work with. Of
course, some people take this too far and do Resume Driven
Development. In practice, I find that this is more often a criticism
by bitter Reddit trolls than actual dev behavior. If you are pursuing a
career in Infosec, getting bug bounties on BugCrowd and HackerOne
are excellent resume items.

Improve your productivity. Your Side Project can be a dev tool


that makes you more efficient at work. This can often be the best
kind of side project to do, because the Side Projects you learn
the most from are the Side Projects you use, plus it saves you
valuable time at work. Think expansively of the entire range of tasks
you do - from things you do 50 times a day to things you only do
once a month. Randall Munroe of xkcd has a great chart that does
the math on how much time you should invest in automating tasks:

User Empathy. Your Side Project can often put you in the shoes of
your company’s end user. As an employee, you can usually try it for
free. Since you build the product, you might think you understand it
intimately - until you actually try to use it as a user. Suddenly all the
bug reports become real. Suddenly the bad design decisions matter.
Suddenly documentation and good copy are critical, rather than a
chore.

Making Money. If your Side Project makes money, you suddenly


gain options. You don’t have to go all Pieter Levels-level Indie
Hacker, but a little passive income on the side never hurts. But if it
ends up going unexpectedly well, as happened for devs like Taylor,
Mike, and Anne, you now have uncapped upside. Mikael Cho ended
up pivoting his entire business to his side project, Unsplash. When
you work, you are renting out your time. When you do a Side
Project, you own equity. Rich people own equity. Be like rich
people. Your project also serves as a good BATNA (see the
Negotiation chapter, Chapter 31, for more) - when negotiating your
next role.

A brief note on potentially money making projects: Be


careful of IP Assignment. Most developers sign a
“proprietary invention agreement”, which may range from
“we don’t care what you do in your own time” to “we own
you 24/7”, and may be variously unenforceable depending
on what jurisdiction you are in. Negative outcomes may
range from getting fired (though it worked out for Reilly
Chase - always good to have options!) to the company
claiming they own your project (!). Try to make clear what
the acceptable boundaries are - this is easier if you don’t
keep your project a secret from your manager. Common
sense rules apply. Don’t directly compete with or clone
your employer’s products. Get explicit permission if you
need to work on it during work hours. Don’t use company
equipment to make your project (just for avoidance of
doubt down the line).

Productive Fun. Don’t forget you can work on things simply


because it is fun. You don’t need a better reason than that. However
there is a difference between passive fun (leaning back, watching
Netflix, reading) and productive fun (making, experimenting,
failing). Most people are extremely imbalanced in their
Consume:Create ratio - correct it with a fun Side Project!

37.2 Code-Life Balance


Be wary of burnout. If you code at work and code for fun, you are
burning the candle at both ends. It’s fine if you have a long wick, just
recognize that even you need some days off. You are building a
career, not running a short sprint. And excelling at your career can
be meaningless if it comes at the cost of health, family, and friends.

You are a developer, but you are also more than a developer. Your
Side Project does not have to be writing more code, it can be code-
adjacent, or just nothing to do with code at all. You can still
experience a lot of the benefits enumerated above.

37.3 Project Ideas


Some project ideas for you to think about:

Work on your own open source library. This is a common


one for developers because the risk is low. But the reward is
often low too. It is usually unpaid work and a maintenance
burden. But it can help you be more productive at work or get
some conference/networking opportunities, while giving back to
your community. Don’t forget that you can clone existing open
source apps as well! (Chapter 10)
Open Source your Knowledge. See Chapter 13!
Contribute to your local
meetup/community/nonprofit. Your valuable skills can be
put to great use helping out on projects that other people need
and cannot make. Many developers got their start in web dev
making a site for their band. Everyone needs a site!
Build your Portfolio or Blog. A portfolio or blog is a project
too - spend a bit of time every year making sure your online
profile is updated to reflect your latest skills and interests. See
Marketing Yourself (Chapter 39) for more. Other forms of
content are also interesting: running a podcast, newsletter,
livestream, or YouTube channel - but know that they are higher
effort and bigger commitments.
Teaching. If you want to make your first money in the content
creation game, there can be no better place to start than a
platform like Egghead, Frontend Masters, Pluralsight, or
LinkedIn Learning. They will give you the resources you need to
record your first lessons, market them for you to their existing
audience, and take care of payments. All you need to do is create
compelling content.
Writing a Book. If you’re feeling particularly adventurous and
your blogging/other content has seen some good results, you
can also go for writing and selling your first book. You’re
looking at the result of one such Side Project!
Closed Source Side Hustle. You can also create and operate
an app for money. This is basically a full-on Side Hustle, and
involves the highest level of responsibility and support because
you have recurring customers. To get ideas you can check out
Ideaswatch, or you can simply look for problems to solve at
work. Dylan Feltus saw a need for a feature request tracker at
his company, so he built NextPlease.io, and his own CEO is a
now proud customer.

37.4 Project Advice


Start small and break it up. The biggest mistake people make
when they’re doing a Side Project is they start too large. They try to
build a massive project that solves 100 different problems they see in
the world, rather than something that does one thing better. When
you let the project scope blow up, you become unable to finish it.
Repeat this too many times, and you start thinking that you are the
problem - that you are the type of person who doesn’t finish projects.
Don’t let yourself get there. Beware the yak shave and jealously
guard the scope of your project. It’s OK for your open source library
to be a little bit shitty.

Pick constraints. Scott Young decided he would go through MIT’s


four year computer science curriculum (all of it, no cut corners) in 1
year. This is how he frames the MIT Challenge that made him
famous:

A good rule of thumb is that a project should have at least


three constraints: scope, content and mission. Scope
means you constrain the project to be only a certain
amount of time or a clearly defined size. Content
means what you’re actually going to do—I chose exams and
programming for my MIT Challenge, but I could have gone
with something different (say a research project). Mission
means you narrowly pick what your project stands
for, which then lets you make cuts more easily when things
start to grow.

One such useful constraint is to decide up front whether your project


is about shipping a new product or about learning a new technology.
Don’t let yourself do both. You can also put a time limit and take
dedicated time off for this project. Ben Orenstein reserved his Side
Projects for short, one week “Codecations”, which gave him the skills
and confidence to strike out and found his own bootstrapped
startup. However, don’t limit your projects to things you
already know. It is good to practice having to learn on demand
too. If you only stay within your comfort zone, you never really grow.
Consistency and Momentum are King. A project that you leave
for too long gathers dust and dies. It’s easy to look at that project you
haven’t touched in a week and say you’ll get back to it next week.
Then a month. Then a year. Making a regular commitment that
you don’t break helps you see forward momentum on this project,
and helps others see it too so that they know that they can keep
cheering you on. When your friends check in on you you’ll have
something positive to report, instead of the awkward “yeah I haven’t
got any updates”.

Have an end date. Projects that drag on forever cause guilt due to
their incomplete state. Having no end in sight can be strangely
demotivating, even if you are doing it for fun. Being able to get
closure and move on frees you of responsibility so that you can tackle
the next thing. Define “Good Enough” up front, and don’t let your
scope expand when you get there.

One great “forcing function” for you to ship your project and get
closure is to commit to giving a live demo or talk at a meetup or
some other event in the near future. Not everyone responds well to
this kind of pressure! But it works for chronic procrastinators like
me.

“Fixed deadline, negotiable scope” has to be the most


underrated pattern in product management. It’s the secret
to shipping. - Ryan Singer

Check Multiple Boxes. In Sarah Drasner’s timeless post on


Prioritizing, she advocates picking projects based on whether it helps
to fulfil multiple goals at once. If you have four areas of concern, like
community, mentorship, money, and personal fulfilment, then
picking a project at the intersection of two or more of those areas can
have higher mileage for your time. I have four that you can use:
Project benefits you personally (money, network, etc)
Project is one you enjoy/get excited about
Project benefits people you love/care about (can be broader
community)
Project brings in my domain knowledge from prior
hobbies/interests (e.g. finance, fiction, games, movies)

When I think about the best project choices I have made, I


tend to think about winning even if I fail. What that
means is I’m choosing my projects based on the skills and
relationships I develop that can transcend or persist after
that project. - Tim Ferris

37.5 Further Inspiration


Here are some life changing side projects that people have shipped
and that you could do:

Jennifer Dewalt shipped 180 sites in 180 days while learning to


code, and now is technical cofounder of a YCombinator-backed
startup.
Jessica Hische practiced design by shipping one drop cap a day
every day since Sept 2009.
Niklas Göke built a massive audience writing one book summary
a day from 2016.
Casey Neistat put up a daily vlog for 550 days and became “one
of the Internet’s most famous celebrities”.
Kate Bingaman practiced illustration by drawing something she
purchased everyday from 2006 to 2014.
Michelle Poler decided to get over fear by spending 100 days
facing her fears. This kick-started her motivational speaking
career. Jia Jiang did the same with rejection.
Megan Gebhart couldn’t decide what she wanted to do, so she
decided to have a cup of coffee with a different person every
week for a year.
Both Pieter Levels and the Shooting Unicorns duo decided to do
12 projects in 12 months, and both didn’t complete it because
they found something so successful that it became their full time
gig.
This book was shipped by writing 2-4000 words every day from
April 10th to June 1st 2020.

Of course, entire companies have emerged out of side projects, from


Slack (offshoot of a failed MMORPG) to Apple (a side project of an
Atari employee).
Chapter 38
Developer’s Guide to Twitter
Twitter is at once optional, yet incredibly important in the developer
community. An academic survey concluded that developers use
Twitter for Awareness of new projects and practices, serendipitous
and social Learning, and building professional Relationships.

We know that great projects and communities are organized on


Twitter. But at the same time great developers also do well without
any Twitter presence whatsoever. An enlightened empiricist might
therefore conclude that Twitter has zero bearing on developer
success!

The truth is, whether you would benefit from Twitter depends on the
community you’re in and your natural affinity to the format. The #1
feature of any social network is the people already on it.
Look at the leading figures in the language or framework or other
developer community you care about. Where are they most active?
That’s probably where you should be. For whatever reason, Twitter
is currently the watering hole for everyone from frontend web
development to machine learning to infosec. If you’re reading this in
the future, it may have changed, but I doubt it.

The reason I have confidence in Twitter is how central it is to


developer networking. Although there are about 40 million
developers worldwide, the most engaged/connected 1-2 million are
on Twitter. Pull up your favorite conference’s talks, even studiously
anti-salesy ones like Strange Loop. Count the number of times
Twitter was mentioned or shown on screen. I stopped playing when
I realized that too many people put their Twitter handles on the first
slide. Even at Facebook, Microsoft and Google conferences, all
companies with competing social networks, developers offer their
Twitter as their primary means of contact. If that weren’t enough,
I’ve seen thousands of developers get jobs and contracts off of
Twitter.

It’s free. You owe it to yourself to at least try it out. If you don’t end
up liking it, fair deal, at least you gave it a shot. This chapter is
dedicated to helping you get the most out of Twitter,
however long you choose to be involved.

38.1 Getting Started


Everyone basically has the same advice for getting started with
Twitter - follow some good people in your community and follow
who they follow. Some people advise looking at hashtags (e.g.
topical, like #webdev, #swift, #devops or event-based, like
#devopsdays2020) to discover more good follows, but that is too
broad for my taste. Some community leaders, like Tracy Lee, keep
lists of developers they explicitly recommend following.

Projects you use may also have a Twitter account - some merely post
project updates, but others may also retweet interesting work done
by community members that you should check out. Follow people
who work on that project, and follow your peers who are also doing
cool things with it. Here is where you will start to find your
community - people who can inspire, encourage , and challenge
you.

The other thing you can do from the get-go is to set up your profile.
Get as good a Twitter handle as you can - preferably your name,
without underscores, no misspellings, no numbers. Of course it
might already be taken, so you may need to get creative, or pick some
other handle representing what you want to be known for (e.g. there
are a lot of Joe’s in tech, so Joe Previte goes by JavaScript Joe, and
his site is http://jsjoe.io/, so his handle is just @jsjoeio). This is
mainly important because it is the primary way people will call on
you. Don’t worry, you can change it later if you need to.

The other basic element of the profile is selecting a good avatar


picture and name. If in doubt, just use your real name, and a good
picture of you smiling (or a picture of you with a great story to it that
you can tell when asked). This is your “face” online - people will see
it before they see anything else you post, and eventually
subconsciously associate your profile whether or not they want to
read what you have to say. When people talk about you in real life,
they’re likely to use your Twitter name and handle. This transfers
across social networks, and people like seeing the same names and
faces pop up across GitHub, Twitter, YouTube, and Slack. In a world
of default anonymity, consistent identity is king.

Note: See Marketing Yourself, Chapter 39, for more on


this!

In your bio, you should indicate what you do and what you’re about.
This is Twitter’s equivalent of a business card. Offering your job title
and company, and what you do there, can be a good shorthand, but
be sure to double check whether there are any company social media
restrictions you need to abide by (for example, publicly traded
companies often have regulator-imposed restrictions). You can also
choose to get a little more creative and inject some personality
instead - this isn’t LinkedIn after all!

As with anything here, there are reasons to ignore my


recommendations. I am simply offering them as a good place to
start.
38.2 What Do YOU Want?
Twitter is a confusing combination of newsfeed,
microblogging platform, professional network, customer
support, and entertainment channel. It is a massively
multiplayer, open-world, mostly text-based, infinite game without a
manual. It gamifies you with meaningless internet points that
nevertheless can convert into very real real-world value (in terms of
jobs, knowledge, sales, traffic, and even friendships).

Because there are no rules, you should make your own. It is


easy to sign up with the intention of staying informed on
technologies you care about, but then getting sidetracked into an
infinite feed of memes, clickbait, and outrage. The timeline is a slot
machine and you need only scroll down to get the next hit of
dopamine. You can legitimately find yourself in the grasp of social
media addiction, and Twitter is only too happy to feed it. At a
minimum, shut off all email and phone notifications (which are on
by default). If addiction is starting to severely impact yourself or
someone you know, seek help. For example, if you find you cannot
sit and code for two hours without compulsively checking Twitter
when you need to focus.

While you can connect with luminaries in your field and find future
coworkers, remember that “Dev Twitter” is dwarfed by the rest of
the 330 million Twitter users, engaged in every form of human
interest from politics to finance to dog ratings to academic research
to K-pop. Developers you follow also have a range of interests, and
unclear policies about what they will or won’t do on the platform.
Different people use Twitter in drastically different ways - some only
tweet about a single topic, others broadcast every waking thought.
You will have to decide what you want out of Twitter in broadly three
dimensions:

Input: What tweets you want to read


Interaction: When do you engage with other people
Creation: What do you post of your own

Since this is personal social media, you have the right to do


whatever you feel like doing, and it is difficult to give general
advice in book form. But I can offer some high level principles along
with some reasoning as to why they are a good idea, and you can
then decide how much you agree with it.

38.3 What I Want From Twitter


For me, Twitter is not a game of getting followers. Having
reach for my work is good - it’s why you’re reading this after all - but
it is easy to demonstrate that getting a very high follower count is an
anti-goal. Just check out the replies for anyone with over a million
followers. It is a cesspool of the worst of the Internet. Twitter
becomes unusable for most “famous” people. At the extremes, you
will be tempted to compromise your ethics or self respect, like Siraj
Raval.

Your impact also impedes what you can say. Like it or not, with great
audience comes great responsibility, and your audience will be the
first to remind you of it when you step out of line - placing high
stakes where previously there were none, and effectively losing
control of your own public voice. To be rich and famous is good, but
to be comfortable and anonymous (or rather, known-just-enough-to-
be-credible) is better.

Experienced users can also tell when you buy followers, and it looks
dreadful.

The 10,000-100,000 follower range seems like a sweet spot - enough


to open doors for you, but not so much that it starts controlling you
instead.
A better goal for Twitter is to get off Twitter. By this, I mean
that you want your Twitter activity and friendships to translate into
off-platform activity and friendships. It is at its best when the people
and projects that we find on it leads to impact - collaborating on
open source, working together on a company, teaching the next
generation, organizing for social change, or even real life friendships.

I don’t know who first said this, but it rings true of each platform:

Facebook is for past relationships (people you used to know)


LinkedIn is for fake relationships (people you pretend to know)
Twitter is for future relationships (people you will know)

Real human connection is the goal - what Seth Godin might call
Finding your Tribe. You don’t need everybody to know you. You’re
just there to find people who share your interests. Kevin Kwok
compared this to “Tapping a tuning fork and seeing who resonates.”

I experienced this in a real way one weekend when I decided I


wanted to start the first SvelteJS meetup in New York with no
organizing experience and no resources. Within one week I got a
venue, speakers, and 50 people showing up to kick it off, all entirely
via Twitter friends. Since then, it translated into a global conference
attended by thousands of developers across five continents. In other
parts of my life and career, Twitter has translated into countless
speaking, open source, work, and friendship opportunities. My
experience is not special. You can have this too with a few years of
consistent engagement with fellow developers.

38.4 Your Twitter Feed


The first thing you need to get control over is the inflow of
information. This is a matter of signal to noise. Some people may
be a lot “noisier” than others - tweeting about stuff you have no
interest in. It will take a while to learn what people share and what
you want to see.

Unfollowing someone noisy is a good first step, muting and blocking


them is more aggressive. All of these are reversible decisions. I’ve
ended up following people I’ve blocked because I made a mistaken
snap judgement. Other people act as “signal boosters” - retweeting
and quote tweeting important/quality stuff from others. You can
stay on top of interesting but noisy people, by leaning on others who
do the filtering work for you.

I mute the nitpickers, block the outraged, like the kind,


follow the insightful. - Naval Ravikant

Keep in mind that you’re dropping into the deep end. As awesome as
it is to be a fly on the wall listening to experts debating, you’re going
to be missing context and required knowledge to keep up - for now.
You’re also going to see people performing at their best - sharing
their wins and “overnight” success. Keep in mind that their struggles
and sacrifices are real but hidden. It’s normal to feel overwhelmed
when you compare everyone’s best to your worst. Twitter has been
described as an “imposter syndrome slot machine” - take inspiration
and insight, but keep everything in perspective.

Some more beginner-friendly ways to find other developers is to get


involved in Twitter chats. This isn’t a formal feature of Twitter - it
is just a social agreement to come together at a given time and
discuss topics using a shared hashtag. You can then surf by hashtag
and find good questions and answers to riff off. Good Twitter chats
to start with are #devdiscuss, #eggheadchats, and
#codenewbie.

Twitter gives you an algorithmic feed by default (giving you “Top


Tweets” determined by their black box algorithm). You can switch
this to a chronological feed on some apps, but it is anecdotally poorly
supported. While you can’t do much about your Home Feed
(representing everybody you follow), you can stay on top of select
groups of people by using Twitter Lists. You can also stay on top of
high priority accounts by turning on notifications for them (you can
do this while still not letting Twitter interrupt you with push
notifications). For a more advanced workflow, look into using
Twitter Lists and Tweetdeck. I personally refrain from them because
I fear those would lead me to spend even more time on Twitter.

38.5 Join the Conversation


Twitter is very egalitarian - the very promise of the platform is that
anybody can reply to someone and potentially get noticed. However,
the way you reply can deeply affect the relationships you make, the
branding you establish, and your internal emotional state. As you
figure out what kind of people you like to follow, you also build some
idea of the “rules of engagement” you can use for yourself. This next
part concerns how you interact with others.

Probably at the top of the heap in terms of concerns is the balance of


personal vs professional. How much of your “whole self” do you
share in public, or how much do you “stay in your lane”? It isn’t a
binary decision - people want to interact with human beings, not
bots - but there is some balance that will be more right for you than
others. Everyone has a filter - you will need to decide what yours is.

If you need a pointer, my advice is to start off 90% professional,


focused on a small set of topics you work on or are interested in
learning. In your early days, this helps tune your signal-to-noise
ratio clearly to one end, so that people know where you have
Planted Your Flag and know what they will get in following you,
mentioning you, and replying to you. Over time, as you become
more of a known quantity, you can loosen up a bit - people also get
very invested in personal journeys, like mini episodes of a years-long
TV series (starring you!).

The other dimension to think about is your positivity. A huge


swathe of social media is driven by constant outrage - while justified
to various degrees, the majority of it may not be in your immediate
Circle of Influence. Engaging in outrage and criticism might feel
good in the short run, but may negatively impact your mental health
in the long run. You also have the same impact on anyone who
follows you. I’m not saying to never criticise or to never be outraged.
I’m just recommending that you pick your battles. It’s not the
same as pretending that “Everything is Awesome!” either. If
something is truly terrible, by all means, call it out. But remember
that human beings always deserve human decency. Criticise actions,
not people.

If in doubt - stay 90% positive. Take special effort to point out truly
awesome things (e.g. work that other people have done), and
elaborate why they are great. People appreciate when you are a
Beacon of Awesome.

In short: make shit, don’t stir it.

And now let’s talk about creating.

38.6 Being Helpful on the Internet


It goes without saying that you should be posting your original work
- projects you’ve worked on, blog posts you’ve written, talks you’ve
given. Tag and thank people accordingly and they might help you
spread your work. This is going to be a primary reason people follow
you, to get updates and inspiration as you continue to do great work.
As Daniel Vassallo says, “Make something interesting in real life, and
go share it where people are interested in what you did.”
You might feel that you haven’t done anything interesting yet. That’s
fine. One good way to get started is with retweeting content you like
from others. As you become more able to add value yourself you can
start alternating between retweets and your own original content.

There are a great number of other ways you can be helpful on the
Internet:

Answer questions when people need help


Offer insightful responses in discussions
Tag appropriate people (in moderation!)
Ask good questions - thought provoking, not “please debug my
code”
Offer code or design tips - Samantha Ming and Steve Schoger
are great examples
Share great projects and blog posts
Summarize podcasts and talks
Pick Up What They Put Down - give genuine feedback and
build upon things that your mentors are working on.

Take some pointers from Daniel Vassallo, author of Everyone Can


Build a Twitter Audience:

A high-quality tweet:

Is on a topic you have credibility on.


Is on a topic that interests your audience.
Is on a topic that interests you.
Is about something you experienced.
Has concrete details rather than abstract.
Doesn’t ask for anything.

Professional tweets have a few genres, and you could adopt Bianca
Ciotti’s taxonomy of posts and think about how different kinds of
accounts have different mixes of posts. For example, Brand Accounts
like Wendy’s are mostly Delightful, whereas Product Accounts like
GitHub are mostly Transactional.
When you read something great off Twitter (e.g. via Hacker News or
shared internally at work or in an email newsletter), check to see if
the author has shared it on their Twitter. You can track it down
easily by pasting the URL into Twitter’s search, or use a chrome
extension like this to automate that. Give that author positive
feedback, retweet it to your followers (ideally with an elaboration of
what you liked). If the post is not on Twitter, great! That’s
something you should post as a standalone tweet.

It is quite reasonable to get your first two to four thousand followers


without any notable achievement of your own, just by being an active
community participant. The reason I know this is because that’s
what I did for a year while learning to code. Having a good (read:
helpful, informative, or funny) early reply on someone else’s popular
post gives you a lot of exposure.

It may seem silly, but humor is helpful too. Everyone needs to let
loose every now and then, and we all appreciate the occasional joke,
meme, or cat picture. Twitter definitely has a “back of the class” vibe
to it. Not taking ourselves too seriously and making lighthearted
jokes is part of the fun. Some people in fact find a lot of traction
running meme accounts. This is great if you want to be a comedian,
but doesn’t always help you in your professional pursuits.

By far the most rewarding thing is creating something you’re proud


of and sharing it on Twitter. Your followers may not respond to
every one, but do enough good work and it will eventually be
noticed. Just be sure not to hinge your self worth on the vagaries of
Twitter’s recommendation algorithms.

The main idea is that you don’t always want to be a taker in your
various relationships with people you meet on Twitter. You should
give as much, or more, than you get. Ironically, being a chronic
giver will help you get much more out of Twitter too.
38.7 Twitter as a Second Brain

“It’s like Evernote with a slot machine” - Visakan


Veerasamy

One way to consistently add value as part of your Twitter


engagement is to stop thinking of every interaction as a transaction
or a professional interaction. Sure, on some level you could argue for
it, but it probably doesn’t help. Nice people don’t keep score. It’s
better to think of Twitter as the ultimate tool for Learning in
Public.

Tweet out anything insightful that you learn. We’ve discussed


summarizing podcasts and talks, but you can go a LOT further.
Share interesting quotes with attribution to the source. Screenshot
pages of books you read with key sentences highlighted. Record
videos of amazing demos. Learn in Public.

Note that this works for you even with zero followers. Because you
are using Twitter as a note-taking app, you now have a free,
immutable, publicly searchable record of everything you’ve learned.

You might chafe at the format - 280 characters isn’t a lot to work
with. But constraints are sometimes blessings in disguise. In this
case, you are forced to summarize everything, and break up your
summaries to multiple tweets if you need to. This makes every tweet
an interactable and linkable chunk of knowledge - fast to read, and
trimmed of excess fat. Because it’s so short, there’s no point
spending too much time on it either.

It turns out this is great for Future You - and the people who follow
you. All content must be condensed to this tiny format - bigger than
a headline and smaller than a paragraph. It means that everyone
(loosely) has an even playing field, and you aren’t allowed to ramble
on without getting straight to the point. For those familiar with the
Faustian bargain of Google AMP - Twitter is “AMP for thoughts”.
From the consumption side, Twitter is RSS reborn.

What’s great about tying a social network to your note taking is that
your followers have an equal chance of benefiting from your notes, as
they do contributing to them. Instead of a comment section all the
way down at the bottom of a blogpost or YouTube video, they can
chime in at the appropriate spot. I have learned a tremendous
amount from people pointing out related resources and readings.
This informal, spontaneous, collaborative learning is a form of Open
Source Knowledge and can be very powerful for building your
knowledge, reputation, and network all at the same time.

A final tip: Tweet Threading works across time - power users call this
a Zettelkasten or Memex. You can explore that concept on your own.

38.8 Dealing with Haters


At some point you’ve probably seen someone get “cancelled” over
their tweets. Twitter outrage mobs do form, and you need to be
mentally prepared, but don’t let that scare you into not putting out
anything. Canceling doesn’t happen as often as you might fear.
Nobody wants to be the one to “punch down”, so it mostly happens
when you’ve got some amount of following already. That means you
have plenty of time to get your “media training” in.

The basic filter you should run your tweets by is thinking about what
your tweets would look like out of context - because they likely will
be taken out of context. The old-school version of this is known as
the “Front-Page Test” - how would you feel if it showed up tomorrow
morning on the front page of the local paper? It can be funny to
make inappropriate jokes - but there is a line, and when you cross it,
there can be consequences. You can delete tweets, but not memories.

Chances are you won’t be involved in anything as serious as that New


York Times story I just linked. It’s far more likely that you will
attract the occasional loud critic, or be quietly removed from
opportunities that you might otherwise have received.

In these situations it is important that your good intentions are clear


and that you demonstrate that you can receive and act upon feedback
well. Instead of instantly defending yourself, listen to the substance
of the criticism, and address them or apologize accordingly. We all
screw up sometimes, and knowing how to admit you are wrong is a
better strategy than trying to never be wrong. As Tim Ferriss notes,
some version of “I hear you” will diffuse 80% of haters. Just make
sure you mean it.

Recognize the signs when someone is arguing in bad faith:

Nitpicking
Insults
Straw-manning
Goalpost-moving
Deflection

When you do, stop replying. There is no point continuing the


conversation. Also, recognizing these traits will help you avoid
arguing in bad faith yourself.

Learn to disagree respectfully, as intelligently and constructively as


you can. Try to go as far up the Hierarchy of Disagreement as you
can:
De-escalating tension is a great life skill. Nonviolent Communication
is both a book and school of thought used by everyone from
educators to hostage negotiators. You may want to check it out.

Not taking things personally is a superpower. If people are


attacking you as a person, you should block/mute liberally - you
don’t need them in your life. If they are trolls, don’t feed them. But if
people are criticising your work, you don’t have to take it as a
personal affront. You can convert your loudest critics to your biggest
teachers if you are willing to divorce your identity from your work,
and take feedback dispassionately. Words on the Internet won’t
break you - and once you’ve survived one, you can survive more. Lay
a firm foundation with the bricks that others throw at you.
Finally, there is always the option of taking a temporary or
permanent break from Twitter. Some great developers have sadly
been harrassed off the platform. If the mob is affecting your personal
safety or mental health, look after yourself first. Twitter is a nice-to-
have, not an industry requirement.

38.9 Definitely Bad Ideas


Again it is difficult for me to tell you what to do on your own
personal social media, but for those who are just looking to get
started, I can offer a few more pointers:

No racism, misogyny, gatekeeping. Just don’t. Not even


ironic jokes. Your tweets WILL be screenshotted and taken out
of context and you WILL lose jobs and friends. Tread extremely
carefully here. You can delete tweets you shouldn’t have
tweeted, but you cannot unsay things you should not have said.
People remember.
Don’t be a “Reply Guy”. A reply guy is a term for someone
who frequently comments on tweets in an annoying,
condescending, forward, or otherwise unsolicited manner, often
making the conversation about themselves. It doesn’t have to be
gender specific of course, but it is so overwhelmingly done by
men to women that the name stuck. Some women react by
making generalizations of all men, which only drives reply guys
further. Do not engage, do not mansplain, do not defend.
Assume they know it is a generalization, don’t make it worse.
You aren’t going to enlighten anyone with your heroic reply. If
you are concerned about unintentionally coming off as a reply
guy, you can see this thread on the Nine Types of Reply Guy to
fast-forward your social calibration.

One annoying variant is when someone posts work using a


particular framework, and you ask why they don’t use your
favorite framework. Just don’t. Instead, do the work of
translating it to your framework, and they will happily send
people your way when they ask (they always ask).

Don’t share secrets. You will gain access to more and more
privileged information as you grow in your career and network.
This is beneficial to you, but nobody’s going to tell you anything
if you just blab it out to show how cool you are. Of course,
telling company secrets is a fireable offence.
Don’t police others’ Twitter behavior. They have a right to
use Twitter differently from you. If you find yourself getting
upset over a like or retweet or follow or unfollow, you may be
getting too caught up in Twitter drama. We tend to judge
ourselves based on our intentions, but judge others based on
their action. Because Twitter is a cold medium, we even judge
inaction, despite clearly knowing that there are more important
things in life than Twitter.
Imagine explaining why you’re upset to a friend who doesn’t
use Twitter. If all you get is bemused sympathy, you may be
starting to lose a grip on things that actually matter. Let it go.
Respect people’s right to disagree. Of course, genuinely
reprehensible behavior with deserved real world consequence
does happen on Twitter too. It’s a fine line to draw and
nobody does it well. Just remember that there is a line, and
Twitter has no built-in mechanism to tell you when you’ve
crossed it. Meta-outrage will happily consume your life and
mental health if you let it.

Yes, it is ironic giving advice that you shouldn’t tell


others how to use Twitter, in a chapter meant to tell
others how to use Twitter. Unfortunately, this rule is
recursive – people who police others’ Twitter behavior
don’t appreciate being told not to police others’ Twitter
behavior. Therefore, I don’t. Feel free to ignore
everything here – it’s your life, your rules.
Don’t use excessive hashtags. Self-styled “SEO experts”
might tell you to throw on a bunch of hashtags to “increase
discoverability” or something. No serious Twitter user actually
does that. We can Smell Corporate a mile away. Keep hashtags
to a max of three in your bio, and up to two in your tweets.
Ironic usage is, of course, allowed. But be funny or Poe’s law
will strike.

As you proceed, you will figure out your own rules for what you don’t
do on Twitter. I personally use “dinner table rules” - I avoid
discussing politics, religion, climate change, medical conditions, and
other non-finance-or-dev-or-career-related topics (I make some
exceptions for cat pictures and good music). I also refrain from
unconstructive industry debates:

Should you deploy on Fridays?


Should you work nights and weekends to be successful?
Do degrees matter?
Should algorithms/data structures be part of interviews?
Should managers code?
Do 10x engineers exist?
What font is that? What theme is that? What toilet paper do
you use?
Tabs vs Spaces, vim vs emacs?

For others, those topics are a key part of their identity and they have
as much right to discuss them as you do to ignore, unfollow, or mute.

Just remember that you have the right to free speech, but that right
doesn’t shield you from criticism or consequences.

38.10 Final thoughts


This chapter can seem like an overwhelming amount of do’s and
don’ts for something that is ultimately specific to your personality
and career stage. I absolutely agree. Just get started and figure
things out as you go. I offered as many tips as possible because of
how helpful Twitter can be to your professional career and network.

Everyone’s approach to Twitter is going to differ based on personal


preference and productivity beliefs. But the “macros” of your Twitter
time is going to come back to those three things: Input,
Interaction, and Creation. Some people believe in “write only
Twitter” - purely using Twitter as a microblogging platform for
publication. But people can tell when you don’t reciprocate
engagement and treat Twitter as a one-way street. Some others read
too much, hooked on the randomness and dopamine hit of memes
and serendipity. An even balance of 1/3 of time on each is a good
starting point.

As you get more advanced in your usage, there are generalist guides
to Twitter you can lean on. Two well known guides you should check
out are The Holloway Guide to Using Twitter and Daniel Vassallo’s
Everyone Can Build a Twitter Audience.

Support other people. Avoid toxicity. Strive for “Yes, and…”, instead
of “Well, actually…”. Your experience of Twitter will be best when
you try to win hearts instead of change minds.

And be patient - you are building a network that will be with you an
entire career, and maybe lifetime. Your Twitter relationships
will probably outlast any job. Invest accordingly.
Chapter 39
Marketing Yourself (without
Being a Celebrity)

39.1 When to Use This Tactic


Ideally you are constantly marketing yourself, but it’s
understandable if you don’t want it to take over your whole life. So:
pull up this tactic when:

You have done something significant that you are proud of or


enjoyed
Just before some major professional move or project launch
(jobhunting or getting a promotion or even when trying to pitch
an idea)

For the rest of this essay I will primarily talk in terms of marketing
yourself, but the tactics here also work for marketing your ideas and
your projects.

39.2 Introduction
Marketing is important for your career. This isn’t earth-shattering
news: according to a recent survey, 91% of you already agree.

But people tend to doubt their ability to market themselves well.


They see “tech celebrities,” and then they look at themselves, and
they say: “I’m not like that; when I put out a blogpost I don’t get a
billion likes,” or “I don’t want to be like them — that seems hard.”

The mistake here is equating marketing with celebrity. It’s like


saying your favorite restaurant shouldn’t bother trying because
McDonald’s exists. They’re two different (but related) things!

You are a product. You work really hard on making yourself a great
product. You owe it to yourself to spend some time on your
marketing even if you don’t want to be a “celebrity”. Like it or not,
people want to put you in a box. Help them put you in an
expensive, high-sentimental-value, glittering, easy to reach box.
Preferably at eye level, near checkout, next to other nice looking
boxes.

It’s not that hard to be better than 95% of devs at marketing. The
simple fact is that most devs don’t do the basic things that people tell
them to do. I think this has two causes:

It’s not code. Code is black and white. Marketing is shades of


gray.
A lot of advice is very generic. “Blog more”. Devs often need
more help transpiling this to actionable instructions.

Let me try.

39.3 You Already Know What Good


Personal Marketing Is
You may not feel confident in practicing good marketing, but you
should realize you are being marketed at ALL. THE. TIME.
Therefore you can be a world class expert in marketing that
resonates with you. That’s the kind of personal marketing that you
can practice - not that other scammy, sleazy, invasive, privacy
destroying kind.

You’ve almost certainly already benefited from good marketing — by


finding out about something from someone somewhere, that
registered a hook in your mind, that eventually drove you to check it
out, and now you cannot function without it.

And you certainly want to benefit in the other direction: you want to
be that thing that others find out about from someone somewhere.
You want to register hooks in people’s minds. You want to drive
people to check you out. And you want people to prioritize working
with you.

One constraint you have (one that other marketers wish they had) is
that you don’t have to market to the whole world. You can
target the specific audiences you want to work for, and no more than
that. As long as you are well-known in those circles, you don’t need a
public presence at all. Your conversion rate will be higher, and your
stress probably lower (as will be your luck surface area).

39.4 Personal Branding


The topic of marketing yourself is pretty tightly intertwined with
personal branding. If you’re like me, you’ve never really thought
about the difference until right now.

Think of yourself as a plain, unmarked can of soda. You’ve got


awesome fizz inside. Branding would slap a distinctive logo and
colors on the can. Marketing would then be responsible for getting
you, the freshly minted can of Coca Cola, at the top of people’s
minds.
Branding is the stuff that uniquely identifies you.
Marketing gets your awesome in front of people.

Of course, it helps marketing to have strong branding. This is why


they are correlated. In fact, the strongest branding creates its own
market. You don’t want a laptop, you want a Macbook. You don’t
want an electric vehicle, you want a Tesla. You don’t want sneakers,
you want Air Jordans. You can probably come up with more
examples.

It’s really easy to sell to a market in which you are the only seller.
Shooting fish in a barrel you made. Nobody can compete with you at
being you.

The other wonderful feature of personal branding is that it is entirely


up to you to create stuff that uniquely identifies you. There’s no store
somewhere where you can pick a brand off the shelf and put it on like
a new coat. You create it from thin air, with the full dimensionality
of all that human diversity has to offer. Seven billion humans on
Earth doesn’t even come close to exhausting the possible space of
unique selling points you can pick.

39.4.1 Picking a Personal Brand

Your personal brand is how people talk about you when you’re not in
the room.

So naturally, one way to start picking a brand is to listen to what


people have naturally chosen for you.

Caution: you may not like what you hear! That’s OK! That’s what
we’re trying to fix.

39.4.2 Personal Anecdote Time!


If you can get a friend to tell it to you straight, good. If you can get
some people on a podcast talking about you without you there, good.

Or, like me, you can accidentally eavesdrop on a conversation. I


swear I did this unintentionally!

The first time I found out I had established an incredibly strong


personal brand was when I was at a house party with 20 friends and
friends of friends. While in a small group, I overheard someone
behind me talking about me. They introduced me as “that guy that
preaches Learn in Public”. Then, at a later hour, I heard another
person introduce me without me there. Then, again, when joining a
new group, a third person introduced me the exact same way.

I don’t consider myself a personal branding expert. But I understood


instantly that I had pulled off a very important feat. I had written so
much about a topic that multiple people instantly associated me with
that topic. It’s not critical that they say it in the exact same way
(actually that can be a bit creepy/culty) but it’s good enough if they
use the same terms.

39.4.3 Anything But Average

There are other aspects of my personal brand that don’t get as much
attention, but I bring them up front and center when relevant. I
changed careers at 30. I used to be in finance. I served as a combat
engineer in the Army. I am from Singapore. I speak Mandarin. I’ve
written production Haskell code. I sing a capella. I am a humongous
Terry Pratchett fan (GNU Terry Pratchett). I love Svelte and React
and TypeScript. I am passionate about Frontend/CLI tooling and
developer experience. I listen to way too many podcasts. The list
goes on.

But I have this list down cold. I know exactly which parts of me
spark interest and conversation without going too off track.
Therefore I can sustain interest and conversation longer, and in
exchange, people know when to call on me. You should keep a list
too — know your strengths and unfair advantages.

What I do NOT consider my personal brand is the stuff that doesn’t


differentiate me at all. For example, when asked about my hobbies, I
deflect extremely quickly. I identify as a “Basic Bro”: I have my PS4,
and Nintendo Switch, I like Marvel movies and watch the same
Netflix shows you watch. Just like the million other Basic Bros like
me.

Totally basic. Totally boring. NOT a personal brand.

In fact anything not “average” is a good candidate for inclusion. In


particular: Diversity is strength. Adversity is strength. Weakness is
strength. Nothing is off limits - the only requirements are that you
be comfortable self identifying with your personal brand, AND that it
evokes positive emotions as a result.

I’m serious about that second part - You don’t want trolling or
outrage or cruel sarcasm to be your brand, nor do you want to bum
people out all the time. Instead, entertain, educate, inspire,
motivate.

39.4.4 Brand Templates

What I did accidentally, you can do intentionally.

A nice formula for a personal brand is Identity + Opinions. A


personal brand based solely on who you are, doesn’t really
communicate what you’re about. A personal brand based solely on
what you do is quite… impersonal. People like knowing a bit of both,
and you can give it to them in a few short words. Some ideas:

“I’m a former public school teacher and I think the way we teach
people to code can be greatly improved.”
“I was an actual architect and we’re doing software architecture
all wrong.”
“I did my graduate thesis on static analysis and I see a new
generation of tools that make developers faster and less
frustrated.”

I really want to give you more hints on this, but I’m afraid if I gave
more examples I might limit your imagination. Don’t even take this
formula as a given. It’s just one template – Another template is “X
for Y”: “<what you do> for <who you do it for>”. “I create
gorgeous, accessible frontends for DTC ecommerce brands” is a
highly marketable oneliner pitch. “I create backends that scale to
millions of peak concurrent users for live streaming apps.” And so
on. This is a more business oriented template that puts the target
audience/customer squarely in focus.

The point is, being able to pitch yourself (and why people should
care) in a short, consistent way is a powerful weapon in your
marketing arsenal. You can choose to think about this rather than
improvise.

39.4.5 Brand Manifestation

Once you know what you’re about and have nailed down your brand,
it’s time to plaster it all over. You know how Nike pays athletes
millions of dollars just to wear stuff with their logo on it? That’s
what you’re going to do with everything you touch. Top brand
consultants ask: “What are the best ways to connect your values and
unique value proposition to your site?” You should do that with your
portfolio, blog, Twitter, resume, and work output.

Manifest your brand. You don’t have to stay digital. In fact, in a


digital-first world, going physical sticks out. If your product gives
people peace of mind, you might fill your office with aromatic
candles and hand them out as gifts (this is not hypothetical; this has
been done). Shirley Wu is a data visualization consultant; she
printed out her data visualizations as her business cards and hands
them out at conferences. You BET they return 1000x their
marketing expense in memorability and virality.

Be remarkable. Seth Godin (you’re going to hear his name a lot in


marketing, think about why) calls this having a Purple Cow. Design
Pickle, a design agency, picked a unique name, and literally dress
up in pickle suits and hand out pickles at conferences, which
gets them notoriety and business. To manifest their brand, they lean
hard into it, and see great success while having a lot of fun, because
their brand is authentic and consistent all the way through from
their name down to their swag.

39.4.6 Consistency

Humans love consistency. Developers REALLLLY love consistency.

Here’s an idea of how much humans love consistency. We often want


people who are famous for doing a thing, to come on to OUR stage,
and do the thing. Then they do the thing, and we cheer! Simple as
that. There’s so much chaos in the world and having some cultural
touchstones that never change is comfort and nostalgia and joy
bundled up into one. Here’s Seth McFarlane being prodded to do the
voice of Kermit the Frog and Stewie from Family Guy - something
he’s done a billion times on a billion talk shows - but he does it
anyway and we love it anyway. We LOVE when people Do the Thing!

Similarly, when we market ourselves, we should be consistent.


People love seeing the same names and faces pop up again (caveat:
you should mainly be associated with positive vibes when you do
this).

I recommend taking consistency to an extreme level. We


used to do this offline with business cards. Online, our profiles have
become not only our business cards, but also our faces. The majority
of people who see you online will never see you in person. In most
platforms, your profile photo is “read” before your username. Your
username is in turn read before your message. Your message is read
more than any link you drop. And so on. Therefore I strongly
recommend:

Photo. Take a good photo and use the same photo everywhere.
A professional photographer is worth it, but even better can be
something with a good story, or an impressive venue. If
possible, try to show your real face, and try to smile. This
already puts you ahead of 50% of users who don’t understand
the value of this.
Photos are seen before usernames. Examples here and here.
Companies spend millions on their logos. So why shouldn’t
you spend some time on yours? We are irrationally focused
on faces, and we really like it when people smile at us.
Thankfully, because it’s just a photo, it costs us nothing to
smile at everybody all the time. It’s a really easy way to
associate your face with positive emotions. And when we see
you pop up on multiple different platforms with the same
smiling face, we light up! The emotion completely transfers,
and the branding is nonverbal but immediate.
Real Name. Show your real, professional name if possible,
unless your username is your working name. This works
especially well in anonymous platforms like Reddit and Hacker
News, because you are taking an additional step of de-
anonymizing yourself. People respect this.
Username. Your username should be your name if possible (so
people can guess it), or failing which, something you intimately
identify with. You should probably have the same one on most
platforms, so that people can find you/tag you easily. Some, like
myself, will simply use their usernames as their working names
for ever. This can be a branding opportunity as well, similar to
the way musicians adopt mononyms and fighter pilots adopt
callsigns.
Words. You should consistently associate yourself with a small
set of words. Where a bio is allowed, you should have those
words prominently displayed. For example, it doesn’t take a lot
to show up whenever SVG Animation or React and TypeScript
are mentioned. You can set Google Alerts or Tweetdeck filters
for this, and before long you’ll just get associated with those
terms. When you have your own words, like a catchphrase or
motto, and it catches on, that is yet another level of personal
branding.

You will have made it when people start making fun of you. I’m not
100% serious, but I’m at least a little bit serious: Can people make
memes of you, and others instantly get it? If so, you’ve got a personal
brand.

All this personal branding will be 10x more effective when you have a
Domain.

39.5 You Need a Domain


You need a domain.

I mean this in both senses of the word:

1. Set up a site at yourname.com that has all your best work


2. Pick a field that you are About.

The first just makes sense - instead of putting all your work on a
platform somebody else owns, like Twitter, YouTube, LinkedIn, or
another industry blog, have it primarily discoverable on your own
site/blog. This builds your site as a destination and lets you fully
control your presentation and narrative — even off-site, on Google.

Having a distinctive site design is yet another point of personal


branding that, because you are a dev, costs basically nothing.
People come to my site and they remember my scrollbars.

Just understand that your domain and your website are the
center of your identity, so ideally you’d have a good domain
that will last a literal lifetime. - Daniel Miessler

But the second meaning deserves more introspection: I am asking


you to plant your flag. Put up your personal bat signal.

39.5.1 Planting Your Flag

I used to have a very crude, kinda sexist name for this idea: “Be the
Guy.” This is because I noticed how many people were doing this:

The Points Guy is the Internet’s pre-eminent authority on travel


perks (now a 9-figure business)
The RideShare Guy blogged about Ride Sharing for 4 years, and
became the guy Wall Street called upon when Uber and Lyft
IPO’d
Science communicators have definitely caught on to this. Neil
deGrasse Tyson always introduces himself as your Personal
Astrophysicist. But he’s completely owned by Bill Nye, the
Science Guy!

If you skim over “the guy” as a gender-neutral shorthand, the actual


important thing about having “a guy” is that you look better just by
“knowing a guy”. Listen to Barney Stinson brag in “How I Met Your
Mother”:

You know how I got a guy for everything?… My suit guy, my


shoe guy, my ticket guy, my club guy, and if I don’t have a
guy for something I have a guy guy to get me a guy!
This effect is real and it is extraordinarily powerful.

Just by “having a guy” for something, you suddenly feel no desire to


overlap with that person’s domain. You can now focus on something
else. And, to the extent you do that, you are now utterly dependent
on “having a guy”. You’re also extremely invested in your “guy” (aka
go-to person – the gender is not important) being as successful and
prominent as possible, so that you look better by association.

It should strike you now that being someone’s go-to person is very
valuable, and that this also scales pretty much infinitely (you can be
as many people’s go-to person as you want, so long as they rarely
actually call on you).

You get there by planting a flag on your domain, and saying, “this
is what I do” (a framing I stole from an excellent Patrick McKenzie
keynote). People want expertise. People want to defer to authority.
People don’t actually need it all the time, they just want the option
just in case. People love hoarding options. You can satiate that
latent insecurity indefinitely. Most people also define “expertise”
simply as “someone who has spent more time on a thing than I have”
(The bar is depressingly low, to be honest. People should have
higher standards, but they just don’t. This is a systematic weakness
you can – responsibly – exploit.)

39.5.2 Picking A Domain

BTW, are you chafing for career advancement, or want to


be seen as a leader by your peers? My stock advice is, find
an area that is important but under-owned and become
everyone’s go-to expert on that topic. - Charity Majors

You don’t need to get too creative with this one. You want to connect
yourself to something important:
Maybe something people deal with daily but don’t really think
about too much (especially if they know they are leaving
something on the table, like airline points — it’s easy to make
money by helping people unlock free money).
Maybe something people only deal with once in a blue moon,
but when they do it REALLY hurts (so you gain unfair expertise
by specializing in having repeated exposure to rare events across
multiple customers).

There are a bunch of these, so to narrow them down even more, look
out for something you disproportionately love. Look for your own
revealed preferences: Search a topic in Slack or Twitter and see how
often you talk about it. Look up your own YouTube watch history.
An ideal domain for you is something that seems like work to others
but is fun to you.

With everything you love, there are things to hate. Find something
within what you love, that you are ABSURDLY unsatisfied with. That
love-hate tension can fuel you for years.

For any important enough problem, there are plenty of experts. Do


you feel like you haven’t narrowed enough? Shrink your world. Be
an internal expert at your company for your domain. This also helps
you focus on things that bring value to a company, and therefore
your career. It’s also a very natural onramp to being an external
expert when you leave.

39.5.3 Claiming Your Domain

Picking your domain is 90% of the journey. Most people don’t even
get that far. To really clean up, be prolific around that domain.
Show up. To every conversation. I call this “High Availability for
Humans”. In the same way we architect our systems for “High
Availability”, meaning we can send everything their way because they
are very reliable and responsive, we can make ourselves Highly
Available around our chosen domain, meaning everyone can send
questions our way, because we are very reliable and responsive.

By showing up consistently, you become part of the consideration


set. Humans don’t have room for a very wide consideration set. It’s
usually two or three. If we make lists and try really hard, we can get
up to 10 (see the Oscars), but even then there’s really only two or
three that have a real shot.

Think about the last time you purchased soap. You probably buy one
of two brands of soap. But there are 100 on the shelves. They just
weren’t in your consideration set, so they never had a chance.

Your goal, as a brand, is to make it into everyone’s consideration set.


You do that by being Highly Available.

By the way, we also have huge Availability Bias when it comes to


recall. We conflate “top of mind” with “being the best”.

It’s your job to be the best at what you do (and to define what that
means), but don’t stop there. It’s also entirely within your control to
be considered the best, which is what claiming your domain is all
about.

39.5.4 Give Up Freedom — For Now

The flip side of planting your flag is that you shouldn’t plant it
anywhere else. People like to see commitment. It implies, and
usually does mean, that you have no choice but to be a domain
expert. You signal commitment by giving up optionality. This is
100% OK - what you lose in degrees of freedom you gain 10x in
marketing ability.

Author’s note: 10x may be an understatement. Cory House


saw a 15x increase in enquiries when he went from “general
dev consulting” to “helping teams transition to React”.
Same dev, different pitch, 15x opportunities.

The secret is — and don’t tell anyone — that if you pick a domain and
it doesn’t work out, you can still pivot if you need to. Nobody’s going
to hold it against you, as long as you don’t pivot too often.

If you really aspire toward more general prominence, you will find a
much easier time of it if you first prove yourself in a single domain.

39.5.5 Blogging

Blogging is usually mentioned prominently in the “Marketing for


Developers” space — so I feel I must address it here, despite it being
only one part of the general mindset I want you to have.

I will always encourage you to blog — but don’t fool yourself that
merely pushing a new post every month will do anything for you by
itself. That’s just motivational shit people say to get you started.
There’s a lot of generic, scattershot advice about how you should blog
more. These are usually people trying to sell you a course on
blogging. (Except Steve Yegge!)

The fact is blogs gain extra power when they are focused on a
domain. CSS Tricks is a well-known blog in the frontend dev space,
and, as you might guess, for a long time it’s domain was entirely CSS
tricks. (It’s expanded since then). Like everything else you follow,
it’s all about signal vs noise.

Blogs help you get more juice out of that domain name you own, by
constantly updating it with fresh content. You can also use it to feed
that other valuable online business asset: your email list! Overall, it
is just a good general principle to own your own distribution.
Twitter is a form of microblogging. It lets you export data easily and
your content shows up on Google without an auth wall. All good
things. But you’re still subject to an algorithmic feed. Social media
followings are definitely not distribution that you own — but it can
be worth it to make the Faustian bargain of growing faster on a
platform (like Twitter) first, then pivoting that to your blog/mailing
list once you have some reach. Growing a blog/mailing list from zero
with no other presence is hard.

39.6 Marketing Your Business Value


vs Your Coding Skills
39.6.1 Business Value

A large genre of “Marketing for Developers” advice basically reduces


you to an abstract Business Black Box where your only role and value
to the company is to Grow Revenue or Reduce Cost (or Die Trying?).
I call this “Marketing Your Business Value”. This is, of course,
technically correct: Technology is a means to an end, and ultimately
your employer has to cover costs and justify your salary. It is
especially in your interest to help them justify as high a salary as
possible.

Have at your fingertips all the relevant statistics, data, quotes, and
anecdotes for when you solved major product pain points, or
contributed a major revenue generating/cost saving feature. Julia
Evans calls this a Brag Document. You should be able to recite your
big wins on demand, and frame it in terms of What’s In It For Them,
because you will probably have to. Managers and employers are
well intentioned, and want to evaluate you fairly and objectively, but
often the topic of your contributions comes up completely without
warning and out of context, and you want to put yourself on the best
footing every time.
Consider this “applied personal branding” — You’ll know you’ve
succeeded when your boss is able to repeat everything you say you’ve
done to her boss, to advocate for you as full-throatedly as you should
do yourself. Make that easy. If you can, get it down to a concise
elevator pitch — Patrick McKenzie is fond of citing a friend’s
business value as “wrote the backend billing code that 97% of
Google’s revenue passes through.” Enough said.

You might notice some differences between the general form of


personal branding we discussed previously, and this “applied” form
of personal branding. They are different because you have different
goals. With general personal branding, you are trying to be
memorable and relatable. People want to get to know you and
people like the somewhat familiar (But not too familiar! Familiarity
breeds contempt.) With applied personal branding, you are
straightforwardly trying to sell yourself and help others sell you.
Here you want to focus on unique achievements and traits, including
highlighting notable successes.

Be just a little shameless. Nobody’s going to like fighting for you if


you don’t show any interest in fighting for yourself.

39.6.2 Coding Skills

Unfortunately, “Market Your Business Value” is not at all helpful


advice for people who have yet to make attributable business impact
through their work: Code Newbies and Junior Devs. Sometimes,
even as a Senior Dev, you are still trying to market yourself to fellow
Devs. These two situations call for a different kind of marketing that
is under examined: Marketing your Coding Skills.

To do this kind of marketing, you basically have to understand the


psyche of your target audience: developers. What are they looking
for?
There are explicit requirements (those bullet points that companies
list on job descriptions) and implicit requirements (subconscious
biases and unnamed requirements). You can make it very
complicated if you want to, but I think at the core developers
generally care about one thing: that you Do Cool Shit. Some have
an expansive definition of coding skills - even if you’ve done
something totally unrelated, they’ll easily assume you can pick up
what you need later. Others need something closer to home - that
you’ve Done Cool Shit in a related tech stack.

If you’re marketing yourself for employment, then the risk averse


will also want to know that you have also Covered Your Bases —
That, along with the upside potential of hiring you because you’ve
Done Cool Shit, the downside risk of your being a bad hire is
minimized. Do you know Git? Can you solve FizzBuzz? Is your code
readable and well documented? If you have shepherded a nontrivial
project from start to finish, and have people you can ask for
references. If instead you’re just marketing your projects and ideas,
then downside matters less — it’s easy to walk away.

The definition of Cool really depends on your taste, but people’s


interests are broadly predictable in aggregate. If you look at tech
sections of popular aggregator sites like Reddit and sort by, say, most
upvoted posts in the past year, you can see patterns in what is
popular. In fact, I’ve done exactly that for /r/reactjs!

Even if your project is less visual, and more abstract, you still need to
explain to the average programmer why your project is Cool - it
solves a common/difficult problem, or it uses a new technology, or it
has desirable performance metrics. The best Cool Shit will be stuff
you have been paid money for and put in production, and that people
can go check out live. If you don’t have that yet, you can always
Clone Well Known Apps (automatically Cool) - or win a Hackathon
(check out Major League Hacking) - or Build Your Own X from
Scratch, another popular developer genre.
39.6.3 Portfolios vs Proof of Work

Usually the advice is to assemble your Cool Shit in a Portfolio.


Portfolios do two good things and two bad things:

They display your work easily and spells out the quick takeaways
per piece - you control your narrative!
They help you diversify your appeal - if one project doesn’t spark
interest, the next one might!

In this sense it is most like a Stock Portfolio — you’re


diversifying risk rather than adding upside.

They look skimpy without quantity - meaning you feel forced to


Go Wide instead of Go Deep. Quantity over Quality.
They overly bias toward flashy demos (which doesn’t really help
if you’re not focusing on Frontend Dev/Design)

You can and should buy designs if design isn’t a skill you’re
trying to market - it gives your projects an instant facelift
which is generally worth multiples of the <$100 that a
premium design typically costs.

Some people plan their projects based on how they will look on a
portfolio - the dreaded “Portfolio Driven Development.” That lacks
heart, and it will show when you talk about your projects at
interviews and talks. Instead, pursue the projects that seem most
interesting to you, and then figure out how to present them later.
Your interest and enthusiasm when talking about them will go
further than padding the portfolio.

In actual practice, there is a wide variety of devs and dev careers for
which portfolios make no sense at all. Your humble author is one of
them. You can market your coding skills in any number of more
relevant ways, from doing major contributions to Open Source, to
being Highly Available surrounding a Domain, to blogging. The most
general, default marketing skill is definitely blogging. You can write
about any kind of technical topic in your blog.

At the end of the day, what you really want to accomplish is to


demonstrate Proof of Work. Just like in a blockchain transaction,
anyone checking you out should be able to instantly and trivially
verify that you have worked on some very non-trivial things. When it
comes to marketing in public, this is a business card, resume, and
interview all rolled into one.

39.7 Marketing Yourself in Public


The better you have a handle on your Personal Brand, your Domain,
your Business Value or your Coding Skills, the easier time you will
have marketing in public. Everything we’ve discussed up to this
point is useful in public, so I’ll just leave you with a few more
pointers to consider whenever you engage and want to promote
yourself online.

Pick a Channel. The best marketing channels are the ones you’re
already on. Whatever the reason you enjoy it, you have a natural
affinity for it. For me, it was Reddit, and then Twitter. Dev
communities like Dev.to are great too, as are the ones you build on
your own (aka your mailing list). Just be aware that some platforms
are less rewarding than others. For example, Facebook charges you
to reach your own subscribers, LinkedIn is full of spam, and Reddit
and Hacker News don’t show an avatar so you don’t get to imprint
your personal brand. I think Instagram and YouTube are huge areas
of opportunity for developers. Just pick one or two, and go all in. A
lot of people use social media tools like Buffer to crosspost, but I
think this is misguided, because you end up underinvesting in every
platform and everyone can tell you aren’t there to engage.
Don’t Lie. Most things are taken at face value online, and this is
wonderful for getting your message out there. But if you
misrepresent what you were responsible for, or straight up fabricate
something, you will eventually get found out. We like to think that
things live forever online, but I think it’s actually easier to erase
something from Google than it is to undo the reputation damage
caused by a lie. People will hold it against you for years, and you will
not have a chance to defend yourself or atone for your sins. Stephen
Covey calls this the Speed of Trust. Once you lose trust, everything
you say gets run against a suspicion check, and you have to put up
more proof points to be taken seriously. This also applies to
promises of future commitment too — if you simply do what you say
you were going to do, you will stand out.

Don’t Share Secrets. You will gain more privileged information


over time as you grow in your career. This is advantageous to you,
and you should do everything you can to show you are a trustworthy
guardian of that information. People might flatter you to get that
information, or offer an information swap. But the only way to
encourage more information flow to you is to show that you can keep
a secret. If it helps, I’ve started by flatly saying “That’s not my info to
discuss” and people usually get the hint.

I always think about Christopher Lee, who fought in the


British Special Forces in World War II before his legendary
acting career. When pried for information about what he
did in the war, he would say: “Can you keep a secret?
Well, so can I.”

Inbound vs Outbound Personal Marketing. I borrowed this


idea from Hubspot’s Inbound marketing and Seth Godin’s
Permission marketing. Outbound Personal Marketing is what
most people do when they look for jobs. They only do it when they
need to, trawling through reams of job listings and putting their CV
in the pile with everyone else’s. Inbound Personal Marketing is
what you’ll end up doing if you do everything here right: people
(prospective bosses and coworkers, not recruiters) will know your
work and your interests, and will hit you up on exactly the things you
love to do.

Market Like Nobody’s Watching. Because probably nobody is,


when you’re just starting out. It’s OK: this is your time to
experiment, screw up, find your voice. Because marketing yourself
doesn’t ordinarily fall within normal comfort zones, you should try to
do a little more than you’re comfortable with. An aggressive
form of this advice? If you’re not getting complaints about how
you’re showing up everywhere, you’re not doing it enough. This
advice makes sense to some people, and is way too upfront and
annoying for others. We each have to find our own balance — it’s
your name on the line after all.

Market Like One Person’s Watching. Marketing is more


effective when it is targeted at a specific someone instead of just
everyone. Customize your message to an audience that you choose.
People often don’t know what they want or why they care, so focus on
what’s in it for them, and tell them why they care. Quote their prior
selves if possible.

Market for the Job You Want. This is a variant of “Careful what
you wish for… you just might get it.” You’ll probably end up getting
what you market yourself for… so make sure it’s something you
want!

39.8 Marketing Yourself at Work


It’s both easier and harder to market yourself at work. It’s easier,
because it’s a smaller pond, and your coworkers have no choice but
to listen to you. It’s harder, because while you have people’s
attention, abuse will not be tolerated.

If you are obnoxious online, people can mute you and carry on with
their lives. If you are obnoxious at work, it can backfire pretty
directly on you. In particular - always share credit where it’s due and
never take credit for something that wasn’t yours. Of course this
applies in public too, but enough people do it at work that I feel the
need to remind you.

Basics aside, you would probably agree that it’s important to ensure
you get visibility for the work that you have done. Here are some
ideas:

Log your own metrics for significant projects. Before-


after latencies. Increase in signups. Reduced cloud spend.
Uptime improvement. Increased session time. I’m sure your
company has an expensive, comprehensive and well
instrumented metrics logging system (this is a joke - one does
not exist). Don’t trust it. It will fail you when you need it
most, or be unable to tell the story you want told. Hand collect
metrics, links, press coverage. Take screenshots. Collect
qualitative anecdotes, quotes, shoutouts. The best time to do
this is right after you see a good result - you won’t have time to
go back for it. Stick it in a special place somewhere for a special
occasion - like, say, a performance review. If you use Slack, it
can be helpful to make your own Slack channel and Slack
yourself your own notable achievements. This gives you a nice
chronological log of work.
Awesome Status Updates. Status Updates are a humdrum
routine at most workplaces. Most people put no effort into
them. You can buck the trend by making them awesome with
just a little more effort. I’ve seen this “flip the bits” in team
morale – after seeing just one person do this, people realize they
can either continue being boring or join in the effort to do the
best work of their lives.
Unprompted Status Updates. Sometimes a project is
disorganized enough that there aren’t even regular updates
scheduled. Management probably vaguely knows what is going
on, but is too busy to ask for more. You can fill the leadership
vacuum simply by doing your own regular status updates.
Do Demos. Offer to do them every time. This is an internal
marketing opportunity that people regularly turn down because
of the stress of public speaking or because it’s more work. You
don’t even have to wait for an assigned time for demos — since
many workplaces are now at least partially remote and
asynchronous, you can simply put up a short recording of your
own demo! Good demos will spread virally — and so will you.
Caveat: make sure you have the stakeholder approvals you need
before you do this; don’t demo work that isn’t ready for prime
time.
Signature Initiative. I stole this idea from Amazon, but I’m
sure other workplaces have terms for this. Basically, something
that you do on the side at work, that sidesteps the usual org
chart and showcases your abilities and ideas. After pitching the
idea unsuccessfully for two years, Zack Argyle convinced
Pinterest’s CEO to turn Pinterest into a PWA based on a
Hackathon project. This had tremendous business impact and
probably made his subsequent career. That’s a very high bar,
but don’t worry, your contributions don’t have to be that directly
product related. Simpler initiatives I’ve seen might be to find
opportunities to share your interests with fellow devs. Start an
internal book club. A lunch and learn series. If leaders at
Google and Etsy started an external talk series, why can’t you?
Matthew Gerstman started a JavaScript Guild at Dropbox, and
created a newsletter, forum, and event for hundreds of his fellow
engineers to improve their craft. This is wonderful! I did
something similar at Two Sigma, and when I left, my coworkers
said they would genuinely miss my sharing and discussions.

For more ideas on becoming indispensable at work, check out Seth


Godin’s Linchpin. You can find a decent summary here.
39.9 Things That DO NOT MATTER
Appealing to Everybody.
Short-term Optimizations.

Day of the week and time of day that you post


Short term analytics (e.g. weekly traffic)
It’s not really that they don’t matter, it’s just that you should
be working on more evergreen things that make short term
nonsense irrelevant.

Being a Celebrity.

Better to be rich and unknown than poor and famous. If


you can build a successful tech career without being a
celebrity, then absolutely do that — unless you just crave
the attention.
I haven’t mentioned followers once in this entire essay. You
can buy followers and everyone can tell. It looks sad.
Building real relationships with peers and mentors you
respect is way more fulfilling than raw numerical mass
appeal.

39.10 Recap
That was a LOT of high level marketing concepts. Do take a while to
digest them. The last section is going to be a grab bag of tactical
ideas for marketing yourself - after you get the important details in
place.

To recap:

Assemble your Personal Brand, your Domain, and your Coding


Skills/Business Value, then Market Yourself in Public + at Work.
As Troy Hunt often notes in his career advice, good personal
marketing is your Plan B. If you only start doing it when you need it,
it will be too late. Take the time to work on it while the stakes are
low, and you’ll be much better at it when the stakes are high.

39.11 Bonus: Marketing Hacks


Here’s a list of “hacks” that can get you quick wins with Marketing
Yourself. Try them out and let me know how it goes!

Help Others Market. This is so simple as to feel “dumb” even


pointing it out, but it works. You want practice in marketing,
but don’t want to take the full plunge yourself, or don’t feel like
you have something to offer yet. You can find others who are
brilliant but uninterested in marketing, and offer free marketing
help! Here’s Dan Abramov:

I’m pretty good at making demos, but I’m not very


good at original ideas, so what I try to do is find smart
people with really good ideas who are struggling to
explain those ideas and why those ideas matter, and I
popularize them because those ideas deserve that. And
I think people respond to that. And you remember
who you learn from.

Market the same thing three different ways. A great


exercise to hone your marketing skills is to interpret the same
thing three different ways. During a prior job I was forced to
queue up tweets for the same blogpost multiple times, but
because of Twitter rules I wasn’t allowed to repeat myself. I
used to dread it, but then reframed it when I realized that this
was a great exercise in figuring out how to market the same
thing to different audiences. You can do this with your own
personal brand, too. You’re a multidimensional person — if
there is some part of you that connects better with your
audience in context, use that! I recommend Leil Lowndes’ How
to Talk To Anyone for great tips on this.
Crosspost on Industry Blogs. A nice way to get attention for
your work is to do great work on someone else’s platform.
Industry blogs (and newsletters) are pretty much always looking
for quality content. For Frontend Dev, the ones with rigorous
editing are CSS Tricks, Smashing Magazine, and A List Apart.
For Backend, you can try Twilio, Digital Ocean, or Linode’s
blogs.

See more tips in Write, A Lot (Chapter 18)

Collaborations. Related to crossposting and helping others —


you can raise your profile by working with others who already
have very high profiles. Justin Mares bootstrapped his own
profile by coauthoring a book with Gabe Weinberg, Founder of
DuckDuckGo. Same for Blake Masters with Peter Thiel. Ben
Casnocha with Reid Hoffman. If you can work out a non-
exploitative deal where you do a bunch of legwork but learn a
lot, and then copublish with the author, take it. That’s a rare
deal; most often you will just be Picking Up What They Put
Down and working your way toward becoming a peer the slow
way. If they have a meetup, forum, podcast, or whatever
platform, show up on theirs, and then get them to show up on
yours.
Industry Awards. Some people set a lot of store by awards
and certifications. Well regarded programs include Microsoft
MVP, Google GDE, AWS Heroes. As a pure signaling
mechanism, certifications work like anything else works — an
unhappy mix of credible, gamified, and incomplete. But having
a bunch of logos on your site/slides generally helps you, so long
as they are not your biggest claim to fame.
Memorable words/catch phrase/motto. This is used by
companies and reality stars alike, and can be a bit tacky if you
try to, well, make fetch happen, but if you strike a nerve and
capture the zeitgeist you can really carry your message far. Nike
spends billions to make sure that every time you think of the
words “Just Do It,” they come up. You can do that too.
Friendcatchers. Make them.
Visualize your work. If you draw, you can be WORLD
BEATING at marketing. Draw everything you can. Even the
invisible stuff. ESPECIALLY the invisible stuff.

If you say you cannot draw, that’s a lie. Use Excalidraw.

Elevator Pitch. In the old days, you prepared pitch literally


for when you ran into the decisionmaker on a 30-second
elevator ride. A typical template goes something like “if you’re a
<role> who <point of view>, I/my thing <what it
does> in <some eyepopping metric>”. In this day of both
TikTok and podcasts, attention spans are both shorter and
longer than that. You need to tailor your elevator pitch
accordingly. Be able to sell yourself/your idea/your project in:

1 hour
15 minutes
5 minutes
30 seconds
280 characters (a tweet)
(stretch goal) 2 words

Summarize the top three books in your field for your


blog. This idea is often attributed to Tim Ferriss, but I’m sure
multiple people have come up with it. The idea is that you don’t
have to be original to have a great blog: it’s easy to bootstrap
your web presence — and your own expertise — by covering
existing ground. If you do it very well you can rise to
prominence for that reason alone: Shane Parrish and Mike
Dariano built Farnam Street and The Waiter’s Pad purely off
summaries. Then practice marketing your summaries by
syndicating them on Twitter. Make talks out of them at work
and on YouTube.

Further Reading:
flawless app’s Marketing for Engineers repo - a hand-picked
collection of resources for solving practical marketing tasks, like
finding beta testers, growing first user base, advertising project
without a budget, and scaling marketing activities for building
constant revenue streams.
Chapter 40
The Operating System of You
Human “hardware” doesn’t differ by much. We have mostly the
same bodies. We consume and exert the same amount of energy.
70% of us have IQ’s between 85-115. Just a 30-point difference.

Therefore the spectacular variations in human performance we


observe must be due to the “software” we run.

Here’s the kicker: software can be upgraded.

Human beings are works in progress that mistakenly think


they are finished. - Dan Gilbert

40.1 Your “Applications”


Throughout this book, I have endeavored to give you the knowledge
you need to succeed, but I have intentionally structured it in a
nonlinear fashion. The idea is that throughout your 4-8 year early
dev career, you will be able to revisit different parts of this book as
they become relevant.

In other words, I have installed 35 new applications into your


memory that you can boot up and run on demand. I really hope you
use them well.

Tactics are like utilities. You pull them up for a quick reference
when you need them, drop them again when you are done.
Strategies are like big apps. You will almost constantly run them
and all your data is in them, so you take your time to choose. Slack
or Discord? Notion or OneNote? Figma or Sketch? Visual Studio or
IntelliJ?

Principles are like daemons (or services, which is Windows’ much


less interesting word for the same thing). You should always have
them on. They protect you from malware, they prompt you to take
action, they help you handle the thousands of inbound decisions and
choices that you make every day.

If you find any bugs in these apps, send a bug report to me!

But what about your underlying operating system itself? Who is


taking care of that? That’s where your underlying Habits come in.
If your Principles, Strategies and Tactics operate at the
conscious level, then your Habits work on your subconscious.
40.2 Coding Career Habits

I’m not a great programmer; I’m just a good programmer


with great habits. - Kent Beck
Because your habits are automatic, and regular, they have
tremendous compounding power, both good and bad. The
authorities on this are James Clear’s Atomic Habits, Charles
Duhigg’s The Power of Habit, and Stephen Covey’s 7 Habits of
Highly Effective People - they offer more detail than I can do justice
to here, so I recommend you read them.

Your outcomes are a lagging measure of your


habits. Your net worth is a lagging measure of your
financial habits. Your weight is a lagging measure of your
eating habits. Your knowledge is a lagging measure of your
learning habits. Your clutter is a lagging measure of your
cleaning habits. You get what you repeat. - James
Clear

However, it is possible to stretch our “Operating Systems” analogy


further. We can think about how we can take the concrete concepts
we have learned from half a century of programming operating
systems, and apply them to the rather fuzzier goal of running our
careers and lives.

40.2.1 Your “Firmware”

The first category of habit to get control of are the habits that directly
operate your “hardware”: Your physical and mental health.
Family, faith, hobbies, fitness, sleep. If these habits aren’t
maintained well, they can cause a hard-to-diagnose system failure in
yourself.

Sleep is important, not least because we spend a third of each day


doing it. You should know Why We Sleep.
Sleep produces complex neurochemical baths that improve
our brains in various ways. And it “restocks the armory of
our immune system, helping fight malignancy, preventing
infection, and warding off all manner of sickness.” In other
words, sleep greatly enhances our evolutionary
fitness—just in ways we can’t see. - Bill Gates

Don’t forget to sweat your ergonomics too. Consider this basic 4


step checklist from Pieter Levels:

Is your screen at arm length away from you?


Is the top of your screen at the same level as your eyes?
Is your elbow in a 90° rectangular angle on the table?
Are your feet on the ground?

As Scott Hanselman says:

Take care of yourself. This job can destroy your hands,


back, shoulders. Walk, talk, stand, squat, whatever. Your
hands and back and brain are your money. Treat
them right now and they’ll last you 30-50 years.

Repetitive Strain Injury can end your coding career unexpectedly. It


doesn’t feel serious at first, but accumulated damage over years can
be too late to reverse when it starts getting serious. Check my
compilation of RSI resources for more.

40.2.2 Your “External Devices”

The second kind of Habit handles all your interactions with


everything directly connected to you that isn’t actually you. There
are many such angles to consider, but I will pick out Storage,
Networking, and Virtualization as examples.

Modern CPU’s have a series of caches, from L1 to RAM. The further


away you go, the slower the speed of recall. This is loosely analogous
to the human Forgetting Curve. But for true, persistent, durable
storage, we need to store our information on hard disks. For
humans, the most efficient form of this is writing. Therefore the
habit of writing a lot helps you increase the bandwidth of
everything you communicate to your future self and the outside
world. This seems costly in terms of times, but remember that the
speed of most algorithms are drastically improved with just a little
bit of memoization and judiciously stored data structures. Even
context switching becomes a lot cheaper!

Your current brain is good, but see what happens when you build a
“Second Brain” that does everything your first is bad at!

Computers got a lot more interesting once they started talking to


other computers. In fact, there’s a rule for just how much more
interesting: Metcalfe’s Law says the value of your network grows
quadratically! This is why you are well served spending time
building your network, including outside of your current company.
Whatever you choose, whether open sourcing your knowledge,
speaking at conferences, or marketing yourself, will help.

Learning in Public is so powerful precisely because it lets you do


both Storage and Networking at the same time, with a built-in
infinite feedback loop.

Finally, many apps are better easier run inside virtualized containers,
where a constrained environment helps provide better reliability and
scalability. In the same way, you can make your environment
conducive to your productivity. Use an applied understanding of
psychology to turn yourself Indistractable, offering some process
isolation from the diversions of our modern Attention Economy.
Don’t overcomplicate your work rituals – start with simple tricks like
the Pomodoro Technique and work your way up. Learn the impacts
of your work environment on your own productivity and
satisfaction. Remote workers universally report much better
productivity when they have a clear separation between where they
work and where they sleep. Don’t run “work apps” in your “home
container” and don’t intermix personal affairs with work!

40.2.3 Your “Scheduler”

The third category of Habit concerns your scheduler (also known


as a process manager). Does it drop tasks? Does it prioritize low
priority tasks over high priority ones? Is it bad at task switching or
terminating clearly stalled apps? If so, it may be buggy. Get
control of your schedule. Create a single source of truth (per
category), put everything in it, and make time for things that matter.

If you feel constant background anxiety and need a more


prescriptive guide, the classic text on handling this is
Getting Things Done. If that goes too far and you want
something more relatable to developers, see Marc
Andreesen’s Guide to Personal Productivity (balance it with
his 2020 update).

To tell if things matter, defer execution as much as possible: Say


“No” more to your impulses and other people’s requests.
Just like you would want any API to behave, rejecting tasks is better
than accepting and never doing them. Knowing how to say No well
Sparks Joy.

Remember our biases in the Eisenhower Matrix - we often neglect


the Not Urgent yet Important things for the Urgent yet Not
Important ones:
Almost every endeavor of lasting, long term value is Not Urgent, yet
Important. If time is more valuable than money, then the skill of
making time is more valuable than the skill of making money.
Learn to make time.

Strategy matters. Make time for the big strategic decisions in your
life. Time is uneven – Some years will pass like days, but some days
will feel like years. You can’t control when your big career breaks will
happen, but you can periodically step back to reassess the big
picture, everything from Business Strategy to industry
Megatrends to how you are progressing on Career Ladders.
Luck will favor the prepared mind.
When you do work also matters. Your focus and energy do not stay
constant at all times of the day. The science of chronotypes has
found widespread acceptance and it is worth figuring out which you
are. This will help you batch focused work to times when your
mental acuity is high, and leave administrative chores to afternoon
lulls. The best discussion of this I’ve come across is Dan Pink’s
When: The Scientific Secrets of Perfect Timing.

The idea of optimal batching doesn’t just apply to diurnal rhythms, it


also applies to the work week. For example, Sarah Drasner dedicates
the start of her week to meetings, and blocks out large chunks toward
the end of the week for uninterrupted coding. Paul Graham’s term
for this is Maker’s Schedule, Manager’s Schedule – if you have to do
both, try to alternate between modes rather than constantly intermix
them. The road to burnout is paved with context switching.

40.2.4 Your “Kernel”

The last kind of Habit is one I cannot articulate for you. You’ll have
to find it within yourself. It has many names:

Purpose
Vision
Mission
Calling
Intrinsic motivation

But I like the word Drive. Lose it, and you will eventually burn out.
Keep your drive alive. In Dan Pink’s book on the topic, he notes:

As children, we are driven by our inner desires to learn, to


discover and to help others. But as we grow, we are
programmed by our society to need extrinsic motivations: if
we take out the trash, study hard, and work tirelessly, we
will be rewarded with friendly praise, high grades, and good
paychecks. Slowly, we lose more and more of our intrinsic
motivation. Extrinsic promises destroy intrinsic
motivation.

If you were an operating system, this is your equivalent of pid 0.


The “system process” that makes your whole system run. It’s the
process that runs all the other processes. Except instead of calling it
a process, we might call it a principle. When you lack direction,
when you have nothing else to do, when you have too much to do, or
when everything is going horribly wrong, this is the one principle you
fall back onto. We covered some in this book, but there are many
more that could work for you. Pick one, internalize it, make it your
guiding light, pass it on to others.

It took me >30 years to find mine, but you can have it too: Lifelong
learning in public.

“The worst thing you can ever do is think that you know
enough. Never stop learning. Ever.” - Arnold
Schwarzenegger

40.2.5 Recap

I am not the first to make the analogy of humans to computers – it


makes sense that the same algorithms we use to maximize
performance of our machines, are probably also great Algorithms to
Live By. But for our context, we just focused on four categories of
habits:

Firmware: Mental and Physical Health


External Devices: Writing, Networking, and Environment
Scheduler: Prioritization and Scheduling
Kernel: Drive

Nobody is perfect at any of this – so don’t expect this of yourself. But


every little bit you can do to improve your baseline habits helps. You
can backslide on any given day, week, month, or year. It’s fine – just
get back on the horse.

Every action you take is a vote for the type of


person you wish to become. No single instance will
transform your beliefs, but as the votes build up, so does
the evidence of your identity. This is why habits are
crucial. They cast repeated votes for being a type of person.
- James Clear

40.3 The Emotional Journey of your


Coding Career
The ultimate “health check” for your “operating system” is how you
feel. Your emotions and mental health. We haven’t talked much
about it in this book, but how you feel is valid and it matters.
It’s OK to take mental health days off work, and it’s OK to talk about
your feelings and ask for help. Our culture, our mentors, and even
this book, venerates constant learning and learning how to learn.
That is great for personal growth. We have so many workaholics
that the industry constantly stresses work life balance and many
successful people ignore it. We will never be satisfied until we also
learn how to be happy. Despite reading everything in this book,
you’re still going to make strategic mistakes and tactical errors.
Learn to forgive yourself. When we wake up one day and find
what we have is Good Enough, we find peace.
Keep in mind the emotional journey of creating anything great:

We all go through these peaks and troughs. You’ll feel this on any
project, learning any skill, and especially when building a great
coding career.

Everything that makes you you, is your operating system. Take care
of it. It’s all you’ve got.

Acknowledgements
This book owes a lot to friends and reviewers for its existence.
Thanks to:

Daniel Vassallo for the original push to start writing


Joel Hooks and Joe Previte for constant encouragement and
ideas while I write my first book
Nat Sharpe for being a great editor through the ten most
important chapters
Liang Huiqian for organizing research on Engineering Career
Ladders
Dan Abramov for finding and trusting me before almost
everyone else
Quincy Larson for FreeCodeCamp, which helped me start my
Coding Career (and for writing the forward!)
Reviewers

Jeff Escalante for in-depth review of every chapter with a lot


of personal anecdotes thrown in
Robin Wieruch for in-depth review of many chapters with
GREAT suggestions
Gergely Orosz for excellent recommendations on the
Writing Chapter
Tobi Obeck for great feedback on the Negotiation and Spark
Joy Chapters
Samantha Bretous who helped me get in the readers’ heads
with the Preface, Junior-to-Senior, Profit Center, and Mise
en Place chapters
Greg Las for typesetting advice and helping me make the
book so much more presentable.
Many other early reviewers for great comments: Robin
Wieruch, Emma Bostian

All errors that remain are my own. I’m sorry if I forgot anyone here -
there were literally dozens of people who helped me in ways big and
small, and hundreds of people who bought pre-launch that
encouraged me along the way.

And thank you for reading! If you have any feedback, tweet at me or
the book and join the book’s community forum!

You might also like