Becoming a Software Engineer: How to Stand Out

8 min read

Last week, I had the opportunity to speak on behalf of zen8labs at Fortna, an industry giant in the global warehouse and logistics areas. The focus of my talk was “Becoming a Better Software Engineer” and to make it accessible, I will break it down into 3 key parts: 

  • Why should every software engineer strive for improvement? 
  • What should they learn continuously? 
  • How do they learn it? (The methods they can employ for effective learning.) 

If you’re on the lookout for a Software Engineer Roadmap and eager to gain insights from industry experts, let’s read the full article. Whether you’re a beginner starting from scratch or an experienced developer, I believe that the practical knowledge shared in this valuable tech talk can help you a lot in rethinking your growth path.  

You can access the full presentation here. 

Ready?

1. Becoming a Software Engineer: Why They Should Learn Every Single Day?

Drawing from my experiences of observing and engaging with thousands of software engineers, here are the three biggest factors that motivate them to consistently learn and upgrade their skills:

Passion

Many software engineers have shared with me their immense satisfaction in solving problems. For them, becoming a software engineer gives them the joy of resolving issues, which is really addictive. They like the feeling of digging deep into mastering programming languages and crafting optimized solutions. Some have even told me that when they’re coding, it doesn’t feel like work and it’s what I call passion. For these individuals, learning is an intrinsic part of their nature. They constantly seek new challenges and, in the process, engage in research and learning. 

Ambition

Many software engineers I’ve spoken with carry ambitious goals, like creating products that touch billions of lives daily, making a global impact, or reaching higher roles in major corporations such as a tech lead or CTO.  

For these people, learning isn’t just a passion they enjoy – it’s a crucial step toward reaching their ambition. They view daily learning as the pathway to expertise in their roles as software engineers, an essential part of making their goals a reality. 

Fear

In the fast-changing world of IT, where things keep shifting, and new software engineers join every year, keeping up is a MUST. Every year, lots of new tools and techie stuff pop up, and the only way to not fall behind is to keep on learning. Lately, with more people losing jobs, this worry has gotten even bigger. The fear of falling behind makes it clear how important it is to stay on top of what’s happening in the industry. 

Do your motivations align with one of these three? Or do you have another driving force? Please hit the comment section below to share your thoughts! 

2. In the journey of becoming a software engineer, what should we learn every single day

“Yes, I should learn. I want to learn. But what should I learn?” These are common questions I’ve encountered when talking with software engineers. Many engineers often find themselves struggling to identify suitable learning topics, and as a result, they tend to limit their learning to what is required for their jobs (passive learning) rather than actively guiding their own learning (active learning). 

That’s why mapping out your career goals is important cause when defining your goals, it becomes simpler to figure out what you need to learn. Firstly, you should define the destination, which might include future roles like senior software engineer, CTO, CPO, etc.  

Secondly, it’s crucial to assess where we currently stand in terms of our knowledge, skills, and career progress. From my extensive experience in numerous interviews, I’ve found that understanding your current position is a big challenge for many software engineers. Some tend to underestimate their abilities, while others overestimate themselves. For instance, some say they’re ready for team-lead roles but struggle to clearly explain problems and solutions, while effective communication skills are crucial for any team lead. So, knowing where we are in our career journey is super important. 

The areas of focus for a software engineer

Lastly, we need a map to guide us from our starting point to our destination. So, what’s on this map? For me, it’s got four main areas: 

  1. Software Engineering: No doubt, this is the biggie – covering programming, tech know-how, frameworks, platform knowledge, problem-solving, and tooling skills. 
  1. Domain Knowledge: Becoming a software engineer means being a problem solver. A top-notch software engineer needs to know how to smoothly blend their coding skills with industry-specific expertise in areas such as ERP, e-commerce, warehousing, e-learning, operating systems, networking, or development environments. I firmly believe that no one can be considered a senior engineer if they haven’t mastered at least one domain, as the true test of seniority lies in the ability to tackle substantial real-world problems. 
  1. Working Professional: This area focuses on how an engineer operates both independently and within teams, encompassing skills like time management, collaboration, planning, continuous learning, and community participation. 
  1. Leadership: Leadership is more than being in charge. It’s about knowing how to guide others by helping, mentoring, coaching, and having a vision. These skills are key to growing in your career. 

Pick the areas to level up that match where you want to go in your career. For instance, if you aspire to become a team leader, work on improving your leadership skills. However, if you’re set on being an expert, working professionalism is the thing you should focus on. If you want to move up from a senior role, it’s crucial to strengthen your skills in all these areas. 

Here are 4 key components of software engineering: 

  1. Programming: This requires mastering programming languages such as C++, Java, Python, etc., platforms, and frameworks. These are the tools that help us solve problems effectively.
  2. Data structure & algorithm: Think of data structure and algorithm as the building blocks of problem-solving. People might see them as technical terms, but they’re the basics that make our solutions work a lot better, even if they’re not the main tools.
  3. Engineering: This involves understanding how computers and networks operate, familiarity with design patterns, architecture patterns, security measures, compliance standards, etc. Proficiency in these areas ensures we solve problems correctly and efficiently.
  4. Process: Teamwork is crucial in today’s work setups. When it comes to building software, nobody does it alone. It’s important to understand how teams collaborate and the processes that make their teamwork smooth.

