Developer Motivation and Productivity
Developer productivity rests on developer motivation. Although developer motivation is not sufficient for being productive, it is necessary. There are other inhibitors that may be relevant to productivity, like a culture of slow decision making, changing features and direction midway every week or bad tooling.
Developer motivation is not the only thing to developer productivity, but it is essential.
A motivated developer will do all necessary task, will take ownership and responsibility, will engage with others to find out about the problem and write code.
Motivation is about doing and finishing a task. When you are motivated, you’re going to do the task. When your not motivated, you’re not going to do the task. In the DMO model motivation is explained by joy, discipline and frustration.
A developer who enjoys coding and enjoys working on the code base, has joy with the task and will start and finish it as fast as possible. If the developer has not joy but discipline, the developer will start and finish the task as fast as possible. Watching them you’d say they are motivated (you can’t determine if they have joy or discipline, but they get a task and do it). When developer start and finish tasks as fast as possible to them, they are productive.
Frustration reduces joy and kills discipline. Frustration is different for everyone, every developer is frustrated by different things and some developers are easier frustrated than others. A high level of frustration leads to low motivation (low joy and low discipline) and to low productivity.
To increase developer productivity you can increase motivation, in this model working on joy, discipline and frustration.
Developers and Joy
In it’s core developers need to feel joy writing code. Despite many people feeling that writing code is a minor task of developers, with which I disagree, developers who do not enjoy writing code, will have difficulties to feel joy and be motivated writing code.
Developers have many reasons to feel joy from coding. Creating something out of nothingness, solving a problem, seeing the small gears lock into each other, seeing running code after fixing a bug, gaining new insights in coding from understanding some code and many more will make developers feel joy.
If they do not feel joy while coding, it is a tough sell to motivate developers. Perhaps they once did and no longer do. Perhaps they came into coding for the money and not for the joy of writing code. In these cases a way forward towards more motivation would be to show them the good sides of coding and how to enjoy it. Buddy them with someone who really enjoys writing code, have them pair-program and see if the joy rubs off.
Developers and Discipline
There are tasks that you do not enjoy as a coder, but nevertheless need to be done. Fixing a CSS bug is no joy for many, working on Google Taskmanager is no joy for many. And while everyone is different, there are tedious, complicated but boring tasks that confer no joy. While might be able to show developers the joy in them, you might not succeed. Your task as CTO or engineering manager here is to minimize those tasks and have those that are not high priority or have no impact cancelled.
Developers need discipline to work on those tasks to look motivated. If they do not have motivation they will not succeed. There happiness will drop and they look unmotivated. You will push and push to make the task happen.
If this is the case, talk to the developer and let them reflect on their self-discipline, their ability to work on things they do not enjoy. People can get better with self-discipline, but it will take a long time. Better to hire developers that show the necessary amount of self-discipline to work on the few (your job!) tasks that are berieft of joy.
Developers and Frustration
Frustration is reducing joy and killing discipline, especially if you don’t have a lot of both. Frustration depends on the person. Some people are easily frustrated, for some people it takes more to be frustrated.
As a CTO, engineering manager or lead you can increase motivation and therefor productivity by reducing factors that do frustrate developers. Slow computers, bad equipment in general, too many meetings, bad code, hard to setup and manage development environments, lack of progress, lack of personal growth, doing the same thing over and over again, random deadlines, random decisions by management in general, sub-average peers (bad coders), being the scapegoat for everything, having no say in feature development, being second with their concerns for maintainability and security, forcing practices on them that they feel make no sense and many more.
While every developer is different with how they are frustrated, working on these factors reduces frustration for everyone, increases motivation and therefore productivity.