To be a Software Engineer – you need to be a lifelong student.
You are finishing up your project one morning, feeling motivated. You want to become a 10x software engineer, and you want to feel competent. To become the best that you can be, you think, you need to learn and master the technology that you want to work or will be touching at work. You search on Google on all the technology that you want to work with next, and what you will need to deepen your knowledge in software engineer. You found there are 100 different new technology that you have to learn to do your next project. How can someone learn so many things and implement them gracefully in a short amount of time? You start feeling overwhelmed, but still motivated. You begin to follow some tutorials on how to implement the new technology that you need to learn. You follow through all the tutorials, but you still feel like you haven’t mastered anything.
Your heart started to sink. You began to feel like you might not able to learn so many things in a short amount of time. You might not be able to compete with those developers and become a 10x engineer. Then, you contemplate your life rethink if this career is for you.
I am pretty sure this has happened to a lot of developers. Constant feeling of pressure led to developer burnout.
I recently switched the team from making a customer-centric full-stack application to creating the ETL process, scaling machine learning solutions in my job. Coming from Frontend and doing web development in most of my internships and full-time position, designing and scaling data pipeline and machine learning solutions are a new world to me. I need to learn a new language, understand how to automate jobs, and learn cloud computing.
Further, I need to know how to run machine learning experiments using a programming language with machine learning models. Deploying machine learning solutions into production and optimize the solution for performance and scalability. Not only that, I need to put all these new skills into my belt as fast as possible because my manager expects me to contribute to the team once I transitioned.
If you are me right now, you must be stressed out. How will I be able to learn so many skills in a short amount of time? Aside from learning new skills, how can I keep up with the speed of technology change as a software engineer?
The truth is, I do feel overwhelmed. Knowing that I need to learn everything from the ground up, has put an extreme amount of pressure. Knowing that I need to contribute to the project after transitioning has put me into a fight or flight mode every day. The amount of responsibility is tremendous. I don’t want to underplay the expectation from the new team.
However, the feeling of overwhelm is not foreign to me. It happens when the first time I step into a Computer Science class learning a new language. It happened on my first hackathon when I was puzzled at how a web application works. It occurred to me on the first day of my internships. More likely, the feeling of overwhelming won’t go away after I learn all the things that I need to learn in my new team.
This feeling of overwhelm does not only happen to me. A lot of articles out there talk about how this feeling drives a lot of software engineers into anxiety and depression. Knowing how many new technologies pop out, and released each day, we start to feel like we are playing a catch-up game.
Having to catch up on learning each day is like running in the treadmill with just a few paces faster than the ability of ones can run. It leads to mental and physical at risk and energy exhaustion.
How can you overcome the feeling overwhelm as a developer in a new position?
I want to offer three mindset shifts and actions that helped me to cope with the feeling of overwhelming. Hopefully, it might be helpful without adding too much chaos.
To stop yourself from being overwhelmed, you need to take breaks.
Taking a break doesn’t mean that you are not going forward. Taking breaks means you are recharging, preparing to go even further.
Remember that your life is a race of marathon, not a sprint. Therefore, to achieve long-term success, you have to take care of your physical and, most importantly, mental health. Conserve as much energy as you can and take a break to run longer distances with more productivity.
When I first moved to the new team, there are so many things that I need to catch up. I don’t know anything about Scala programming language, concepts of ETL, concepts of e2e testing, performance load testing, and AWS architecture. Therefore, I spent all day and night after work trying to take as much tutorial and trying to learn as much as possible - only ended up feeling burnout.
I learn my lessons to take breaks from coding one or two days, no matter how I wanted to keep going. I know that my brain needs to rest. I need to recharge so that I can achieve more things with less time.
Often, rushing un-finished tasks and trying to finish multiple tutorials at once will result in slow progress. For instance, I want to learn all the required skills to do my job in the new team as fast as possible so that I can start contributing. However, whenever I work long hours, thinking that I can get more things done, it resulted in the opposite.
Deliberately take breaks is a discipline, but it’s a healthy practice that’s valuable for the long run.
When I discuss with my new manager about how I can learn fast and contribute to the team, he answered, “Don’t rush it. Learn one thing at a time, but master that foundation of one thing before moving forward.”
“One of the reasons we try to do so many things at the same time is that we overestimate ourselves. We think we can achieve a lot in a short period. That’s the so-called planning fallacy, and it’s a common delusion.”, Darius Foroux writes.
Doing multiple things at once will end up not achieving anything.
One thing that I came to realize in having to learn new concepts and new ideas fast is by understanding the underlying foundation.
Once you have a strong foundation, a shiny new framework is just another variation of the same concepts.
React, for instance, creates a new paradigm on web technology by componentize web components. Angular implemented the MVC pattern, where there are models, controllers, and service layers. The underlying concepts are to manipulate DOM elements better and faster development and experience in creating UI components.
Let me give you another example: Being good at algorithm questions relies on how well you know the foundation of computer science and data structures.
Besides doing Leetcode each day and memorize every single interview question that you encounter, start by implementing all kinds of the data structure from scratch. For instance, practice implementing BST(Binary Search Tree) helps you solve BST problems, such as finding the next successor in BST. You can solve the solution quickly by understanding the characteristic of BST.
Slow down, focus on one thing at a time, and focus on the foundation; you can achieve a lot more in the long run.
Don’t know about how to setup Jenkins? You don’t need to be a Jenkins master to do the work. You just need to learn how to set up Jenkins.
Learn as much as what it is required - to make the right action.
Don’t know how to create a button component in React? You don’t need to optimizing component rendering when the purpose is to create a Button Component. Leave optimization when there are requirements to do so.
I used to think that I need to be master in the concepts and technology to do the jobs. However, the reality is, you become a master in the ideas and technology after you do the job.
I realized that it is okay not to know everything. All we need to know is what we don’t know and work one step at a time to learn each piece of the puzzle.
Changing your perception of learning can help alter your mindset. There are no such things as the “correct” way of doing things, but there is the “right” way of doing things, at that time and moment.
“Recognizing your limit is the first step to improving your perception.” – Thomas Oppong
Knowing that it is okay not to master everything and still be able to become a good developer helps me overcome the feeling of overwhelming. It lightened the burden of knowledge overload and created hope and enjoyment in learning new concepts and technology.
We are all trying to live our best life out here. Whatever your struggles, remember that we are right there for you.
Remember to take breaks no matter what you do, because your brain needs some fresh air and rest to absorb more knowledge. Do things one at a time, because every extraordinary thing in life takes time to accomplish.
Last but not least, there is no “correct way” of doing things, but the “right way” of doing things. Shifting your mindset from “I need to master everything before the project starts” to “It is okay not to master everything before the project starts as long as I know what I don’t know” will increase your confidence in looking at a new project.
I hope this mindset shift helps you feel that your life is much more in control.
If you also encounter a similar experience as me and would like to offer some suggestions, please comment below so I can learn from your experience as well.
- The Art Of Rest — Why I’m Taking A (Short) Break - James Prescott - Medium
- How to hustle like a New Yorker - Peter J Thomson
- The true cost of 24/7 hustle culture - The Startup - Medium
- Want to be Smarter, Faster And Better? Recalibrate Your Perception
- software industry - How can I deal with feeling overwhelmed as a new developer in a new position? - The Workplace Stack Exchange
- How to Feel Less Overwhelmed as a Developer - Julia Haigh - Medium