What you are as a person is far more important that what you are as a basketball player. – John Wooden
People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting – all people are completely different in their attitudes and behavior. But this comes with price – it is difficult to understand people and even more difficult to find the best way to deal with them.
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.
I offer in this post a simple theory about Three Dimensions of a Software Programmer that could help to put relations with these individuals on some rational basis.
There are two basic axioms in foundation of the theory
- Constancy – some programmers consistently outperform others under same conditions.
- Variability – performance of a programmer varies under different conditions.
Talents are recurring patterns of thoughts, feelings and behavior that can be productively applied. – First, Break All the Rules
Genes and upbringing form an adult human with specific talents and personality, strengths and weaknesses. These core individual characteristics of a programmer are difficult to change (except some limited success with consumption of large quantities of beer). Programmers are different – creative, thorough, funny, systematic, laid-back, curious, analytical, spontaneous and so on. Some people cannot be programmers at all.
Each unique programmer has a base performance level that is constant and almost impossible to change.
Three Dimensions (variables)
Now we can move to the part of equation that can be changed. Can we make programmers permanently performing above their base level? To answer this question lets review three variables of programmer’s performance.
measures amount of work and power of ideas that could change and improve reality.
Here I consider a specific kind of energy – creative positive energy that is directed to build better software and aligned with company and customers goals. Individual’s desire to act, create and achieve is the source of this energy. As we discussed above, part of this energy is based on character and predetermined. However, there is a big variable component of individual energy that is driven by motivation and environment.
measures ability to focus and follow necessary steps to achieve goals with good quality.
Accountability, self-organization and focus are core elements that keep individuals to perform on a high level. Personality matters here – some people will promise and forget immediately, give up experiencing first difficulties or become distracted by more interesting tasks. Some will fight until the end and go beyond limits to meet commitments, exceed expectations and bring excellent results. However, significant part of programmer’s discipline is variable and depends on context and expectations.
measures knowledge and experience in programming, technology and a customer domain.
Expertise includes know how to build software, make right decisions and implement good solutions with minimal troubles. There is no doubt that expertise is growing with time, but individual variations are big. Many people consider expertise as the only important characteristic of a programmer. I believe that it has much lower value without two other variables.
|Highly productive, creative and successful, know how and what to do; have energy, discipline and desire to accomplish tasks on the highest level|
|–||Great drive and energy to make things happen; however makes unnecessary mistakes and poor decisions|
|A talented and experienced individual who could create great solutions; however inconsistent and unpredictable|
|A disciplined and knowledgeable programmer, who is strong in implementation, but lacks creativity and drive|
|–||–||A lot of energy and movement without much useful results|
|–||Consistent and rational, but does not have creative energy and knowledge to be productive|
|Deep knowledge and vast experience without willigness to perform and change anything|
| Lost soul
|–||–||–||Don’t want to do anything and don’t know how to do it anyway|
How to Improve
A programmer can be 10 times more productive than other programmer and 10 times more productive than himself under different conditions. Therefore right people under right conditions could be 100 times more productive than others.
How can you influence programmer’s performance with these three dimensions? Hopefully, you found right people with right talents. It is a waste of time to change personality and push in direction where talent is absent. However, it is possible to amplify natural strengths and create conditions for super productivity.
goal: make people empowered, motivated, interested and satisfied; engage them to perform above their base level of energy
- interesting work – brings inspiration and motivation
- control – over own work and decisions – pushes people forward
- self-organization – opportunities to find own ways that bring best results
- creative tension – goals on the edge of capabilities to focus energy and open new energy sources
- defined outcomes – clear direction that reduces anxiety and doubt and increases productivity
- flow – put mind in a state of energized focus, full involvement, and success
- positive experience – good emotions and healthy team relations; comfortable and trusted environment
- personal interests – decision making considers and takes care of individual interests
- right incentives – compensation, rewards, recognition are the great source of energy and motivation
- space for mistakes – tolerance and open ways to fix mistakes make people think about moving forward instead of covering assess
- productive environment – where people think about work instead of nuisances
- fit – between personal and company goals, culture and views – amplify people desire to work
- reasonable pressure – normal workload, minimal stress, time slack to avoid energy drains
goal: make people focused, responsible and aligned; make them performing in the right way
- established process – align actions with goals and support their execution (Agile is the best way to go)
- transparency – reasons for decisions should be clear, problems should surface quickly
- pull system (kanban) – signaling system to trigger action based on actual needs
- control mechanisms, check and balances, audit, risk management (e.g. iterations)
zone of responsibility
- clear areas of responsibility – what is included and what is not
- balance of responsibility and authority – adequate authority to accomplish goals; restrictions to avoid damage
- rules of engagements – when, where, and how force (bold actions) shall be used
- match confidence with responsibilities – an individual is prepared and ready for the new responsibilities
- safety regulations – mandatory rules for everyone
- professional standards – recommended parameters of work and products (security, performance, availability, etc.)
- best practices – spread approaches that work
goal: make people knowledgeable, experienced and growing based on their talents
- right career path – built on persons strengths – enable growth in area of competence and natural strengths without switching into paths that don’t match talents (e.g. management). Avoid consequences of raising to the level of incompetence (Peter Principle).
- broadbanding – build levels of achievements and pay schemes that allow to achieve and earn more within the same profession
- match expertise and challenges- keep people always interested and challenged, avoid boring or over complicated tasks
- assist self-discovery – help search for the better career and role
- diversity in tasks and activities – accelerates growth and understanding
- big picture, direct communication with customer – informed people make more optimal decisions
- exposure to different subject areas – broader knowledge opens new possibilities and solutions outside the narrow specialization
learning and practice
- feedback loop – continuous evaluation and improvements based on feedback
- opportunities for learning – grow expertise beside direct work tasks
- sharing, coaching, communication – peer and experts access and support for growth
There is no standard way to increase performance of an individual programmer. Each individual is unique and requires personal approach. The theory of Three Dimensions of a Software Programmer suggests framework for these approaches.
It takes a huge effort to understand every programmer in your team individually and craft personalized approach, path and conditions. But it makes sense to do. People will be productive, engaged and happy. The company will grow and succeed.
What could be a better outcome in our civilized hard working world?