- Displaying clear, concise, and constant communication.
- Properly setting priorities with good time management.
- Effective exploitation of available tools and people.
Bonus: Proper emotional management of yourself and stakeholders.
Describing the most important qualities of a developer is difficult to do objectively without specific limitations or context. Many variables can influence the answer to this question. These variables include:
- The project the developer is working on.
- The role or roles the developer has on the team.
- The team the developer is working with.
- The stakeholders the developer is working for.
- The environment the developer is working in.
To come up with a ranked set of universally applicable set of qualities, all of these factors must be considered. Since we do not have any limitations in place, these traits will end up being applicable to many job roles involving the same variables.
The first trait I will discuss is significant for any activity that involves the cooperation of two or more people (and is also applicable to systems involving computer agents or machines). It is the quality of clear, concise, and constant communication. For any project to go well, a developer needs to fully understand what the goals of the project are and how they will contribute to these goals. These goals should be determined by the visionaries, designers, architects, and, ultimately, the end user or customer. Communication needs to be clear and accurate so the developer is able to extract the appropriate vision from the minds of the stakeholders. Communication needs to be concise because time is often limited. No need to be verbose unless necessary, verbosity can often lead to confusion. Finally, communication needs to be constant because, after all, the world is approaching the technological singularity and is getting exponentially complicated at an increasingly faster pace. Demands and requirements are changing constantly.
There are many project management models that focus on encouraging good behavior in communication practices. Through a solid application of the agile software development model, the developer would always have an updated view of what needs to be done for all relevant stakeholders. This, in combination with a return of excellent communication to the rest of the team, will inevitably be core to a developer’s success. I have seen the importance of this over and over again within every project I have worked on. Agile influenced models are meant to address the failures and delays in communication that were often present in past workflows.
The second trait that has proven to be particularly important for my own growth is that of time management and properly setting priorities. Whether we like it or not, our business world is on a schedule. The only truly finite resource we have is time. Not only is life short, but often project timelines are too. It is important for any single developer to make sure time sensitive issues or functionalities are addressed first. Every activity that consumes a developer’s time must be monitored and constantly reassessed for its own individual ranking on the developer’s todo list. This will require the developer to use the first quality I mentioned to ensure they are on the right track. It is not uncommon to receive conflicting task items from multiple stakeholders where priorities are not easily comparable. In these moments, the developer may need to jump into a project management role for a moment and make sure everyone else is communicating the team’s goals properly within the group.
Prioritizing is not the only part of good time management. You must also make sure to put a proportionate amount of time and emotional effort into addressing each task. A huge part that plays into this is the avoidance of absolute perfection or “analysis paralysis” as many put it. There may be times where perfection is necessary, such as in the implementation of a secure data transfer system, and other times where functionality must take definite precedence, such as in creating log entries. Sometimes “good enough” hurts to admit; we just need to remember to focus on the big picture and accept this as the best choice. Keep moving forward! It does not help if one portion of the project is perfect when several dependencies to that piece are not even functional yet. As the Director of my Artificial Intelligence Institute at UGA always said: functional first, optimize later!
The third quality that is essential for any highly productive developer is the effective use of available tools and people. As developers, we are tool builders. We cannot forget this! We create things to make our lives easier. The world is full of all kinds of fantastic technology to augment our knowledge and abilities. Our tools are intrinsically connected to our minds at this point. Our minds extend into these tools and increase our cognitive potential. Use them wisely! At least use them for goodness sake, no need to brute force something if it can be automated or augmented. Sometimes I see libraries I could have built better but it is often not worth the time to rebuild something if you have a more significant project to accomplish.
[As an aside, my favorite tools are the programming languages I work with. My worst and best habit as a developer is that I love to study how a language works. At this point I can learn a language in a few days and then move on to another language (and usually a new technology stack). After enough repetition of this, I found it best to master a couple well-documented languages from popular paradigms, like ‘object-oriented’ or ‘functional’, and use them to build a few awesome projects. It will be much more enjoyable and you will become much more employable since most recruiters hire towards the language and not the paradigm. Learn towards executing on significant projects! Many widely-varied, little accomplishments tend not to get noticed.]
People are the most important tools we can use. Working with a team extends our minds into the collective consciousness of the world. It allows their knowledge and abilities to become our own. This is especially useful when you and the individuals you are working with have the same mission to accomplish but different skills or experience. The greatest increase in the quality and speed of my work at Microsoft came from exploiting the incredible expertise I was surrounded by. It took a leap of humbleness and resulted in productive happiness. With the effective use of tools and people, a developer can do anything better.
These three traits are inexorably intertwined. A developer must use all available resources, most importantly time, tools, and people, to attack the highest priority tasks. These tasks are cyclically defined by users, designers, project managers, and many other stakeholders. The definition of the final product realized by the developer must be updated regularly through masterful communication. With their mind set to improve these three traits, any developer would be keeping with a focused vision for success.
Another quality I found to be important and underrepresented is that of emotional management. This is important in relation to yourself and to others. It is essential for making sound decisions and building solid relationships. Always keep the end goal in mind with every action! I will save more comments on this quality for another post.