Unpopular Opinion: It’s harder than ever to be a good software engineer
Source: Medium |
Working in a startup environment for almost a decade has given me privileged access to a fast-paced culture of innovation, exploration, and a fail-fast approach. I followed the standard progression ladder: intern, junior, mid, senior, and eventually moved to the engineering management track. Over time, many people I grew with later moved on to work at other companies, becoming highly-respected contributors there. It would be fair to say they are good engineers.
Looking back at the journey of my peers, mentees, and my own, it seems harder than ever to be a good engineer.
Defining a good engineer
What does it mean to be an engineer? As software engineers, we are:
- Responsible for translating complex problems into efficient and scalable solutions
- Tasked with analyzing user requirements, designing software architecture, writing code, and testing and debugging software
- Expected to stay on top of trends, seeking new business opportunities and ways to improve existing products
So no — engineering doesn’t equal programming. Sometimes, that is the smallest part. It definitely appears so as one acquires more experience, as shown in the figure below.
What does it mean to be a good engineer? Based on numerous interviews, and supporting my mentees’ progress, I noticed that people with different levels of expertise might give different answers.
Someone just starting out might think it’s the number of languages and frameworks a developer knows. A more experienced engineer might not even care about the language they’re using, instead emphasizing code quality — adhering to all coding principles and conducting QA, while moving swiftly.
Highly experienced engineers place an enormous focus on bringing value. Sometimes we’ll quickly write throw-away code that breaks all the rules to prove a hypothesis; sometimes we’ll spend days writing a couple of lines of mission-critical code. But most days, we are making architectural decisions, discussing mission-critical issues, improving processes, etc. Why? Because often, that brings the most value.
Although there are always exceptions to the rule, we can say that a good engineer is one that efficiently focuses their effort to bring maximum value in achieving a goal.
Growing markets and competition
The tech market is constantly evolving. We have all seen massive successes over the years: from WhatsApp to Uber, Airbnb, and TikTok. While these may be exceptions, such examples often set the north star for people — something they should strive for. This way of thinking puts extra pressure on engineers. They feel stress from inside, thinking they’re doing something wrong, and from outside, with people comparing their company to many competitors.
To succeed in such an environment, companies needed to “move fast and break things,” as the famous Facebook motto says. Today this is more obvious than ever — almost every company is becoming an “AI company.” Everyone is integrating ChatGPT, often for no real reason, without a strategy on how it will bring value.
By moving away from the core principle — how can we bring more value to our customers — and moving towards beating the competition on the hype train, we get engineers building functionalities that are doomed to fail.
World is a confusing place
What should an enthusiast such as myself do to become a better engineer? Apart from the obvious choice of perfecting coding skills by improving clean code and architecture philosophies, nowadays, there are lots of temptations lurking. Learning TypeScript and that one latest framework that changes everything, diving into the world of blockchain and crypto, experimenting with a myriad of AI products… Options are endless.