What Motivates Me as a Programmer

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.

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?

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.

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.

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 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.