I've been asked this question a number of times since making my offer to travel around and do some free work for those that were fast enough to get their offers into my inbox last week.
Why work for free?
Let's shorten this and ask
Most people will respond to this question with an answer involving money, and those that don't are either lying or already rich because the world does not operate around good will and pixie dust.
You can follow this up with another question
Do you enjoy your job?
Sometimes you get a genuine yes for this question, mostly with founders, small start-ups and independent developers, sometimes you get a yes from full-time employees and on digging into this yes you can find something interesting out by asking the question
Why do you enjoy your job?
I very rarely hear "We get to build great stuff" or "I learn a lot every day", it's usually "Oh, it's not perfect but I do get all the free coffee I can drink at my workplace", or "I have to sit in a lot of meetings but I find it fun to play the politics to get my preferred technological approach into the software", or "I don't get to write much code any more, but it's fun trying to work at the high level instead of the coal face"
Sometimes you'll find that they are genuinely saying the things above and meaning them, sometimes you'll find that they are merely rationalisations that we've built up so we don't spend every day weeping silently into our (free) coffee.
It's fair enough, our job is to build software - not have a great time pontificating and learning about the newest and latest shinies and most people working in our industry have realised this. Incidentally this is why the phrase "we need to be pragmatic" has crept into our dialogue as a common weapon to be wielded against anybody insolent enough to suggest doing something differently.
Some of this isn't fun, but what generally ends up mattering to a developer is that the good things outweigh the bad - things like
We've already established that a lot of developers work because they find what they do interesting. There is an inherent challenge in building software, managing complexity, managing expectations, managing managers and balancing all that managing against the task of actually building software. Sad fact of life is that at most organisations with more than 12 people in them, the negatives mentioned above end up outweighing the positives and we fall back on the rationalisations I've already mentioned.
So, back to the heart of it
Why do you enjoy software development
Personally? The main reasons I enjoy software development are mentioned above, but my personal bullet-point list is
It is hard in a long-term contract to be able to do the above sometimes, a lot of products I'm called to work on are never going to be seen by a real human being outside of the company, a lot of the products are being sold to people who want to spend money to manage their money that they made by moving money around and aren't making an impact on any real hhuman beings (It's where I get a lot of my money from so I shouldn't complain too much).
It's hard in a long-term contract to be learning constantly from the actual work at hand, it's hard to be constantly teaching. After a month of work with the same team, you've had some massively accelerated information share, worked out how best to compromise with each other and you're lucky if you get any external input (this sort of siloed development is too common). This is okay, and it is something I have ended up being a part of many times and I've been a part of many such teams where we have gone on to release good solid software to satisfied customers and this is not to be understated.
It is hard in a long term contract however to not become stale, and I don't want to be stale, I want to carry on being relevant, I want to continue being knowledgable, I want to keep on being told I'm wrong and learning from that, I want to be a vector of external ideas - as a friend put it recently "a cross-pollinator".
I want to do the bits I enjoy for a few months without too much of the stuff I don't enjoy.
Why do it for free then?
I want to cram a whole pile of experience into a few months, I want to be a better developer, I want to work with real teams on real things and I want to trade experience with those teams - that is my payment and this will also add to my long-term value.
It is still not a one way trade if I am not being paid in currency, it is still a trade that sees both sides profit and when it comes to delivering value to paid clients later in the year it will carry on paying dividends even then. The relationship has changed though, and instead of being an external consultant who is being paid to be there and whose value must be extracted even if it means resentful developers, I am an external agent of knowledge sharing and I am there because I want to be there.
Not only that, but I can't actually make enough room in my calendar to make room for all the offers and I can therefore squeeze an great amount of experience into a small space of time. The new ideas, the knowledge and the new skills this will tender is worth a whole lot more to me than currency.
So why work for free? It changes the trust-relationship between me and the team, it makes my motivation obvious to those involved with me and I can learn a lot more in a smaller amount of time.
If I was rich enough to retire, this is something I would choose to do - and that is something we should all be so lucky to say about our jobs.