© Daniel Heller 2020
D. HellerBuilding a Career in Softwarehttps://doi.org/10.1007/978-1-4842-6147-7_4

4. Changes

Daniel Heller1 
(1)
Denver, CO, USA
 

Changing companies, teams, and projects is one of the most stressful parts of life in a fast-changing industry, especially for a new arrival to the business world. At the very minimum, you’ll make one big change in your career: starting your first job. Right after that, you’re pretty well guaranteed to start asking yourself tough questions. Am I ramping up fast enough? When should I make the move? How can I make the transition clean? What does it mean that I’m in a rut? This chapter will discuss all these challenges of professional transition.

On Fear, Confusion, and Self-Loathing: Starting New Jobs

For six months after I started my first job, I was well and truly sure every day that today someone would finally figure out that I didn’t know anything and summarily terminate me. That is not in the least an exaggeration; I had trouble sleeping, I had visions of future destitution (so far not realized), and I was afraid to tell anyone. Around eight months in, I got to chatting with a colleague who had about a year of tenure on me; he said that he’d felt the exact same thing for the first six months. Many people have told me the same since, including some luminaries who’ve reviewed this book.

Six years later, I started my second job; I had almost the same experience. And a year later, the same. In no case was I, in fact, summarily terminated for incompetence.

All of the above helped me realize that starting a new engineering job is almost always profoundly unsettling. Even in the rare case where you’re brought in as a specialist to do exactly what you do best, you’re walking into a labyrinth of Byzantine development flows , barbarous shell scripts, and missing wikis that blunt technical knowledge—and the comfort you knew as an expert in your old job (or school) is out the window.

So, tl;dr: don’t worry! Because everyone feels that confusion and unease, no (sensible) veterans expect you to know anything, and you certainly will get better. You should expect six months of struggle to arrive at something resembling ease.

Onboarding in Practice

Companies vary wildly in how much they support new hires. I’ve heard rumors that there are companies out there where junior people are paired with a supportive senior person who takes a genuine interest in their development and works hard to nurture insight and expertise. I’ve seen it happen on a few occasions; I flatter myself that as a manager, I even did it once or twice. However, my personal experience has virtually always been that I’ve been tossed into the fire with no support of any kind, and you should expect that to be your experience too. This is, in some sense, a pity, but you’ll be fine, as generations of engineers have.

What you shouldn’t do: whine about not having a mentor or anything else (neither did anyone else), panic, or quit.

What you should do: refuse to stay blocked (people will notice), read as much code as you can (it’s a good way to learn a system), ask questions as carefully as you can (Chapter 14), take the initiative to befriend your colleagues (suggest tea or coffee), take on dirty tasks and debug relentlessly (it’s the best way to learn a system), earn your colleagues’ respect with hard work and helpfulness, and be patient. If you’re lucky enough to have a proper mentor, think hard about the best way to use them (see “Mentorship” in Chapter 3) . Overall, onboarding is an exercise in hard work, patience, and improvisation—in time, you’ll find your way.

When to Change Jobs

Both of my parents repeatedly worked the same jobs for periods of 15 and 20 years; I’ve already changed roles as many times as they did in their whole careers. In software today, changing jobs every two years isn’t too unusual; four years is a generous stay, and a one-year stint is no problem at all on a resume (two or three one-year stints in a row may be a red flag).

The allure of engineering is precisely its constant learning and discovery, which means engineers usually crave novelty. Also, because our field changes constantly, we often keep moving whether we crave it or not; a complacent engineer is an obsolete engineer.

So, I reevaluate my situation every six months, and you should too. If you only consider a move every two years, you’re apt to waste too much time; if you consider it every week, you’ll always be agonizing and never focusing. So, my cadence is every six months. My mental model is that every 6 months or year (or 18 months; the tours get longer as your projects get bigger), I sign up for a “tour of duty”—I commit to myself and to a manager that I will help them achieve some goal, and I go execute on that without a thought to leaving. When the dust starts to settle, I pop my head back up and ask, is it time to make moves?

