Job opportunities

Path to Senior Sw Engineer

Cita
In this post, Carlos G., Software Architect at Oxigent explores the four "cardinal points" for professional growth toward seniority.

In this post, you will learn about the traits required to be considered a Senior Software Engineer (also applicable to Senior Software/Solution/Security/Infrastructure/Other Architects). My aim is not to be exhaustive but to explain these traits in a general and easy-to-understand way.

There is ample literature on this topic. Recently, I read “The Software Engineer’s Guidebook”, which I highly recommend if you are interested in learning more about this topic.

From both literature and experience, I have learned that, as juniors, we often expect to work in isolation, and some might even prefer it. However, as we gain experience, we realize the necessity of working with others to build something greater. Teamwork is crucial for achieving significant goals.

Achieving great goals comes at a cost, and companies have limited resources. Therefore, we must prioritize and focus on the most valuable goals that have a greater impact on the business. Teams that build these solutions consist of individuals with the knowledge to make better decisions and trade-offs. These decisions are usually made by seniors with accountability and ownership.

These teams are not composed solely of seniors; it is common to find juniors within them. These less experienced professionals require mentorship from seniors to improve their skills and ensure tasks are executed correctly (please, do not confuse this with micromanagement).

The Four Cardinal Points

Overall, we can abstract from the previous paragraphs these qualities required by every Senior Software Engineer:

  • Teamwork
  • Hard and Soft Skills
  • Leadership
  • Prioritization by business value

These qualities can be thought of as “The Four Cardinal Points.” Just as the cardinal points guide us in the right direction, these traits are essential for navigating and advancing in your career. I know these are broad viewpoints, as I mentioned in the first paragraph, but I think this abstraction makes them easier to understand. Let’s dive a little deeper into each.

Teamwork

One person usually sees only a few viewpoints. For instance, UX designers are primarily concerned with user interactions and the impact of every color and UI component on the user experience. They might not be as concerned with performance, data protection, or the effort required to implement a feature. This is why modern teams are interdisciplinary, composed of programmers (both frontend and backend), designers, architects, product owners, quality assurance professionals, and more. Each person adds value and perspective to the work, ensuring better deliveries by covering more viewpoints and scenarios that the solution must address.

Recently, I learned about a case where an Engineering Manager often made decisions without considering the ideas or comments of other team members. In one project, this Manager made a decision with the best intentions, but it introduced a security vulnerability. When the team discovered this, they researched and proposed a better alternative. After several attempts to convince the Manager to consider the new information, the Manager fortunately reconsidered and decided to adopt the improved solution.

This example illustrates the importance of teamwork and collaboration. By leveraging the diverse expertise of team members, we can identify potential issues early and develop more robust solutions.

One can acquire and improve this quality through practice. Exercises like pair/mob programming, code reviews, debating ideas, and requesting/giving feedback will help you to progress in your career to a senior level.

Hard and Soft Skills

Senior Software Engineers need to make decisions, propose solutions, and listen to other opinions. To achieve this, they must have knowledge and experience in various technologies, methodologies, collaborative work, and more.

For instance, a modern Software Engineer should be familiar with OAuth, JWT, Architecture Patterns, Design Patterns, Cloud, CI/CD, etc. However, the ability to determine which of these tools to use in a specific situation is a crucial skill that every Senior must possess.

Of course, it’s not just about technical skills. Six years ago, I joined a new project as a Software Architect, in a hybrid role with Engineering Manager responsibilities. In my team, there was a Tech Lead with an excellent background whom I trusted for the project’s success. However, I noticed that although his work was outstanding, he was aggressive towards me, especially when I proposed ideas to the team.

This was the first time I encountered such a situation, and I didn’t know how to handle it. I sought advice from other Seniors on how to manage it effectively. I didn’t want to exclude this person from the team because he was an expert and passionate about his work, which was beneficial for the project. However, his aggressive behavior began to negatively affect team dynamics. Fortunately, with the guidance I received, I was able to address the situation and improve the team’s collaboration.

As we can see, being a great technical engineer is not enough. We must also know how to communicate and collaborate with others to excel in our roles. As Seniors, we must address these challenges and help others develop these essential skills.

Leadership

Everyone starts as a junior, and as we work and experience different situations, we grow in our careers. This evolution process is different for each person. As Seniors, we have the responsibility to train and mentor juniors to make them better for the company. This benefits not only the company but also the Seniors and Juniors involved.

