Managing Developers: 15 common traits of great Software Developers
As a Software Development Manager, you obviously have one major context to your day-to-day: Managing the development process and the people who execute it – or software developers. Most everybody who has been in the industry long enough to experience a couple projects and a couple teams can tell you that there is a wide chasm between your everyday developer and a great developer.
That chasm not only consists of the difference in the amount and quality of work they are able to produce, but includes a vast knowledge base, a reliable and quick analytic brain, inherent leadership and setting the default baseline for the team.
They are also the ones who will argue with business about what their software should and should not do. They will advocate particular methodologies, patterns, architecture and design. They will push back on timelines, implementation plans and will often be a thorn in the manager’s side. But in the end, the great ones will compromise – if they are heard.
With great software developers, it’s not about being right – it’s about not doing the wrong thing, from their perspective. While they may indeed be a thorn in your side when you are expected to push a project forward, what they are actually doing is making sure all the bases have been covered before the team plows ahead. They are actually looking out for the project and the company. A great Software Development Manager values this pushback and gives credence to what their developers tell them. A bad development manager resents it, feels like they have to prove themselves right and their developer wrong and will eventually alienate the entire team – whether they realize it or not.
A great software developer makes all the difference in the success of a software development project. As a software development manager, that means that a great software developer will make all the difference in your success in your job. But how do you find a great developer? How can you tell if the person you are interviewing is the one you need to hire?
The answer to those questions will surely vary based on different people’s experience. And as in all things, generalizing about traits people have is never 100% accurate. While there cannot be a definitive list of guarantees, there are several things that, in my experience, great software developers typically have in common:
1. They are smart.
Not necessarily smart in the way most people think of smart people – they are cognitively gifted. They have the ability to comprehend and absorb vast amounts of information, process and distill it and quickly function as a near expert in it. They will then make recommendations on that information and be able to completely back it up and justify it. They are also able to then intuitively and instantly determine whether A or B is the proper approach.
2. They intuitively know how to approach and solve problems.
Solving problems is their nature and is what they do. They will poke at and question a problem/solution until they understand it from all aspects. They will then begin making decisions about potential approaches to the problem and will test multiple theories, following them to their failure or success. They will continue doing this even if they have already found one route to success, once they have completed analyzing their theories, they will then select the best route to success that they have found.
3. They are talented at building software.
Writing software isn’t just a ‘thing’ for them, it is how they express themselves. They write software for a living because it lets them do what they love and are good at while being well compensated for it. Their interest and curiosity in software leads them to play with multiple languages and frameworks.
Every great developer has at least one pet project they are working on at home.
4. They are disciplined at their craft.
They understand what it takes to build good software, they stay up on methodologies and technologies. They naturally comment their code, but only where the code is not self-documenting. They naturally test their software and debug it constantly. Additionally, they are meticulous and consistent about their coding style, how things are structured and in their approach to writing software.
5. They are able to analyze the software project from a business perspective.
This ability comes through a lot of experience. Great software developers understand business very well. Many of them specialize in a particular vertical and become experts in that business vertical, to the point that they often understand it better than the average executive. They may not know how to apply that knowledge to running the business, but they know everything about how the business functions.
6. They understand and approach the problem domain from the customer/user perspective.
A developer working within a vertical that they have long experience in knows how customers and users within that industry work. They have likely done multiple customer visits, have surely read numerous product specs that go into detail of how the customer works and have had to replicate the user’s path to find bugs and workflow issues innumerable times. This gives them deep insight into how customers and users will use the software and intuition into what they will expect.
7. They think about and know the details of the project from a very high level.
When they are working in a particular area, billing for example, they are thinking about how that part of the software will interact with and be affected by the inventory module. Whenever they are making decisions on how to craft their area of responsibility, all other areas of the software are naturally taken into consideration.
8. They think about software development from the Architectural level.
As a project scope is being defined, a great software developer is architecting it in their mind. By the time they have finished reading through or being presented a project spec, they have already segmented the code into business sections, layered separation, interfaces and abstractions that will be needed, database layout and patterns that will be used.
This process will leave them with questions that need to be answered in order to fill in holes in areas of the project. Often times, managers find this line of questioning to be out of sync with their presentations or addressing issues that “can be solved later”. It is a bad idea as a manager to ignore or overlook these questions just because you haven’t addressed them yet. Your great developer has just identified all your major risk points for you.
9. They design in abstractions.
When great engineers start designing or laying out projects, they don’t jump into code. They work first from the object level to find all interaction and inter-dependency points. They then build multiple layers of abstracted objects that create the foundation for the project.
10. They build for simplicity.
A great software developer can break the most complex problem down into simple component pieces and understand how they all work together. They build each simplistic component to do one job and build it as near to perfect as they can. Whenever a code component begins to do more than one job, they break it out again. When a component processes something that they know other components will need to use, they abstract that part of the process out of the component into another component. When they are finished, their solution to the most complex problem will be handled in multiple functions across multiple components, each doing one simple task.
11. They strive for perfection but know when to be pragmatic.
Great developers do not like to build flimsy or incorrect software. But sometimes, the needs of the business require them to not invest a significant amount of time in doing it right – it just needs to be done good enough that it can do the job. They don’t like to do it, because they feel it is unprofessional, but they will when it is what’s best. Incidentally, the fact that it was done will nag at them and they will hate that part of the code. This is one of the areas that a good development manager will put on the backlog and let the developer come back to it when there is time.
12. They think in edge cases and test for all possibilities.
When a developer is given a programming task, the task will usually specify a use case that describes the purpose of the task. A great developer will complete the task by building it for every use case they are aware of and often for edge cases they intuitively sense may occur. This includes verifying variable state before a code block that depends on it, handling errors and logging exceptions completely while commenting in the code what they are testing and throwing errors for.
13. They diligently seek out and fix bugs.
Once they have written a section of code, a great developer will run it repeatedly and test it for every use and edge case they know. Anything they find that does not respond as expected or any bug they come across, they will fix their code to work correctly.
14. They will try out and will test different theories and solutions and will adopt the correct one without reservation.
When they are unsure what the best approach is, or if they aren’t sure how to solve a problem, a great developer will do some research and then write multiple functions to implement possible solutions. They will then test each of them and likely benchmark them to find the best and most reliable solution.
15. They are able to communicate effectively with all players involved from C-level to user.
Great developers understand the business, problem, solution and software well enough to explain it in terms appropriate to their audience. A development manager can rely on great developers to take over discussions and frame their explanations at the right level and with the right amount of detail for those they are speaking to.
The key to finding and hiring great developers is first knowing what to look for and then creating a strategy to find those things. In this article we’ve covered some of the things to look for that will help you find a great developer. In future articles we’ll talk about strategies for discovering these qualities in potential hires.