There are a million dimensions to a good or bad job, from technology to teammates to commute, so I can’t give you any simple algorithm for deciding when it’s time to make moves. However, I can offer a few heuristics that have felt right to me.

The first and foremost heuristic is: if you feel a powerful urge to go, and that urge lasts 2–3 months, you should go; when it’s time, it’s time. That’s the easy case! Unfortunately, it isn’t the common case; more usually you’ll feel a real conflict, you’ll love the people but hate the work, love the technology but hate the manager, etc., etc., etc.

If it seems like the interesting work on your team is done and it is converging on maintenance and small tweaks, it may be time to go. You can stay through one more planning cycle to find out; if three to six months pass, and no one can tell you about a plan that sounds impactful, it is time to go.

Momentary struggle isn’t a reason to quit; the fun and frustration of every job wax and wane, and tough projects wrap up. However, if you really hate coming to work, it is probably time to go; if you go to bed on Sunday dreading waking up on Monday, and that feeling lasts 3 months, it’s time to improve your life

You should keep track of your compensation relative to your peers on that same six-month cadence; if you’re way behind your market wage, make no mistake, you should go get your money. You can start by negotiating if you like, but there’s no shame in taking a big raise at a new job. Similarly, you can sometimes extract a title bump as part of a move—smaller companies are especially likely to inflate titles as a kind of compensation. I personally value that prize minimally for its own sake (see “Stop Worrying About Title” in Chapter 3), but you may consider it if you believe you’re pathologically held back in your current firm, especially from promotion to a terminal role like Senior Engineer.

Finally, if you feel like you aren’t learning, it may be time to go. Of course, not every project is a chance to learn—a good engineer will take one for the team now and again to ship software that needs shipping. However, if you’ve been on the bored bus for three months, and you don’t see any prospect for improvement, it’s time to go find a new challenge.

How to Change Jobs: Going Out in Style

There’s only one way to leave a job: gracefully, gratefully, leaving only beautiful documentation and neatly tied loose ends in your wake.

That’s… pretty tough to do. I’ve almost always gone through two phases when I leave a role or company. First, “I’m going to go out better than anyone has ever gone out”—determination to be your best self and be remembered as a legend. Second, a devastating drop in motivation, making it impossible to do almost anything; that’s also when I start to feel all the resentments and frustrations of this phase in my life swelling in me, leaving me with a sour urge to give everyone a piece of my mind.

That second phase is a real bear. I once saw someone crank out beautiful bugfixes and documentation until 10 pm on his last day, but you can set your sights a little lower; a departure with good documentation, reasonable productivity up to the end, no loose ends, and no complaining will be just fine for your reputation.

What you should aim for, realistically, is
  • Most importantly: Not complaining (to anyone), not bringing others down, and not insulting anyone. The close to part of your career is a natural time to feel strong emotions that will settle with time and perspective; letting them boil over is a great way to burn bridges. Smile, breathe, find your gratitude, and give your notice. Quitting is a natural part of professional life, and it can be done directly and unapologetically—say that you’re leaving, and thank your boss for everything they’ve done for you.

  • Giving at least two full weeks’ notice, not including vacation: More than that is at your discretion, and your employer usually can’t demand it (of course, laws and customs vary by location). Two full weeks of time in the office makes sure your team has ample time to learn what they need to from you.

  • As a top priority: Documenting every single thing that only you know; see “Bus Factor > 1” in Chapter 20. When I’ve hit my exit documentation out of the park, people have reached out to me repeatedly to thank me, and they’ll thank you too.

  • As a secondary priority: Cleaning up tech debt or key bugs that you’re uniquely positioned to fix; fixing a tool or making a nice performance optimization can be a good parting gift to your colleagues.

