Professional Documents
Culture Documents
Shawn Swyx Wang - The Coding Career Handbook-Softcover
Shawn Swyx Wang - The Coding Career Handbook-Softcover
Shawn Swyx Wang - The Coding Career Handbook-Softcover
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.
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.
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 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.
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.
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.
With all that disclaimed, it’s time to have some Real Talk about your
Coding Career.
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 8: Principles
A non-linear list of essays discussing ideas for Always-On
Principles that you can use to supercharge your career.
Contents
Foreword by Quincy Larson
Preface: Real Talk
TL;DR ToC v1.0.0
Chapter 1 Part I: Your Coding Career
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
17.1 Logic
17.2 Epistemology
17.3 Applications
17.4 Systems Thinking
17.5 Further Reading
Chapter 18 Write, A Lot
18.1.1 Documentation
18.1.2 Career Capital
18.2.1 Scale
18.2.2 Structure
18.2.3 Power
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?
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
27.4.1 Agencies
27.4.2 Advertising
27.4.3 Subscription
27.4.4 Marketplaces
27.4.5 Gaming
27.5.1 Aggregators
27.5.2 Platforms vs Aggregators
29.1 Definitions
29.2 Examples
29.3 Building Your List of Megatrends
Chapter 30 Part IV: Tactics
Chapter 31 Negotiating
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).
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.
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.
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.
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:
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.
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.
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.
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 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.
But the great thing about jobs is you only need one.
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.
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.
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:
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:
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.
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.
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.
“Convince me how you can help me, and you get into a
special shortlist that almost nobody gets into.” - Daniel
Vassallo
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:
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
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.
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!
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.
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.
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!
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:
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.
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.
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 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!
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.
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!
5.3.1 Code
5.3.2 Learning
5.3.3 Behavior
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.
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.
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.
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.
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).
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).
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.
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.
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.
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.
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:
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.
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
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.
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.
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!
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.
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:
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”.
“If I had asked people what they wanted, they would have
said faster horses.” - Henry Ford on the Model T (possibly
apocryphal)
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!
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.
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:
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:
Recommended Reads:
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.
Recommended Reads:
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.
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
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.
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!
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.
“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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.5 Tips
Some tips for doing it well:
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.
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.
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 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.
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:
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.
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.
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”.
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”.
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).
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?
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.
Some of you are reading and nodding and don’t see what’s wrong.
That’s what’s wrong.
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.
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).
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:
Who doesn’t want to have the best? Who wants to live their life
settling for “alright”?
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.
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.
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.
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.
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.
17.1 Logic
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:
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).
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
There are many approaches to the study of Certainty so I will blithely ignore
most of them and contrast two: Induction vs Deduction.
“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
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.
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.
In the software domain, Will Larson is a leading voice on how to apply systems
thinking to engineering management.
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.
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.
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:
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.
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’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.”
Writing forces you to create rather than consume, and gives you
scale, structure, and power when you do it.
18.2.1 Scale
“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
18.2.3 Power
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).
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:
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).
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.
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.
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):
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.
You can become a very good, well regarded writer by earning a “Do-
It-Yourself PhD”:
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.
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.
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.
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.
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.
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.
“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.
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:
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.
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.
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.
Read Nir Eyal’s Hooked model for more explanation, but basically
we are setting up:
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:
Career Strategy:
Business Strategy:
I’ll use the language of James P. Carse’s Finite and Infinite Games:
Good Strategy:
Bad 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.
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.
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.
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.
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:
Examples:
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.
Probably the best take I’ve seen is Jeff Scott’s reply to me:
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.
“You are not superior just because you see the world in an
odious light.” - François-René de Chateaubriand
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.
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.
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.
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
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.
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
Resiliency
Velocity
Interoperability
Simplicity
Security
Maintainability
Performance
Compatibility
Availability
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%.
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.
25.2 Definitions
Alright, I’ve covered my ass. Here goes:
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.
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.
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.
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.
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.
Technical Competence
Execution
Communication
Influence
Technical Competence
Execution
Communication
Comfortably communicates complex issues to diverse audiences
inside & outside the company.
Proactively identifies and remedies communication gaps and
issues.
Influence
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.
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.
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:
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.
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.
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.
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.
27.4.3 Subscription
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).
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.
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
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:
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.
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.
27.5.1 Aggregators
Levels of Aggregators:
It can help to situate these two models by contrasting them. I’ll point
you to Ben’s writeup on his site:
I haven’t any room left but want to share a few more interesting
dynamics you can investigate on your own:
This chapter is dedicated to giving you some basic ideas for where to
start.
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.
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.
It turns out that not all the transitions between stages are equal.
Geoffrey Moore nailed this dynamic in his seminal book: Crossing
the Chasm.
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.
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 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.
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.
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.
A few final tips for keeping tabs on your ecosystem, staying focused
while keeping up to date:
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.
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.
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.
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.
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.
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.
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.
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.
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.
Don’t forget that you can also make your fonts responsive, using the
font-size: calc(1rem + 2px + ((100vw - 550px) /
250)) trick.
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.
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!
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.
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.
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
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
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!
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.
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.
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).
Applied to real life: You call out your own weakness, so that others
can’t.
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
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
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.
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/
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).
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.
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.
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 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!
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!!!).
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.
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.
You can see this 12 Minute Video of How I Write CFPs explaining
my process below
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.
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:
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 (!).
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.
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.
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.
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.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.
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.
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.
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.
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.
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.
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.
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.
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!
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:
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.
I don’t know who first said this, but it rings true of each platform:
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.”
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.
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.
There are a great number of other ways you can be helpful on the
Internet:
A high-quality tweet:
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 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.
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
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.
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.
Nitpicking
Insults
Straw-manning
Goalpost-moving
Deflection
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.
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:
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.
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)
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.
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:
Let me try.
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).
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.
Your personal brand is how people talk about you when you’re not in
the room.
Caution: you may not like what you hear! That’s OK! That’s what
we’re trying to fix.
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.
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.
“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.
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.
39.4.6 Consistency
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.
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.
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
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:
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.)
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.
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.
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.
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.
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.
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
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.
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.
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
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!
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.
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.
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!
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:
Being a Celebrity.
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:
1 hour
15 minutes
5 minutes
30 seconds
280 characters (a tweet)
(stretch goal) 2 words
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.
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?
If you find any bugs in these apps, send a bug report to me!
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.
Your current brain is good, but see what happens when you build a
“Second Brain” that does everything your first is bad at!
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!
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 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:
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
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:
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!