Sometimes people ask me what the difference is between the work I do on my paid job during the day, and working on the open source project in my spare time. They don't understand why I would have a hobby that's not (or not much) different to my job.
But there are many differences between the two, and those differences decide whether working is fun or just work.
Most jobs require you to work a certain amount of hours a week. Or you have a tight schedule which most of the time gets tighter every time the managers and salesmen get together for a meeting. You're required to be productive all the time without a break. Because it's hard to measure the productivity of employees without using the time they spend on projects, you're usually paid for your time.
But I find myself more productive if I can spend the time I have the way I want. Often, when I'm trying to solve a problem on the open source project, I take a break, watch a video or just close my eyes while listening to some music. Usually, that break doesn't last longer than a few minutes because during that break I get an idea on how to solve the problem. Imagine I would do the same on my job: my boss walking in while I watch a video or leaning back with my eyes closed. :-)
Ok, I have to admit that sometimes it can take much longer until I can solve a problem. But the time I spend "doing nothing" is more than compensated once I know the solution. Because I then often work for hours, way past midnight until it is done.
On the open source project, I also don't have a tight schedule. I can choose the tasks myself I want to work on and take as much time as I want and need. Sure, there are tasks to do and issues to solve that I don't really find interesting but have to do anyway. But on the open source project, I can choose the time I want to do them myself, when I'm in the right mood for it. On the paid job, my boss chooses the tasks I have to do and the time I have to do them.
In an open source project, I usually get an immediate feedback from users. Every time I implement a new feature of fix a bug, I get comments from users almost immediately. Of course, that requires nightly builds so the users don't have to compile the project themselves. And I get bug reports way before you release a new version of your product, because the users help me test it on more systems and configurations than I could ever do it myself.
I had several bugs reported which I just couldn't reproduce, because they would only show up on e.g. chinese windows. Even if I had such an OS and could reproduce the bug, I most likely couldn't tell if I fixed the bug or not - the glyphs are completely unknown to me so I just can't tell what's right or wrong. With a nightly build, people who reported the bugs could download the next build after I attempted to fix the problem and report back if it really is fixed or not.
If a new feature is implemented, users report back on how they like or why they don't like it, how they would rather have it implemented or how they would improve it. With all those comments, I learn how the users use the product, and I also get to know the users themselves.
Also due to the direct contact with the users, I get valuable information about problems they have using the product. This helps designing and improving the user interface so that the users either don't run into the reported problems anymore or that they get good hints on how to avoid or work around the problems.
In the corporate world however, the only feedback you get from your customers is after you shipped your product. During the development process, you won't get any feedback from customers at all, so you have no idea if you're on the right track or not. In my last company, we didn't even have people who would test our products before we shipped them - testing was completely left to the developer (which is known to be a very bad idea). And of course, the products always showed that shortcoming - I called those banana products, because they mature at the customers.
Also the times you actually have contact with your customers, if ever, is only when there's a big problem which usually must be solved yesterday. So every time you have contact with a customer, that customer is either already very angry and upset, or you're on such a tight schedule to solve the problem that you yourself are stressed and not really in a good mood. And really, that's not the best way to get to know your customers. As a developer, you won't hear from your customers when they're happy - the sales department only passes the bad comments on to you.
There's a big difference between working in the office or working at home:
In the office: