“It’s great to be a software engineer nowadays.” One of my family members mentioned that at our family holiday party. I grinned and responded, “Yea, it is. However, there is a catch.” I explained, “Although the job market has been hot these days, we must keep up with the current trend. If we don’t stop learning in our field, we will soon be replaced by the younger ones.”
That was me preaching about the disadvantages of this career field right after I graduated from college. I was naive and was lost by the abundance of new frameworks and articles about the newest and hottest framework to learn next. I also heard from other more experienced colleagues back then that they needed to learn the newest technology and constantly study college-level algorithms throughout their careers to be competitive and keep up with this on-demand market.
“If you are not learning the newest language, you are afraid of getting unmarketable to the new company.” “If you didn’t get to use the newest framework in your company, you think that you may not be able to easily jump ship to the other company.”
As more and more younger generations, Bootcamp graduates are getting into this lucrative career field, you, as an experienced developer, should become wary that the new generation will have the newest and shiniest tools in their belt - with a much lower price to offer.
After working for several years, I can say that the newer generation will not take over the experience software engineer job.
The answer is that people who will have more experience have two things that the new generation doesn’t have - experience and domain expertise.
There is one thing that people will do ten plus years that new grad doesn’t: experience.
Experience can only be accomplished with time.
A new grad may know the new frontend framework, the new serverless technology that an experienced engineer may not know. However, in executing and scaling a real-world application, one requires experience.
You may think, why is experience required for writing programs? Overall, there are a lot of knowledge and tutorials on how to create a scalable system. As long as you follow either one of the famous tutorials out there, someone who knows how to type and code can easily write something that works.
Yes, anyone can code a chat application. However, leading a project and successfully creating a chat application by communicating through various team members requires experience.
Experience is what separates an engineer and a programmer.
During the project initiation, one needs to communicate why we cannot finish the project in one week to someone who is not technical. We need to understand if there are enough resources to create a scalable chat application successfully. Furthermore, we also need to account for other teams’ project roadmap and be able to sell them why this project is paramount for the company business OKR.
Experience also comes with soft skills. For instance, handling difficult situations with stakeholders when there is a greater push on the deadlines. Staff engineers will know who to talk to the right person for the right task, whereas a regular engineer may need a couple of trials and errors to reach the right person. Staff engineers will know when we should compromise between speed and scale. A staff engineer knows that the duplicate code is cheaper than the wrong abstraction.
They also know good enough methods and bureaucracy to make their idea heard.
For instance, I was trying to gather information about the system. There is no documentation. I pinged engineers who owned the system, and they were willing to explain to me and help me ask other engineers in their team for help. Nevertheless, I didn’t want to bother them and ping the other engineers myself. A seasoned engineer in my team advised me to leverage others if possible instead of bothering more people. Asking the wrong person may make a bad impression that we don’t know what we are doing, especially someone with a more senior title.
Domain expertise is an awareness of the target system’s environment. If you have been working on the marketing platform for a long time, you will know about the architecture, but you will also learn about the domain of marketing.
Gaining domain knowledge requires time and experience.
More experience leads to becoming domain experts.
Why is domain knowledge important?
Any engineer should have basic software engineering skills such as manual, automation tests, and design patterns. However, engineers that have a common sense of the domain can find most of the obvious bugs in the software. Thus, they can release products the right way that won’t cause any catastrophe.
Unfortunately, domain knowledge is not something that you can learn in college. You will need to be involved, create a real-world application, be on-call, and encounter various problems to gain that expertise.
For instance, scaling a company payment system may be tough if hiring an engineer who doesn’t know how payment works. An engineer who experiences outages, such as a third-party payment provider is down, has encountered a lot of the edge cases, such that they know how to test the system the right way.
Someone with less experience may know more technology and can quickly code up something. However, they may also break a lot of the things along the way.
Domain experts are more in demand than technical experts. This is because the advantage of domain expertise can decrease the amount of trial and error made in the system.
An engineer with great domain knowledge knows how to respond to an outage- they better understand different issues or scenarios. They can help deliver superior and faster applications, which helps improve the application’s marketability.
In other words, it requires years of experience to gain that knowledge.
Although engineers with ten plus years of experience may not be able to solve string manipulation Leetcode style questions faster than a new grad, they can lead the team on executing the project in the right way.
Moreover, domain knowledge is one of the reasons why companies are willing to pay big bucks for a software engineer with multiple years of experience. Business wants to have engineers who have done it before to produce the same or even better success.
For experienced engineers, don’t fear getting replaced. As long as you are eager to learn during your job, you will be saved. For engineers that just started on their journey, don’t get distracted with the newest technology, focus on the fundamentals, and be a sponge by constantly learning about the domain knowledge from your field.
Why do you think experienced engineers are in-demand right now?
Comment them down below!