Levels, Titles, and Compensation at Tech Companies
Chapter 3: Learning and Growing
Read Every Day
Mentorship
Imposter Syndrome is Underrated
Having Your Own Project Ideas
Performance Reviews
Stop Worrying About Title
Chapter 4: Changes
On Fear, Confusion, and Self-Loathing: Starting New Jobs
When to Change Jobs
How to Change Jobs
Maintenance is For Suckers: Choosing Teams and Projects
The Transition to Management
Adaptability is Everything
Burnout and Bouncing Back
Part II - Day to Day At the Office
Chapter 5: Professional Skills
Project Management
Effective Meetings
Productivity and Organization
Hiring Engineers: Interviewing From the Other Side of the Table
Chapter 6: Working With Humans
Social Skills
Feedback
Working With Your Manager
Working With Platform Owners
Chapter 7: Shining in an Engineering Organization
Reputation and Personal Brand
Helpfulness
Running Toward Fires
Politics and Political Capital
Professionals Maximize Business Value
Saying No is Not Your Job
Personal Reliability
Knowing Our Limits: The Epistemology of Software Engineering
Chapter 8: Leading Others
Helping a Team Succeed
Mentorship
Chapter 9: Adversity
Managing Your Emotions
Yes, Things are Broken
Conflict Resolution and Dealing With Difficult People
Dealing With HR
Making Mistakes
Chapter 10: Professional Conduct
A Word About Complaining
A Word About Gossip
A Word About Office Dating
Decorum and Political Correctness
Alcohol With Colleagues
Part III - Communication
Chapter 11: A Holistic Look at Engineering Communication
Chapter 12: Technical Writing
Chapter 13: Effective Email
Chapter 14: Describing Problems and Asking Questions
Chapter 15: Public Speaking
Part IV - Technical Skills
Chapter 16: Professional-Grade Code
Chapter 17: Debugging
Chapter 18: Building for Reliability
Chapter 19: Mastering the Command Line
Chapter 20: Operating Real Software
Dan Heller is a Staff Software Engineer in Infrastructure at Uber. In earlier lives, he has led reliability efforts on Uber Eats, built monitoring systems at AppDynamics, helped port iOS to the ARM64 architecture as a Kernel Engineer at Apple, directed the responses to dozens of high-stakes production outages, and managed teams of up to 25 engineers.
Along the way, the author discovered a love of mentorship and had the good fortune to mentor tens of talented engineers. Those engineers inspired him with their hundreds of questions about career paths, technical tradeoffs, and day-to-day effectiveness; when a short blog post on those themes brought a riot of responses about maturing professionals' need for guidance, the author set out to fill the gap with this book.
Software engineering education has a problem: universities and bootcamps teach aspiring engineers to write code, but they leave graduates to teach themselves the countless supporting tools required to thrive in real software companies. Building a Career in Software is the solution, a comprehensive guide to the essential skills that instructors don't need and professionals never think to teach: landing jobs, choosing teams and projects, asking good questions, running meetings, going on-call, debugging production problems, technical writing, making the most of a mentor, and much more.
In over a decade building software at companies such as Apple and Uber, Daniel Heller has mentored and managed tens of engineers from a variety of training backgrounds, and those engineers inspired this book with their hundreds of questions about career issues and day-to-day problems. Designed for either random access or cover-to-cover reading, it offers concise treatments of virtually every non-technical challenge you will face in the first five years of your career—as well as a selection of industry-focused technical topics rarely covered in training. Whatever your education or technical specialty, Building a Career in Software can save you years of trial and error and help you succeed as a real-world software professional.