Growth Bottleneck for Web Front-end Engineers
I’ve been job searching for the past few months, mostly looking at web front-end software engineer positions. And I realized that most job descriptions felt like something I’ve done before, and that I could perfectly picture what I needed to do and what problems I might face. Only one project, which made extensive use of WebRTC, felt challenging enough for me to grow a lot.
When I first started working as a software engineer, I didn’t need to think about how to grow. Every single task assigned to me at work was new and challenging, and simply trying hard to accomplish those tasks was enough to let me grow rapidly as a software engineer. But now that was no longer the case. Even at the previous job, I felt that I was stagnating. I thought the problem lay with that project, it being a typical React.js front-end project with nothing new to me. Having read through dozens of job descriptions from other companies, I now believe that this is rather a problem of the web front-end in general.
Web front-end development is by no means easy. To be a competent front-end engineer, you need to be proficient with HTML, CSS, JavaScript/TypeScript and at least one front-end framework, along with reasonable understanding of the Internet, HTTP communication, session management, client-side state management, testing, building and deployment, source code management, security, and performance optimization. I believe that it usually takes between three to five years to reach that point with full-time employment and some personal studies after work.
The problem, however, is that your growth from your job slows down rapidly at that point. The main reason is that, as I’ve noticed, 95% of front-end development can be handled at that skill level. You occasionally meet some challenges in some minor parts of the job, but that’s just some incremental growth, not the explosive one you’re used to. It’s not surprising though: whereas you were growing 10 hours a day with 8 hours from work and 2 hours from personal studies, now you are only growing 2 hours a day.
Unfortunately, challenging front-end projects are truly far and few between. I’m talking about projects like Figma, Notion, Google Docs, and so on. They go beyond typical DOM management and API communication to require extremely responsive and performant UI (Figma), complex DOM manipulation and update (Notion), or real-time handling of conflicting data updates (Google Docs).
This was a significant problem to me. First, like most software engineers, I love meeting challenges, learning new things, and growing as an engineer. Repeseeatedly working on similar tasks eight hours a day started to bore me. Second, I knew that my career would stagnate along with my growth if I kept going like this. Having spent several years in other jobs, I had little time to waste in growing as a software engineer.
As I saw it, there were four different ways to further grow from this point:
- Focus on development speed. I could keep working on similar projects to become efficient enough to finish a project in three months that would have taken me an entire year originally.
- Join challenging front-end projects. I could keep trying to join such rare projects until I get in.
- Branch out to other areas of software engineering. I could learn web back-end or mobile app development, or move onto other software development fields.
- Focus on personal projects. I could contribute to open source softwares, build my own frameworks, create courses, write books, and so on.
It was a difficult decision to make, as all options had pros and cons. I cross out the first option first, because I wanted to learn new things. The second option was the next to go, as I got rejected from the only such project that I could apply to. I decided to go for the third option, looking for a job where I could work on other areas of software, especially web back-end. As of now, the job search is still ongoing but I hope to land a job that meets these requirements.
I had no idea about this growth bottleneck problem before I suddenly had to face it. I hope that other web front-end engineers who read this post would have more time to understand and handle this problem before they face it like I did.