While creating the job description for a .NET developer, we made a list of what we’re looking for in a candidate. In the process, a question crossed our minds. Technical expertise aside, what is it that makes a good developer?
Since there’s no official research on the topic, we thought we’d investigate a bit. So we asked around the office. Here’s what our colleagues shared with us.
“A good software developer is one you don’t need to check up after. He writes quality code and he tests his work. You can also send his work to testers, but you can expect it to run smoothly.
Also, a good developer is one you can trust and rely on. If there is any reason why he/she won’t be able to complete tasks before the deadline or if there are any problems, he/she will give you a heads up. There’s something funny here. If junior developers are quiet, you know they haven’t completed tasks. If senior developers are quiet, chances are things are going according to schedule.
Besides that, a good developer is comfortable exploring new areas. He/she can take up a new technology and become productive with it within a short amount of time. This is something that comes with experience, once you’ve worked with a few similar frameworks and languages.
Also, as a developer, you need to be able to talk to clients directly, explain what you’ve worked on and what problems may come up. At least at Qubiz, a good developer is able to write code without full specifications. In my opinion, that’s what makes a good developer. Talking to clients, doing your part well, working on your own without supervision, communicating problems. All this makes clients trust you and this is very important.”
“A lot of folks would say that, in order to write good code, you need to be up to date with the latest trends. I believe a developer should write code that’s not necessarily fancy. A good developer’s code should follow standards, be as simple as possible and easy to understand by both juniors and seniors.
I believe you’re a good developer if you keep the code as decoupled as possible, allowing communication between components to take place in a very intentional way, never by default. Also, you don’t let the technology or the framework lead you. Instead, you use technology to fit your architecture and specific project needs. A good developer will never blame the technology, saying that’s why the program isn’t working. On very rare occasions, that might be the case, but, most often, it’s not.
Next, you need to understand context. Product owners want to get the application on the market as soon as possible. Yet, it’s unlikely and unrealistic to assume that you can move forward fast and write high-quality code at the same time.
The way I see it, acquiring technical debt is a natural part of the development process, at least in the fast-paced Agile environment we work in. However, knowing when and where it’s ok to have technical debt is one of the marks of a good developer, in my opinion.
Also, a good developer knows how to keep things as decoupled and as isolated as possible, minimizing the impact of technical debt. This also makes it easy to deal with technical debt later on by having isolated, low-impact refactoring tasks sprinkled between periods of lower pressure or higher development capacity. A good developer knows how to keep the product owner happy by moving fast, delivering long-term quality and minimizing the impact of technical debt.
Also, a good developer knows his/her role, how to distribute tasks so a junior will grow and someone who’s more experienced won’t get bored. It’s ok to challenge people every now and then, at the right time – you don’t set challenging tasks when there’s an upcoming deadline. He also knows how to motivate people, shares knowledge and helps others around him learn.”
“There are 2 important things – essential from my point of view. First, you need to be smart – smarter than average. Second, you need to be passionate, you really need to like software development. Otherwise, it’s very complicated, even if you study Computer science.
Everything else is subjective and debatable. In my experience, I’ve met both very organized, meticulous developers as well as scatterbrained, messy ones. They were complete opposites, but both did their job extremely well.
Also, one of the keys to success – this is not a must, but something I’ve noticed about various people – is studying. However, it’s a specific type of study. It’s kind of fashionable these days to spend half an hour, an hour per day reading short, interesting bits of information. But that’s not what I mean.
When I say study, I mean learning in depth about a subject you like, focusing on a single topic for months: reading books, publications, online articles – everything on the subject. This stage takes time and needs to be completed because you need understand a topic in order to be able to apply what you have learned. Otherwise, it’s common knowledge. Also, keeping up with technology is a must. If you don’t, you fall back and you’re almost done.”
“Besides writing clean, readable and reusable code, a good developer should understand how the code integrates into the application and how it will be tested. Also, it’s important to have well-defined guidelines or at least some standard to apply throughout a project. Especially in a big project, the code needs to be as uniform as possible and to follow the patterns and guidelines defined by the team. Anyone who joins the team can easily get familiar with such an application and how to write code for it.
Also, you should be familiar with design patterns and know how to apply them.
I’d also recommend getting familiar with React programming, cloud, vox and new technologies like machine learning, big data – these go hand in hand. That’s not to say you need to understand how to create these algorithms. You need to know how you can use these technologies as they are becoming increasingly relevant.
Proactivity is also important. A good developer will always put forth new ideas, come up with implementation suggestions, frameworks – anything that matters inside a project. Also, when you’re part of a team and you notice something that’s not going well, you should work to improve that.”
“I think there are two types of developers: talented ones and hard working ones. This happens in any field, even football. If you work hard, if you’re determined, in time, you will become a good developer.
Me, I like working with both types. Still, as a team grows, I would prefer that the ratio of hard workers be higher. The talented ones are exceptionally good, I know that. Yet, it can be hard to motivate them if things get boring. On the other hand, a hard working developer is determined, thorough, he digs on his own, and he sees for himself that most often, something will work if he sticks to it.
There are a few other things that matter. First, you don’t have to do everything yourself. If something’s above your competence, don’t waste too much time, raise your hand and ask. Help can come from anyone, even from a non-technical person. Teamwork is essential – you need to be able to work well with others, to set aside personal differences, be open to improvements. A good developer doesn’t get into conflict every day, he accepts constructive feedback.
Strong task ownership is also important as it inspires trust. Keeping up with new technologies, and being able to learn quickly matter too. This comes with experience, once you have a few technologies under your belt.
Also, a good developer knows how to apply what he reads. A lot of people read, but they don’t know how to implement what they learn. Take time to understand what you read. If you don’t form your own opinion, you get stuck even with the smallest counterargument. If you have your own opinion, at least you can debate it and reach a conclusion: either you or your opponent is right.”