Prepare for Shortcomings
One thing that has constantly stricken me about life is how interconnected things are. That’s a super vague sentence, let me clarify. What I mean is how interdependent our ideas of life are. From the broadest lens this would be like the relationship between neuroscience and psychology, or law and economics. Clearly both domains depend, in one way or another, on the substance of ideas in the other.
But more directly we can see interdependence in our everyday lives. Values, for instance. Say you want to be a great partner because you just love love, and you love your loved one. Well, if you only ever loved love that probably wouldn’t make you a very good partner. The value itself is incomplete and self-destructive on its own.
There’s nothing abstract about that idea – you can love your partner from Monday to Sunday, but if you can’t play your part to provide the basic necessities of life, you have no chance. To figure out how to provide the basic necessities required to build a home you need other skills: character, strength of spirit, intelligence.
So, ideally, you should have another value: at least realism and a work ethic, but ideally the value of contributing and improving life. Anyways, what does this have to do with engineering?
What has constantly stricken me when I think about the interconnectedness of things is the way that intelligence is connected to strength of spirit. I think there would be no truth without perseverance. That’s really important as an engineer because at some point you will develop the idea that the type of engineer you should be is one that in fact you can never be.
That’s also not abstract. What I mean is, when you begin doing engineering, you’ll eventually come to find what you thought was what it means to be an engineer is not really what it means to be an engineer. And until you figure that out, you’ll be chasing an unrealistic idea about what it means to do engineering.
You probably start with the idea of the best engineers are the people with the most academic facts in their mind, or the capacity to rattle off answers with perfect clarity. Or maybe you think it’s about having the biggest map of the system(s) you work with in your head: more models in your mind = better engineer.
It can be a difficult process to refine your idea of what it means to be an engineer, because it means failing to live up to your own expectations, sometimes in significant ways. But it’s unavoidable. However, if you push through and allow yourself to change your idea of what it means to be an engineer you will find you can still progress and find new ways to grow, even if they weren’t what you originally thought.
Younger engineers will think you’re stupid, and you’ll think older engineers are stupid, but you’ll still all be constantly finding new ideas and new ways of growing. (I guess that’s kind of just what software engineering is at the end of the day anyways: everyone thinking everyone else is stupid.)
But wth does that have to do with code Spencer?
All of that is to say this simple fact: if you’re really going after it and measuring yourself against the right standard (your own intuitive sense of what’s possible) you’re going to fall short from time to time.
What’s more, in big team environments there’s a lot more going on than our own timelines and roadmaps. There are external and interpersonal pressures. “Cross functional” challenges. Market pressures. Combine all these factors and the end result is the sheer unavoidability of undesirable outcomes: late projects, scope adjustments, design reviews which result in scrapping work, etc.
It just will happen. If what you’re doing is complex and hard enough, it’s unavoidable.
That’s not that hard to believe if you think about it. Consider some basic, common-sense facts from your day-to-day experience. Have you ever heard of a doctor who can cure any disease? Or a lawyer who can win every single case regardless of the facts? Or an investor who has never picked a losing stock?
Facing an undesirable outcome from time to time, and sometimes even often, is inevitable, but perseverance can foster resiliency which can shield you from the worst of the negative impacts that would make the bad situations too damaging to pull through. That’s not as meta as it sounds: if you know you will fall short eventually, you can pre-emptively focus on negating the impact of the situation so that when it arises you can manage it and move forward.
You can practice delivering bad news to stakeholders and honing your ability to communicate clearly the difference between a bad outcome based in neglect and carelessness and a consequence of running into a difficult spot while trying your best, due to external circumstances or the unavoidable side-effects of your process of growth as a team.
You can focus on being candid and objective even in adversarial scenarios where people opportunistically try to sink you when you have an undesirable outcome. You can expect to lose some people from your team and write good documentation so the work can be carried out effectively even without the original engineers present.
If you can pre-emptively figure out where things might go wrong and bolster yourself against the negative impacts of the situations that arise when they do, you might not face too many negative impacts at all. You can even extend the idea to forces entirely outside of your control - you can expect to be laid off or your company to go under and practice interviewing and honing your resume writing skills so you can nab a job in the worst case.
You can even learn to understand the basic principles of modern businesses so if you’re treated poorly you can go on to start your own, or find a better fit. The number of times an undesirable outcome need be significantly damaging can be reduced if you can focus pre-emptively on preparation, resiliency and perseverance.
Prepare for shortcomings to win the long run.