According to Larry Wall, the originator of the Perl programming language, software programmers have three great virtues: laziness, impatience and hubris. While this may sound counterintuitive, his premise is that good programmers turn these “liabilities” to their advantage by using them to motivate virtuous behavior. Average programmers, however, take the virtues at face value and don’t seek to exceed the ordinary.
What keeps average developers from becoming exceptional? Answering this requires moving beyond Wall’s virtues and understanding why average developers’ adherence to mediocrity prevents them from learning, adapting, and delivering. Great developers hone their craft, are cognizant of their context and work to maximize their impact within it. The very average may not even care about having a significant impact on corporate culture, product excellence, and business success.
Here are 7 qualities we’ve seen in average software developers:
1. They are satisfied with the status quo.
Average developers are interested in the immediate satisfaction of solving a problem and moving on. Why the problem occurred is of lesser interest and addressing the root causes can be left for a later sprint. They are comfortable with their skills and their understanding of languages, frameworks and methodologies in the industry and find them to be sufficient. They aren’t particularly adaptable, preferring familiar technologies and architectures to the unknown. Their dogma is a comfort.
2. They see their job as only a job.
Ordinary developers see themselves as drones and work as a means to a paycheck. Writing code is a transactional service they perform in return for being paid. Creativity and personality are reserved for after hours pursuits. Their code is a product, strictly provided in compliance with a specification.
3. They are afraid of the unknown.
Because they lack confidence or skills to confront challenges, average developers stay within their comfort zones and avoid tackling difficult issues. Their confidence is based on that which is known, rather than speculation. Importantly, they choose not to seek help in order to avoid risking a perception of lack of skill. Collaboration is seen as risky. Teaching is eschewed because one’s value is enhanced by knowledge hoarded.
4. They deliver only what is required, leisurely.
Many average developers don’t feel a great sense of urgency in their work. They also aren’t motivated to confront problems with innovative solutions because there’s comfort in a methodical pace and anyway innovations lead to the unknown and the unknown is risky. The average developer sees it as their job to deliver what is specified, not to consider such abstract concepts as “business value”. If something is out of scope or would require extra effort or polish to complete it can wait for a later sprint.
5. They resist change.
Change is inherently risky, therefore change should be limited to only that which is required. Ordinary developers avoid change just as a pain sensation causes us to avoid that which can hurt us. To many, the predictability of a sprint is a comfort and mid-sprint changes lead to consternation. In this kind of environment, code churn is discombobulating and therefore long-running branches are common and integrations deferred. Deployments to production are eventful and therefore kept to a minimum. Those who see change as risk will fight to reduce change, even at the cost of project success.
6. They document excessively, or not enough.
Many developers are driven to document to excess. This may be because their code is not appropriately expressive–it is opaque, or convoluted, or involves too much hand-written code and not enough reuse of high quality open source libraries. As well, documentation can provide convenient cover for bad or even merely mediocre code. Other developers may document too little. In such a situation the code fails to communicate fully yet no alternative communication vehicle exists. In other cases, an audience that can’t read code or doesn’t have access is left without necessary knowledge. The tension between writing too much and too little documentation is taut, and the average developer fails to give it proper attention.
7. They work with others when they have to.
For any number of reasons, average developers often prefer to work alone. They could be insecure about their skills, socially disinterested, or overconfident and unwilling to learn from others. Pair programming, in which two programmers work together at one workstation, is therefore a risky proposition, or simply distasteful. The use of frameworks, coding standards, and architectural decisions can be shared via documentation, or code reviews rather than social coding and interactive team acculturation. They may feel project managers, product owners, and others, are a distraction and inhibit story completion. People get in the way of code, and code is how they believe they are measured.
More than anything else, average developers settle for the ordinary. Each of the items above is rational–average developers aren’t incapable, they just aren’t motivated to pursue more for reasons that largely make sense to them. But if you’re a developer who aspires to more, we’d like to hear from you. At Nortal, technology innovation is our passion. Our software developers live for creating scalable, elastic and automated software solutions that solve our customers’ challenges. To learn more about some of our key software development projects or real-world case studies, contact us.