Maintenance Is for Suckers: Choosing Teams and Projects

Maintenance isn’t really for suckers; it’s an honorable responsibility as well as the only way to master the difference between what looks good in a blog post and what works in a production system. But I want your full attention for an important point: make the moves you need to make to find good projects, and don’t languish in a role where there’s nothing interesting left to do.

When choosing projects, you’re optimizing for three things: learning, resume/advancement, and satisfaction. Balancing these objectives requires a regular explore–exploit cycle over time. If you’re always doing something brand new to you, you’re always struggling with the strain of being a novice and never solving the biggest problems available—which means that you’re never putting a big achievement on your resume or enjoying the satisfaction of building something grand. On the other hand, if you stay in the exact same space for ten years, your marginal learning will asymptotically approach zero.

As for whether you should work on back-end systems, mobile, or web, machine learning or ads, search or reliability, etc., etc., etc., I can’t tell you—times change fast, so ask people you respect what they think is growing (they won’t know either—if they did, they would use it to play the stock market, but it’s a start). Conditional on having chosen an area of focus, I can offer some simple guidelines.

Someday, you’ll be deep and bold enough to have your own vision for teams and companies; I look forward to it. Until then, look for an important problem that needs solving, for a team with a mission that resonates, and for a manager who can convey a concrete desired change in the world and a path to realizing it. That change might be of modest scope (e.g., your company’s developers will be able to move faster), but you should understand what needs to change, care about the result, and believe that you’ll have to build something big to achieve it.

Most of the work done in the universe of software engineering goes to maintaining and modestly enhancing existing systems in streams of small features and bugs. In my opinion, making that your whole job is for suckers, and you should almost never choose to work on a team where the technology is so mature, and the vision so anemic, that your life is organized around a bug queue rather than a story. The fun, the excitement, the variety, the wind in your hair, and the jewels on a resume come from tackling big, coherent challenges. That doesn’t just mean building things from scratch—you might fix performance problems, might improve reliability by fixing a backlog of bugs, might implement a new product vision in existing systems, etc., etc., but until you’re ready to retire in place, your job shouldn’t be just to manage an endless stream of isolated tiny tweaks. My advice: seek out the biggest, most impactful problems you can find, deliver impact, maintain what you’ve built long enough to unambiguously prove success, and clean up any messes you’ve created. Finally, evaluate whether there’s a new vision to tackle; if all that’s left is repeatedly repainting the house, move on; leave what you’ve built in superb condition for others to maintain.

I’ve worried about writing what I just wrote; the world needs its systems maintained, cynicism and selfishness are already a big enough epidemic, and a good career doesn’t come from shirking responsibility—you need to do what you’re asked to do, solve problems thoroughly, and reason about what really matters for your team and company, not build things just because you want to pad your resume. However, I can’t lie: I believe that when what matters on your team becomes permanently boring, it’s time to go to a team where what matters is interesting.

The Transition to Management

Sooner or later, you’re going to think about making the jump to management. If there’s a deeper subject, I haven’t found it, and it’s a subject treated in countless books, some of them even good books.1 This book has no manual for management, but I will offer some thoughts on that transition: what the job looks like, its challenges, and considerations for making or not making the move.

Programmers do real stuff; they write code, they operate systems, and they debug outages. Their days are spent building technology. They enjoy a wonderfully crisp feedback loop; every day, an engineer can type on a keyboard, produce code, see it work, and get a sizzling little dopamine shot to let them know they’re living right. Much of their impact is based on the code they write with their own hands; as they get more senior, it may be by the power of their ideas and persuasion.

