How to evaluate the performance of a software engineer
This is the second article about software engineer performance reviews. The first article discussed the overall process of a performance dialogue. This post should now dig into more details about the specific performance measurement of a software developer. Developing software is a complex task where it's hard to measure the success. Beside that you need several different skills (technical and non-technical) to be a successful software engineer. Based on the environment of the organization you are working in these skills my vary. That's why the requirements on an engineer are different in every company / department / segment / team. I prefer to work in an agile web- or app-product development team. If you work in a different setting your requirements may not match mine.
I observed 5 different areas of performance and now I want to walk you through them.
Technology & Architecture
The obvious one. This is all about the coding skills, tech understanding and the knowledge of architectural patterns as well as the architecture in our systems.
Product & Business understanding
This is especially important for companies who build products in an agile team setup. In this environment I strongly believe that you need people with passion for the product and a general understanding of your business model. Even in engineering because you like to build cross-functional teams where the team needs to be aligned and empowered to solve all given challenges and make decisions by them own. Without tech expertise and business understanding an autonomous team will be very harmful for the company.
Besides that, we have currently the trend for a micro service architecture. This is also related to the usage of Domain Driven Design(DDD). If you want to do DDD your team needs to have a deep knowledge about the product and business side.
Thinking smart & user-centered
This is all about thinking in concepts. I concentrate here on two different concepts which I believe a super important to create a product.
With smart thinking, I would like the people to think about smart or easy solutions. Usually, you are able to come up with a correct solution that fixes the problem you need to solve. But after thinking more deeply about that you will often get a much cheaper / more easy / faster ... solutions hidden behind that. Or maybe you fix your current problem but you don't think about the further impact (see the bigger picture). This is the concept of smart thinking.
The second part of this performance area is about user-centered thinking. You can also name it: Walk in the shoes of the customer/user. To deliver value, you need to keep the user in your mind. If you forget about them you will never deliver valuable products. So I think this is key for delivery in an agile product organization.
Agile & Teamwork
This is all about how somebody is working in your team. I believe, that being agile is often impossible if you aren't a great team player. That's the reason why both topics are in one category. But the focus is clearly on teamwork. Why? Usually, you get a better architecture and code quality if you do more teamwork. E.g. planing the implementation of a new feature as a team usually lead to better ideas for software architecture. And doing pair-programming is key for great code quality (besides tests). This are just two example, there is much more.
Visibility (internal and external of the company)
The last category is professional visibility. That topic is divided in internal visibility and external. Internal means if colleagues recognize you for a specific topic and ask for your opinion. Maybe you are keen to Micro Service architecture. If you lead some projects about that topic in the company and also do some talk internally the other people will notice that. External visibility is almost the same but outside the company. Maybe you speak at conferences or you write articles/blog posts/tweets about a topic you are really interested in and people start to know you for that topic.
Summery for performance
I use this five performance categories as a framework to think about the performance of an individual software engineer. Usually, they have more abilities then this five. But based on my observations they are important to deliver great software products. Other things like behavior and other mentionable actions are discussed in the first post about performance reviews for software engineers.