As an engineering manager, my responsibilities include providing support for software engineers in the development of their career paths and also getting involved in hiring new engineers.
Based on my observations of many engineers as their career paths developed, I noticed that some characteristics and skills are fundamental, not only to individual success but also for the team as well.
Technical knowledge is fundamental, but it is not everything
There is no doubt that technical knowledge is fundamental. The more an engineer knows about algorithms, design patterns, tests, databases, system design, microservices, agile processes and a host of other topics, the better he or she will perform. After all, this knowledge is the essential groundwork for producing good software.
The point is, that software engineering is not only about designing architectures and writing code. There is more than one solution to a given problem and in order to define the best solution, you need an in-depth understanding of the purpose of the software, the impact you can expect on business metrics and the criteria for evaluating success.
Depending on the size of the company, a development team might consists of people with different backgrounds, including developers, the engineering manager, product manager, and UX / UI professionals, all collaborating to deliver a great product. Another important factor is that some solutions may depend on other teams or companies. It is therefore crucial that the software engineer knows how to communicate and negotiate with other teams and organization members. Obviously other skills, like communication, result orientation and teamwork, should be considered, not only for the success of project or product development, but also to develop an outstanding career in engineering.
Contrary to what many people might think, software development is an extremely collaborative activity that demands intense communication both inside and outside the team. To illustrate this, here are a few examples:
Ceremonies: Teams that work with agile software development methods go through a series of ceremonies as their development cycles progress, like planning, daily meetings, grooming, retrospective, etc..
These ceremonies allow engineers to state their points of view regarding various aspects of software development; for instance, the best strategy for developing a feature, and in particular, how the development process can be improved.
Knowledge sharing: developers often need to explain to others how they arrived at the technical decisions made throughout the development of a project, or how to use certain new technology concepts.
Ideally, everyone within the team should be able to accomplish any planned task. The best results are obtained if knowledge is widely distributed among team members.
Communication outside the team: In many situations, it is necessary to interact with other teams and corporate departments.
- To define contracts and types of integration;
- To support development or bug fixes;
- To understand requirements;
- To give your work and achievements a higher profile.
Knowing how to listen and express your ideas and opinions in a clear and constructive way is often a challenge. It is also a fundamental part of the maturing process for the entire team.
Remember, because we interact with people from different backgrounds, you need to adapt the way you communicate to suit the person you’re talking to. You don’t need to get into technical details with people who don’t have a technical background. Knowing how to calibrate the level of detail is crucial to good communication. Communication skills take practice and can always be improved.
Engineers are usually under pressure to solve problems rapidly in order to satisfy market demand or get an edge on the competition. This often means that they don’t have time to design and implement an ideal solution for a given problem, resulting in technical debts; snippets of code that would take years to be rewritten may take only a few months to be fully restructured. Nevertheless, if the result is an increase in market share, revenue growth or reduced customer cancellations, it might be worth it.
Making this kind of decision is not easy, but it is necessary. You need to ask yourself what is the best solution to a problem given the time constraints and resources available? Which solution will produce less technical debt and at the same time achieve the desired result? Which solution will be easier to maintain? These are some of the questions that developers can answer based on their experience with other projects, technologies, and architectures. The main objective is to be able to state the pros and cons of each solution, given the market context and expectations.
An in-depth understanding of who the customers are, the maturity of the products, goals and success criteria also make for better technical decisions. It is no coincidence that companies use management methods like Objectives and Key Results (OKR) to link company, team and people goals to measurable results, and to ensure that all team members and leaders are pushing in the same direction.
Whether you used OKR or another method, keeping the focus on goals and expected results gives developers the opportunity to propose the most appropriate solutions to a problem within a given context, boosting the company’s ability to deliver value to the market. In addition, ensuring that achieved results are visible gives engineers a better perception of the impact of their work on the organization’s performance.
“Talent wins games, but teamwork wins championships” — Michael Jordan, professional basketball player.
“Every successful person knows how important they are to the team, but they also know that they would not make it on their own” — Bernardinho, coach of the Brazilian volleyball team.
Given all the technical, interpersonal and business challenges posed during the software development process, knowing how to work as a team is crucial to the success of both the individual and the team.
A team whose individual members are not willing to collaborate and/or find it difficult to communicate will face serious problems. Team members should be willing to listen to each other and be able to state their ideas constructively.
A team of people with different ideas is a healthy team and some conflict is natural. Team members should know how to resolve their conflicts and not allow them to turn into confrontations. In the final analysis, everyone has the same goals: a successful outcome for the project, the team, and the company. Flexibility and keeping up the team spirit are vital if the team is to remain productive.
Developing soft skills enhances the technical contribution of engineers in the software development process. Knowing how to combine your technical skills, such as communication, focus on results, and teamwork, will boost your chances of individual and team success. It also makes you stand out and boosts your chances of promotion.
Getting there is important, but learning along the way is essential.