Managers do almost everything through the efforts of others. Their daily problems are nurturing humans, organizing projects, and managing themselves. They send status reports, soothe the anxious, write roadmaps, scold the wrongheaded, review spreadsheets and bugs, and on and on; they hide their emotions to create an atmosphere of positivity. They virtually never do something and feel a sizzling little anything; their life is maintenance, hygiene, nudging their teams in the right direction, and waiting anxiously for their engineers to deliver. The relationship between their efforts and their outcomes is much more abstract and slippery, which means that the transition is almost always accompanied by an identity crisis—a struggle to accept life with less direct impact. However, managers have, to a point, authority. Their job is to be accountable for a team, and so they have automatic leverage beyond themselves, the kind of leverage individual contributors may or may not achieve through reason and persuasion. They can decide on roadmap; they’re apt to make consequential calls.

You might consider being a manager if
  • You love people.

  • You’re naturally patient and don’t mind difficult collaborations; you’re emotionally steady.

  • You don’t mind meetings.

  • You’re a good communicator and project manager.

  • You’re chaffing at the limits of what you can do as an IC and looking for more leverage.

You might consider passing on this one if
  • You’re introverted; you hate meetings. Popular opinion now holds that introversion shouldn’t be a disability for management, but I politely disagree from my own experience; you are going to have to spend a lot of time with others.

  • You have trouble managing your emotions or struggle with difficult social situations.

  • You really, really adore coding and can’t see living without it.

I was squarely in the middle; I love people, I’m a decent project manager and communicator, and I was hungry for more scope. For me, being a manager was a wonderful learning experience, about teams, companies, and myself. It pulled the curtain back on bureaucracy and set the record straight on where the capable grown-ups are (nowhere); it exposed me to a much bigger variety of technology and people than I’d had the pleasure to know before; and I did feel a real thrill at seeing a large organization move, feeling that I had set it in motion.

On the other hand, I would have meetings 6 to 10 hours a day, and almost every moment of every meeting, I was dying to escape; I simply can’t be in a conference room that much. I found the wait for others to execute extremely frustrating, and I was hungry to just do things on my own. And I was aesthetically troubled by the need to conceal my anxieties and frustrations so completely (which, to be clear, I believe to be the right thing to do; see “Harmony” in Chapter 8).

You’ll have to decide which half of that story sounds more like you.

Adaptability Is Everything

I started working at Apple in July 2007, which was just after the release of the iPhone but just before it became arguably the most successful product of the twenty-first century. Apple had already existed for around 30 years, and in the software organization, the Mac had been the big deal prior to the arrival of the phone. As the iPhone rose, I watched some engineers go through a painful transition—experts on the Mac software stack, proud and occasionally territorial, gradually became less relevant as iPhone sales soared. I saw two types of responses: the people who saw that times had changed and remade themselves for an iPhone-first world and a minority who clung to the old turf, saying “no” to requests from the iPhone team and gradually becoming less relevant. History has made it pretty clear that adapting to the iPhone was the right move, and clinging to Mac territory, not so much. I learned a lesson watching all that happen in slow motion—adaptability is everything. As technology and business landscapes change, you’ll face frequent choices between exploiting your expertise and status in a previous wave area and giving those things up status to struggle painfully in a new area.

That explore–exploit trade-off is far from simple. If you’re constantly changing teams or companies, you’re never building up enough momentum making big contributions (or, maybe, big money); if you’re always sitting still, your learning will gradually trend to zero. A willingness to struggle and change also doesn’t guarantee anything—you can bet on the wrong technology or just become a victim of industry ageism. The promise I made myself was that I’d never go down clinging to the old ways when things had already changed or become one of the people with tons of experience that can’t execute because they don’t think they have to keep learning and struggling. The need to keep struggling can be a bitter pill—as you put more projects behind you, you want to be able to slow down and enjoy the fruits of your learning, and perhaps we can now and then. However, we chose engineering for the joy of learning and figuring things out, and in a field that’s essentially about change, where your expertise in one technology can be obsoleted quickly by the advent of another, we survive by changing ourselves.

Burnout, Bouncing Back, and Balance

