Over the past few years, I had the pleasure of working with many software engineers in different capacities. Here is the list I came up with to use as the reference to give feedback to software engineers. The main purpose is to ensure most of the aspects are covered so that team members grow, the team is high-performing, and the company is moving towards its vision. The skills are divided into categories so that each category can be evaluated in details.
I will be updating this list as I learn more in my leadership journey.
- Constantly learning new approaches to make our life easier (books, tools, libraries, new language features, etc..)
- Bring a new perspective to the codebase. Use design patterns if necessary or new algorithmic approaches to find the things that we are not doing optimally and improve them.
- Develop confidence and technical ability to architect and develop a feature from A to Z using the best practices.
- Use the broken window theory to constantly improve the codebase.
- Improve code delivery time.
- Improve the quality of delivered code (how performant is your code? Also, high code coverage in unit tests. To sum up, how often we have to do an emergency code fix at 11 PM?)
- Improve the quality of code reviewing other developers’ work. Basically, from 3 perspectives: 1) is this PR a good approach as a whole? 2) Are all the language features being used properly? 3) are all the code statements doing what the developer intended?
- Attention to details! Because the difference between good and great is details (i.e. what’s the ratio that you get things right on the first iteration).
- How often are you finding issues in the codebase in order to find/fix bugs or improve performance.
- Unblocking and context switching abilities: How do you find a way to unblock yourself if your task is dependant on another task. If you are absolutely blocked on a task how well do you context switch to doing other tasks or addressing technical debts?
- Identify things that are costing the company substantially and provide alternative cost-effective solutions
- Constantly reducing current complexity. Additionally, come up with the least complex approaches to solve problems.
- Software delivery creativity
Ability to work and negotiate with the product team to bring down the scope and reduce time-to-market while minimally reducing the value delivered to the customer (i.e. ability to compromise part of requirements and descope them from the deliverables) Product awareness: when developing features, do you take the time needed to evaluate and consider the potential side effects to other features and count them into your design and development?
Focus on customer and company
- The person is constantly aligned with the core business goals and strive to put most of their technical effort into realizing major company goals
Has a clear focus and knowledge on what he does has a direct impact on customers and strive to embrace a customer-obsessed culture
- If something needs to be done that improves the code base, fixes bugs, or brings business value, are you taking initiative to roll up sleeves and do it with no or minimal supervision?
Are you helping your colleagues when they are having technical problems?
Accountability & ownership
Do you take responsibility for things that go wrong and immediately try to fix them?
- How well the tasks mentioned in the “technical ability” are being done with no or minimal supervision
- Deliver software on time based on the estimate as much as possible
Level of availability in times of a crisis
- Communicate with all the parties involved in a feature development so that after the feature is done no one is surprised
- Communicate any potential problems that can affect deadlines internally (and externally if necessary). This communication should happen as soon as a hurdle is reached
- Frequently communicate with the business to fully understand what value proposition we are trying to develop. Is there any intellectual property we are not monetizing?
Communicate with the operations and business so we are always on top of their needs
- Be ego-free
- Be kind
- Be fun to work with!
- Be open to feedback
- Being empathic towards peers at work and be mindful of their emotional/mental state
- How well conflicts are handled
- The approach you take to prove that what you believe is correct from a technical perspective? (i.e. data-driven decision making)
Contribute to the culture so that not only you love working at the company but you attract other people to want to work at the company.
- Help other people in the team to perform everything mentioned above better!
- Improve development lifecycle processes so that others can work more efficiently
- Morph into a personality that can inspire other colleagues and help them with their professional development
The ability to mobilize developers and delegate work to fully develop a feature or set of features. This results in the team to be able to deliver deliverables on time in the most efficient frictionless manner
Going above and beyond
How often you make your colleagues say “Wow, that’s amazing, I did not expect that” in all of the items mentioned above. This means recognizing a company’s need outside the scope of your regular duties in order to assist the company to deliver better customer experience, improve processes significantly, and introduce fundamentally better technical approaches to the problems
Innovate and contribute to value prop
- Ability to utilize the engineering mindset to come up with creative ways to generate revenue or traction for the company