3. How do software engineers learn every single day? 

This concept is central to my book, DevUP, which is aimed at software engineers and was published in 2020. The book introduces a framework for the career development of software engineers, incorporating a visual framework consisting of the following components:

Dilemmas

To advance our careers as software engineers, we must grapple with the dilemmas facing both ourselves and our organizations, be it a team or a company. In my advisory role, I often field questions such as, “Should I work for a startup or an enterprise?” or “Should we prioritize clean code or opt for a quick-and-dirty approach?” or “Should we organize our teams by functionalities, domains, or tech stacks?”. Drawing from my experiences working in both startups and enterprises, in Vietnam and abroad, I can affirm that each environment and solution comes with its unique set of advantages and disadvantages. 

For instance, choosing a startup environment offers fewer boundaries and allows software engineers to participate in various aspects of the product development lifecycle. However, it might offer fewer opportunities to work on larger systems. While clean code is generally appreciated, its value diminishes if a product cannot be released on time, missing out on market opportunities. Organizations seek loyal employees, but how can they achieve this if engineers change jobs frequently? In reality, good engineers are often seeking career clarity from their organizations. It’s a dilemma that necessitates mutual understanding from both sides.

Experiments

Knowledge arises from grasping facts and dilemmas, but engineers need practical experience. Experiences are gleaned through active experiments. I strongly advocate that software engineers engage in experimentation across 6 levels, from elements they have complete control over to those they can influence, ranging from small code segments to the broader work environment.

Valuation

Experiments are invaluable, but only if we extract lessons from them. After each active experiment, it is essential to evaluate the results to accumulate knowledge, skills, and progress along the career ladder. A substantial debate in the software industry revolves around understanding the differences between junior, intermediate, and senior engineers and determining how an engineer accurately positions themselves within these ranks. This self-valuation process can be based on market standards, peer feedback, and organizational recognition. I recommend a method that enables every engineer to assess themselves against these benchmarks.

Unlearn

In the learning journey, unlearning is a pivotal phase. Everyone carries past experiences and ideas, but through valuations derived from new experiments, we can refine our prior knowledge and embrace fresh ideas. This process is referred to as a systemic (un)learning cycle. 

Performance

Ultimately, a software engineer delivers results, not just knowledge. Every software engineer requires a clear approach to translating their knowledge into performance, incorporating industry standards, technical skills, and soft skills. 

4. Becoming a Software Engineer: Is It Enough? 

While DevUP offers a well-defined framework for advancing a software engineer’s career, a fundamental question persists: Why should a software engineer embrace an improvement framework like DevUP? Let’s revisit the answers provided in the initial question “Why should a software engineer learn every single day?” – passion, ambition, and fear.

In my observation, there’s a flaw in each of these motivations:

  • Passion: While passion is a perfect instinctive motivator, it’s not a universal driving force. In reality, fewer than 1% of individuals are solely driven by passion. For most people, their hobbies may be misconstrued as passion, and hobbies don’t necessarily offer solace in challenging situations.
  • Ambition: Similarly, not every software engineer harbors ambitious goals.
  • Fear: While fear can be a catalyst in difficult circumstances, it doesn’t sustain motivation in favorable conditions.

Ultimately, what endures as a lasting source of motivation is meaningfulness. Software engineers can find meaning in their work and life through various avenues: the satisfaction of users benefiting from their products in daily life, the quality code they contribute to their organizations, the success of their colleagues whom they support, or simply helping others with their knowledge or resources.  

In my case, I consider myself fortunate. I’ve put in hard work, and I continue to do so, but some individuals work even harder yet earn less than me. Why is this the case? It’s largely due to my good fortune in being part of the IT industry, which has experienced substantial growth recently, affording me more benefits than others. I feel a responsibility to assist others; it gives meaning to my life. That’s why I strive to improve every day, to earn more every day, and to be in a position to help more people every day.

Have you discovered your own sense of meaning?

I’m delighted to see my colleagues at zen8labs persist in writing high-quality articles for this blog. They are driven by a desire to share their knowledge with the community, enabling others to save time by learning from their successes and failures. They have found their meaning, and they are making a positive impact!

And you?

About zen8labs

Born in Silicon Valley,zen8labs stands as a global tech powerhouse, focusing on designing top-notch customer experiences, driving digital transformations, and modernizing enterprises. Backed by a team of industry experts, our goal is clear: to be the forefront technology consultancy worldwide.

We are not just problem-solvers, we are architects of success, bringing cutting-edge solutions for businesses. At zen8labs, innovation is not just a buzzword – it’s the driving force behind our customer-centric approach. 

Tom Nguyen, Co-founder & CEO

Related posts

In Go, slices are one of the most important data structures, providing developers with a way to work with and manage collections of data similar to what we use at zen8labs. In this blog, I will introduce some internal aspects of slices and highlight some pitfalls to avoid when using slices in Go.
5 min read
One of the key strengths of Odoo is its modular architecture, which allows developers to extend and modify existing modules to their needs. In zen8labs' latest blog, we look at some ways that you can use Odoo to your prosperity.
3 min read
For beginners exploring Redux, you'll come across many tutorials using Redux Thunk or Redux Saga to manage async actions. However, here at zen8labs we can give recommendations between using Redux Saga over Redux Thunk in large-scale projects. Read them in our latest blog.
4 min read