I was once so burned out that when my boss asked me to send a simple email, I sat down at my laptop and couldn’t bring myself to type a single word; there were several weeks where I’m not sure I did a single hour’s real work, though I showed up at the office, sat at my laptop, and tried to will my brain to do something useful. I thought that my career was literally over, that I would have to leave software and find a brand new career if I wanted to keep a roof over my head. As it happened, my career wasn’t over, and I bounced back to write a few more lines of code. This section will discuss work–life balance, the nature and causes of burnout, and my personal thoughts on how we can recover. It’s based entirely on my own anecdotal experience; for science, you’ll have to look somewhere else. Still, I think my observations have occasionally been helpful to colleagues.

The Model

Burnout is the conditioned sense that work is much more painful than it is rewarding so that we come to shy away from it—when stress dominates the rewards of work for long enough that we’re trained to avoid work and only enormous effort can dominate our instinct to get the heck out of there.

I think the equation is as easy to understand as it is hard to apply. All work has rewards and stresses; people have some blend of motivations and some level of resilience to stresses. Avoiding burnout means (a) trying to keep our job rewards stronger than our stressors and (b) refreshing our resilience in our personal lives.

Ideal work is
  1. 1.

    Just hard enough: It offers the satisfaction of overcoming challenges with your unique skills, with neither exhaustive struggle nor excessive ease.

     
  2. 2.

    Profitable: So you have security and comfort.

     
  3. 3.

    Educational and varied: So you feel that you’re growing and investing in your future.

     
  4. 4.

    Impactful: So you care about the outcome of your work.

     
  5. 5.

    Reasonably comfortable: So you don’t suffer from physical discomfort, emotional abuse, social isolation, or surrealist bureaucratic torture every day.

     
  6. 6.

    Reasonably social: So you feel a warmth of human connection with your colleagues.

     

Those rewards are our motivation, the fuel keeping the airplane in the air.

Their inverses are struggle, the grind—stresses like fear of failure, discomfort, financial worry, repetitiveness, futility, and isolation.

Resilience is how intensely we feel those stresses (and, perhaps, how much we can enjoy those rewards)—our reservoir of mental strength and capacity for pleasure. We refill this with both enjoyment at work and refreshment in our free time; the less pleasurable our work, the more important it is to revive ourselves outside.

So, much as you probably figured, if your ratio of reward to struggle is bad enough for long enough, your animal brain will learn to avoid work, and you’ll have to struggle to squeeze effort out of yourself. And, pretty much like you figured, a rich life outside of work pushes back against that process. So, our goals are to make our work rewarding, manage our level of struggle, and defend the sources of refreshment in the rest of our lives.

Struggle Is Constant

Struggle is a constant; as you grow, you just struggle with bigger problems. First it’s to make a single bugfix, then a good program, then a large system, then to lead the efforts of a group, then to have your own grand vision, then to scale that vision to a large, imperfect organization or company, and so on, with the risks of failure growing proportional to our scope. This invariant means that avoiding struggle isn’t a goal—our goals are first to ensure that our struggles are productive (stemming from the difficulty of our goals, not the bugs in our setup), and second to manage the stress of that struggle.

Protecting a Corner of Your Life

Someone once gave me the advice of deciding how many hours per week I was willing to work, drawing a line, and holding it. I’m terrible at this, but I agree with it, and the people I know who do draw such a line seem, if anything, more successful than the workaholics. To paraphrase The Effective Executive, as a knowledge worker, there’s always more to do than can possibly be done; ruthless prioritization is necessary for any success, so we should cultivate it and use it to draw our line. When I came back from burnout, my first, tentative line was—no work on Saturdays, and no work after 10 pm except in emergencies.

