What Is Software Engineering
Software Engineering Career
Ask a software engineer what they think about mechanical engineering. Chances are they’ll be somewhere between confused and cringing. There’s a fundamental misunderstanding of what engineering is. Over the past fifteen or so years the software engineer profession has been flooded with new people. High wages, job demand, and the draw of hacker culture and pervasiveness of tech in our lives makes this an excellent career to get into. However, in a world where there are exponentially more novices than tenured engineers we can quickly lose sight of what the job of engineering actually is.
For context, I work at a large company that went through two massive hiring pushes hiring over 2000 new engineers often straight out of college. Since those hiring pushes we’ve slowed hiring and began to focus on building expertise, and this is where I’ve seen a troubling trend. Some new engineers want to be productive (who doesn’t) but lack the fundamental understanding of the deep struggle and mental anguish it often takes to level up technical ability.
Junior engineers too often consider the job a burden. They want to be spoon fed an easy path. They blame the technology for being difficult to work with. Their time outside of is packed with other ambitions, hobbies, and unrelated fun.
Recently I was called over to help an engineer. They were looking at an error in the terminal. “I tried to run this and it threw an error”, they remarked. At this moment I knew, this person fundamentally doesn’t understand that debugging and fixing obscure issues is their job.
What is the job of a software engineer
Software engineering at its heart is struggling to find answers. It’s a blank page where you need to figure out a seemingly impossible puzzle. It’s a blinking terminal cursor that gives you no guidance or help where you need to slog through documentation to build the technical tools needed to do the job. It’s painfully going down the wrong path five times before finally figuring it out. It’s taking three days on something you thought would take an hour. At first it’s hard. It’s not fun. But over a long period of time you begin to build the tool set to make some things easier and fun.
Good Code is FUN to write
I firmly believe that great code is damn fun to write and therefore happy engineers are typically writing better code. There’s a wealth of fulfillment, joy, and self expression to be had as a software engineer, and the fact that it’s so difficult to build expertise makes it even more rewarding.
How do we get there faster?
I live for that moment when an engineer is learning something new and the mental model suddenly clicks. It’s the moment they’ve solidified a new tool and effectively made part of their job more fun. To become a good software engineer and have a long and enjoyable career we need to maximize those moments.
Some junior engineers seem to be on an accelerated career path. They level up quickly, they’re well known as subject matter experts, and they’re go-to people for their area of expertise. We can look to these folks for ideas on how to get others on an accelerated trajectory in their software engineering career:
1. Have a side project (or many)
When an engineer comes to a point of expertise where some parts of the job are genuinely enjoyable, it’s natural for those parts of the job to bleed into after hours activities. Those indulging in the gratification of building software outside of work hours are building a hunger for more tools and will often be going through the pain of growth without even knowing it.
2. Thinking is work
The most valuable currency we have in life is our attention. When we catch the bug of fun software engineering a switch in the mind flips. You’ll find yourself thinking of new and interesting solutions or things to look into at all times of the day. This is great but should also be actively encouraged. Pay attention to the background processes going on in your head throughout the day and pull the subconscious back to software when it makes sense. Over time, having software on the mind becomes an incredible joy.
As an engineer becomes a leader this thinking time is critical because you can’t code people. You’ll be working through social situations, how to set context to grow your team, how to maneuver a cross functional or cross-team issue. These require thinking work that often can’t be done during work hours. For this thinking work I highly recommend learning to think in systems.
3. Share your passion
Accelerated engineers have trouble containing their excitement. They love to share with others who are also passionate about the craft as well as taking every opportunity to work with experts.
4. Ask the right questions
Accelerated engineers don’t let their mentor take the keyboard. They understand that there’s little value in learning the solution if they can’t figure it out for themselves later. They want to build their tool set and pave their own path.
As an engineering manager, I take engineer happiness very seriously. We need to be prepared to encounter many junior engineers who have unfortunately been led down the wrong career path. Managing these people into a different career can be difficult but can also be extremely rewarding. Every junior engineer will come to a point where they want to jump on the accelerated path and find fulfillment in the career, or switch careers. Let’s embrace this decision whole heartedly and go boldly forward.