I asked our programmers what makes them get up in the morning and (more or less) happily spend a day doing something most people find uncomprehensible and scary: software development.
100% of them answered: getting paid. I sensed I was talking to logical people who don’t have time for vague questions. So I asked differently:
What does writing code for other people give you personally? What makes you enjoy your job and feel like it helps you achieve your personal goals?
Money is the factor that makes people show up for work and do what needs to be done. But if your work is not satisfying in itself, it takes more and more energy and strong will every day to force yourself to show up. You need intrinsic motivation to drive you. You need to want to do that job, not bear it in order to afford vacation.
So how do you motivate programmers when adding another ping-pong table and another game of paintball are not helping? How do you stop them from looking for satisfaction in another job? What could humans possibly want from something that takes up most of their lives?
Doing work you can be proud of
We usually work under an NDA and at the end of a contract don’t even have much to showcase under our own names. It’s a great boost for your ego and reputation to sign your name on quality open source projects. And aside from that, you contribute to the community and help make good software widely available
The culture of excellence
When you hire excellent people, they motivate the rest of the team just by example. The rest of the team doesn’t want to look bad in comparison, so they focus on reaching the level of the best.
Piotr Imbierowicz: I remember at one of my previous jobs I was the only experienced programmer in a team of beginners. My employer decided that investing in talent is not worth the money, so he hired all juniors and hoped things would just work out. In the end, I didn’t even have time for coding because I’d spend all day teaching the others basics.
That was really demotivating. When the appreciation for quality doesn’t come from the top, you get tired of trying to do your best, because that effort is wasted.
Learning from someone more experienced is the fastest and most valuable way to gain new skills. Instead of making tens of hours of abstract excercises from a book, or learning through trial and error and StackExchange, you can be personally guided through building better software and understand how to make the right decisions.
Some people would rather waste tens of hours trying to get themselves out of a dead end, than ask their colleagues for help. It’s important to, first of all, create a culture of learning and growth. Especially if you’re a junior, there’s no shame in asking the team for help. Think about it this way: asking for help creates an opportunity for someone else to give help, which is often very satisfying.
Everyone who knows something had to learn it first. It’s important to remember that we are always learning, even the most experienced of us. Making mistakes and analyzing them is an important step of the learning process.
We’re building a company, not just software. We spend most of our lives working or thinking about work and we want to feel like we have some influence on its direction - or at least know where it’s headed.
When you don’t know what’s happening under the hood of your company, you don’t fully feel you’re an important part of it. Transparency and communication - when they’re there, you probably don’t notice them, but when they’re gone, you start feeling confused and alienated.
Trusting your co-workers starts with transparency in the recruitment process. If my code is going to be reviewed by this person - I need to know at least whether they know what they’re talking about. I need to know they’re not just a junior who just wants to sound smart by pointing out mistakes?
Decentralized team structure
Centralized management doesn’t make much sense in bigger projects - the decision process is too long and analyzing every probem or idea becomes impossible, so you sacrifice the quality of those decisions and start relying on non-merit factors, emotions and just getting it over with.
Treating your co-workers like humans
The simplest things are the easiest to forget. Sure, we respect and appreciate each other’s work, but do we take the time to express it? Sure, we are a team, but what do we do together other than deploy and present the results of our work?
Like every relationship, building a team takes some effort. Not everyone likes parties or paintball or team excursions. But it doesn’t take much: you can start with scheduling 10 minutes every day for a chat by the coffee machine.
Things you don’t notice until they’re gone
Positive motivation can turn out to be useless if you neglect the basics. Like simply letting people just do their own job without unnecessary obstacles. We can go on and on about that. And we will, in the next post.