I’ve learned to make a constant, mindful practice of defending a corner of my life from work and filling it with both hobbies and friendship, even when I’m excited about work. On the one hand, it will replenish your resilience to adversity. On the second hand, if you do find yourself unbearably weary at work, it will prevent a sense that your life has become empty. This habit comes easily to some people, not to me. The importance of a joyful social life and strong relationships is both obvious and beyond this book’s scope, other than to say that friendship and partnership nourish most people. I will, however, venture to advise you to get and keep, as soon as you can:
  1. (a)

    A hobby you can find at least five minutes a day for

     
  2. (b)

    A whole day per week that you absolutely will not work, no matter what

     

My own experience is that burnout can sneak up on you, and when it does, you can be surprised by how gradually and thoroughly work has expanded to fill your life. That single-mindedness can be exhilarating, but if and when it turns sour, you can feel that your life is hollow and wobbly. The only remedy I know to offer are diligence in nurturing a counterweight of pleasure and satisfaction that work can’t touch.

Not Giving a Hoot

The smallest consequence of failure in software is wasted time, that is, opportunity cost; generally, though, the more valuable work is, the higher the stakes of failure, whether financial, personal, or existential (shout-out to everyone working on global warming and medical devices). I think that means that scaling our impact requires us to gradually accept higher stakes of failure and find comfort with that responsibility; I personally meditate to try to overcome my intense natural risk aversion. I’m not suggesting you quit your job right away to found a self-funded startup; we should strive to take the highest expected value risks we can. But we should try to accept that as we grow, we need to take on more grave and lonelier responsibilities and try not to care too much.

Bouncing Back

Bouncing back is possible, even when you feel that you can’t type a single keystroke more; I think that knowledge alone has been comforting to the people I’ve seen in the worst state of burnout. It may happen on its own, or it may require a radical change of circumstances—I recommend the latter—but it can happen. Don’t give up! Change your job, find a hobby, and be patient—in my case it took about six months to come back from feeling totally useless to feeling strong and eager, but I came all the way back, tougher than before.

My Experience

I had joined a company after a change in my technical focus, was way behind everyone else technically, and put the pedal to the metal to catch up. Before long, I was working literally seven days a week and making progress. A year of seven-day weeks later, I was a manager, managing three teams several time zones apart. While I had one good manager working under me, I had tried and failed to hire any managers in Europe to further partition the work; I had 16 people reporting to me directly. I had allowed my calendar to bloat with meetings until it was jammed from 6 am or 7 am to 5 pm with only an hour or two of being meeting-free in between; I would start my “real work” in the evening. The organization was also complicated and stressful; my team’s mission overlapped completely with a sibling team’s. I was spending about a quarter of my time on the road, living in hotels, eating poorly, and jet lagged coming and going. Finally, I had heard (unfounded) rumors of closing of offices; I worried constantly about having my people fired.

My productivity drifted toward zero, until I fled a meeting about scheduling recurring meetings and told a friend that I couldn’t go back in the building (I did end up going, though it could have been a legendary way to quit); I hit the bottom and stayed there for a while, unable to send those aforementioned emails.

Everything came out fine. I transferred my teams to good homes and took a couple of weeks off, a friend welcomed me to join his team as an engineer, and after maybe four months of more restorative coding, I was back near full steam.

My situation was bad; hindsight hasn’t changed that analysis. But my after-the-fact conclusion is that I mostly had only myself to blame:
  • I triaged very poorly, tried to do every single thing available to do, and totally failed to protect my personal life from work; I almost never refreshed myself, and my productivity steadily declined. I’m quite sure I could have done much more by trying to do much less.

  • I indulged in constant worry about the possible tragedies of failure. I was right to care about the outcomes for my teams but needed to find some way to accept that risk was part of that situation without constant worry.

One of the lessons may be that I’m not built for high-stakes poker; I hope that’s not the truth. I’m sure, however, that I could have done more and better work by prioritizing ruthlessly and setting firm boundaries.

The second, more important lesson, is that you can go lower than you thought possible and come right back; to me, that’s comforting. I hope I’m never that burned out again, but if I am, I’ll know that it’s not the end of my career.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.16.66.206