I wrote a number of sarcastic articles about management and motivation, where some traditional and very popular practices were criticized. Now I’ve decided to think it all over and summarize what actually motivates me as a programmer when I’m working for someone else. Let’s say you hire me tomorrow as a Java coder and ask “What do you want us to do for you so that you will be most productive?” This would be my wish list.

300 (2006) by Zack Snyder

The list is in no particular order.

Remote work. I like to be in the office, but I hate it when I have to be there from 9 till 5. It’s very important for me to have the ability to work from wherever I want. Most companies declare that, but in reality I will have to “inform” you every time I decide to stay home. Instead, I want to inform you when I decide to visit the office. In other words, my default state should be “not in the office.”

Isolation of tasks. I hate being responsible for someone else’s mistakes and I’m not really a good team player. I want to solve problems on my own and be responsible for my own successes and failures. That’s why clearly defined and isolated tasks motivate me and help me stay focused and interested. I want to see them in writing (as tickets) and I want to know exactly what the definition of done is. Simply put, what should I do in order for a task to be considered as completed?

I hate to be afraid, especially if I don’t really know what I’m supposed to be afraid of.

Responsibility borders. I hate to be afraid, especially if I don’t really know what I’m supposed to be afraid of. I want to know what my possible punishments are and when they will occur. I need to know the rules of the game. Say I commit a bug into the code and we lose $100,000. What will happen to me? Or say I don’t finish a task by the deadline. Or I don’t answer an email. Or I miss a bug during a code review. Or I break the master branch. What are the consequences? Their clear explanation will seriously boost my motivation.

Open source. I’m a big fan of open source. If you are not, I most probably won’t like working for you. If your company makes some code open and I am part of that process, that will seriously affect my motivation, because I will achieve two goals at the same time: make money and become more popular in the open source world. Working in purely closed software projects is a demotivating factor for me.

Project visibility. I’d love to see my name close to a project that is visible to the world. And it doesn’t necessarily have to be Google or Facebook. Actually, in those companies regular programmers are way less visible than in smaller startups. So, unless you make me VP of Engineering, I won’t consider a position in a big company interesting in that respect. The most interesting project would be a small startup with an ambitious goal and high exposure in the media. Being there even as a regular programmer will motivate me a lot.

Clear hierarchy. Yes, I’ve heard about holacracy, flat and self-managing teams, and other modern ideas. I hate them all. I believe that any management is based on power and force, and the best way to avoid negative aspects of these rather violent concepts is to organize and structure them. Without a clear and well defined hierarchy of roles a team very quickly turns into a snake pit, with politics, backstabbing and behind-the-scenes games. So, if you can’t tell me exactly who is my boss and what the chain of command is in the group, I simply won’t consider this place seriously and won’t be motivated.

No Agile/Scrum, please. Do I need to say anything else here?

Payment structure. I hate to guess about money, I prefer to know the numbers and the logic behind them. I want to know exactly how much I’m going to get and when. I want to know when the numbers will go up and how I can affect that. Also, I’d like to know the payment policy of the company and, ideally, salaries or rates of the people around me. Jealousy, which arises with the surprising information that someone is getting more than I do, doesn’t motivate at all, even if my pay is decent. It would be much easier for me if I knew everything from the first day.

I hate working for big ideas, if they are not mine.

Business transparency. I hate working for big ideas, if they are not mine. Mostly because I know that almost all of them fail. Working for a failure and being told that our future is bright doesn’t really motivate me, at all. That’s why I would expect you to tell me honestly why a meeting with investors took three hours instead of one and why the door was so tightly closed. Also, I would want to know why our CTO quit a few weeks ago and now works for our competitors. I’d like to know our honest situation in the market and why the web traffic stats are going down. In other words, I’m either a slave kept in the dark, or I know the truth and I’m motivated (no matter how ugly the truth is).

Payments per results. I haven’t seen this anywhere, except with my own projects, but I believe it’s how good teams should be structured: everybody must be paid for results, not per hour/week/month/year. If you want me to be truly motivated you have to invent a payment structure where my paychecks will correspond to my results. I do realize that this may require you to change the entire management system, so I don’t absolutely insist. But you have to remember that as long as you pay me only for my time I will try to do my best to steal from you use it for my own benefit.

Career path. I have no problem starting as a junior developer, but I have to know exactly what my future is and when it will happen. I want to become a CTO, no matter what. And it’s not about the title. It’s about the amount of technical authority and responsibility I will have. I want it all. If I don’t see a clear path to achieve that, I will be very demotivated and will treat my job as temporary. I will always be looking for a better place, where it’s easier to become a CTO. So it’s your job to make that career growth obvious for me. If it will never be possible for me to become the CTO, make that obvious too. The truth is better anyway.

A strong manager is someone who is ready to fight for their own ideas, rights, thoughts, and decisions.

A strong boss. This is probably the most important requirement I would have. I can’t work under a weak manager, it will seriously demotivate me from the first day. I will probably write another blog post about what a “strong manager” is, but in a nutshell it’s someone who is ready to fight for his or her own ideas, rights, thoughts, decisions, etc. A weak manager is one who is swimming with the current. Working under such a manager is a huge frustration and a waste of time. I will be demotivated and no amount of money will keep me interested.

These things don’t matter at all, I won’t even ask about them:

Mission and vision of the company

Business domain

Tech stack

Location

Company size or structure

Race, gender, sexual orientation, religious or political beliefs of people in the team

Financial status of the company

Of course, I don’t think that this list is applicable for everybody. Other programmers may have some other points or may disagree with mine.

P.S. I would most probably stay away from a business involved in something I consider unethical, like corruption, gambling, crime, etc.