Companies’ products are built by their teams. If the engineers are skilled, they will build better solutions and deliver more value to the business. On the other hand, when a Senior teaches, their own abilities are enhanced, and they often gain new knowledge from the process. Additionally, the juniors who receive this mentorship can progress in their careers to become Seniors. It’s a win-win situation.

Leadership is about influencing people, not just holding a title. It involves influencing others for the benefit of the individuals affected and the company’s mission. There are many books on this subject, but my focus is on the ability of Seniors to positively influence others. Writing blogs, teaching and mentoring juniors, listening to people, receiving feedback, knowing your team, feeling genuine empathy, building real connections, and collaborating to create a great environment are ways to develop and demonstrate leadership.

One of my favorite books that taught me how to begin being a leader is “The Leader Who Had No Title.” I strongly recommend it if you are interested in improving this ability.

Prioritization by business value

As software engineers, especially as seniors, we must always keep in mind the business value we are delivering. This focus helps us prioritize tasks and make better decisions.

Great senior software engineers usually make decisions rationally and pragmatically. This approach sometimes involves assuming technical debt to take advantage of time-to-market opportunities or validate an idea. At times, it may also mean discarding features, reducing scope, or delivering something more critical for the company at that moment.

We need to be flexible enough to accept changes over time because contexts and situations evolve, requiring us to reprioritize and make new decisions swiftly.

The following steps are those I usually follow in my daily work that help me to prioritize:

  1. List tasks: Write down everything you need to do.
  2. Identify value: Mark the tasks that will deliver the most value when completed. If unsure about the value, seek help.
  3. Prioritize: Ask yourself, “If I could only complete one task from this list, what would it be?”
  4. Focus: Start and concentrate on that most important task.

These tools and practices have also helped me:

  • Request For Comments (RFC): This helps us get feedback from other team members, considering the pros and cons of a solution. It enables better decision-making based on data.
  • Attribute-Driven Design (ADD): This methodology helps design solutions by making decisions based on the most critical factors.
  • Quality Attribute Workshops (QAWs): These workshops help gather information about the quality attributes required for the solution or product.

Conclusion

In summary, to be considered a Senior Software Engineer or Architect, one must develop and master four key qualities, referred to as “The Four Cardinal Points”:

  1. Teamwork
  2. Hard and Soft Skills
  3. Leadership
  4. Prioritization by Business Value

These qualities guide and support a Senior Engineer in navigating their role and driving success for themselves and their teams. By focusing on these Four Cardinal Points, you can advance your career and make a significant impact in your projects.

Thank you for reading. I hope you found this post insightful and helpful in your professional development. I invite you to share your thoughts and experiences. What qualities do you think are essential for a Senior Software Engineer? Let’s discuss in the comments!

-Carlos G.

Scroll al inicio

It sets our course as a company and inspires our decisions to achieve the following fundamental goals:

  • Contribute to the successful execution of innovative and transcendent technological projects.

  • Establish fluid communication with our internal and external stakeholders (employees, suppliers, clients and other collaborators).

  • To be the indispensable and trusted partner of our clients for the outsourcing of their high added value activities.

Our mission

The history behind Oxigent

Pixie’s Journey started in 2007 in Dublin, Ireland, with the goal to become a key SAP player on the European contract recruitment market. Firstly focusing on integrators and end-users of SAP solutions, the company decided to expand its expertise in terms of technologies launching new companies and teams in Europe and abroad, and finally setting up a holding company: Kube Partners. Nowadays, the group operates worldwide from its offices in Spain, France and the USA.
Oxigent Technologies was founded as a Kube subsidiary in June, 2019 to offer local tech services to multinational companies. Our clients rely upon Oxigent teams for carrying-out their most strategic activities, and Oxigent consultants are given the opportunity to be actors of the tech revolution that characterizes our world and time. During its first two years of life, Oxigent experienced a relentless growth of its business and talent teams in order to reach more and wider clients, as well as to offer new horizons to engineers eager to continuously improve. At the end of 2021, we were 80 employees and had a 30+ clients portfolio.
In 2022, we expanded our social benefits and sharpened our commitment with sustainability (ODS certification). In 2023, we already were 200+ professionals and could rely on a strong portfolio of more than 50 clients. By the end of 2024, we will hopefully surpass 250 people. We are still at the beginning of our journey and will keep doing consulting in a different way, that's our recipe for success.
2007 - 2019
2019 - 2021
2022 - Onward