I have often thought about this - "What makes a good software developer?" The answer to me, is not that straightforward - in fact, I may appear to be contradicting on some points. I will attempt to go over them (in no particular order):
A good software developer has to have:
- The ability to see the bigger picture (or as my senior colleague used to say "the ability to see the forest through the trees") as well as pay attention to detail. As a software developer, one is required to keep the overall architecture in mind, and design and program solutions that are in harmony with the bigger picture. The bigger picture may also be extended to mean that it is not necessary that all business problems or needs are met by software solutions - that sometimes changes to business processes are required to fulfil a business need.
- The ability to be pragmatic while preserving the integrity of the software solution. This can be a bit of a gray area - you have to be pragmatic to a certain extent to deliver what the users require, and you have to maintain the integrity of the solution to have clear boundaries and a clean architecture. In some cases, these may be a bit mutually exclusive - for example, it is of no use having a realtime application going through five web services for a simple business function - while this may maintain the purity of the solution, in practice, it is unworkable and a pain to support.
- The ability to keep an open mind, being receptive to new ideas, at the same time, not pursuing infeasible or bad ideas. Sometimes it may require you to investigate new ideas, sometimes it may require you to completely trust your team members, but the overall objectives need to be kept in mind - what we are delivering (the intention and the scope of the delivery), and the limitations or bounds in terms of time and resources.
- The ability to filter out unneeded "noise" and be solution-focused. Many people go around in unproductive circles, get involved in the "drama", rather than being solution-focused, having a plan, and resolving issues effectively. A good software developer needs to look at things objectively and be driven by sound skills and principles which help in delivering a solution.
- The ability to work well in a team, as well as work well individually. This may seem easy.. but it can be challenging - especially working in a team made up of people from different technical backgrounds. I think that for a team to function properly, the roles and responsibilities of the team members need to be clearly defined. A healthy atmosphere needs to be created where productive discussions about different ideas are encouraged and an atmosphere where people move away from autonomous to consensual decisions. Working individually has its own challenges - you have to have a broader skill set, to name one.
- The ability to contribute to, adhere to, and support processes/standards, and question them when needed. Processes and standards are put in place to make our lives easier. When a process/standard hinders software development rather than aid it, it needs to be questioned/improved/rectified.
- Finally, a good software developer has a passion for the IT industry. It is quite essential for the software developer to be actively involved in new technologies, take an interest in current trends (eg cloud computing). Have a good understanding of where technology is at and being aware of how particular business needs could be met by fit-for-purpose technological solutions.
Most of the above points are not necessarily specific to software development - they can be taken out of the software development context and be applied to most industries.
Any comments, thoughts, discussion are most welcome.