Excellent piece. I have been working from home roughly for the past 4 years. Have worked on my own product alongside working on client projects.

I am not very disciplined by nature. If I am able to put in 4-5 hours of concentrated code in a day, then I am extremely satisfied.

Below are some highlights of my experience.

Exercise replaces commute:

In Indian metros these days, commute to work is a curse. And people suffer from it. On an average (anecdotal) people commute 1.5 hours a day. I am really really thankful, I don't have to do that. Rather I use that time for exercise, alternating between Cardio and Strength exercises on adjacent days.

Routine:

Wake up at 7:30. Go for exercise at 8:30. Breakfast at 10/10:30. Start work by 11/11:30 AM. But once I start work (which includes communication, sysadmin work, tax etc. work and of course coding), I am at it till roughly around 6 or 7 PM.

Distractions:

Social media is a modern day curse. And people who are able to conquer it, will rule the world. I have had my weak phases. But I have mastered it to a reasonable extent.

A simple rule 'No Facebook till 5 PM' has served me very well. I may check twitter some times during the day, but unless there is some true breaking news, or I am in my weak-easy-to-get-distracted phase, I am not much affected by it. One reason could be I post less on twitter. So have less post posting anxiety of counting RTs and reactions to it :-)

And BTW the rule for FB applies to HN as well. But somehow HN is far less addictive (and not at all in that bad way) than FB. Typically my evenings are for HN. And of course, I am so thankful I have it. As it offsets the effects of not being in the know of the tech Industry, because of not going to a place to work.

Family:

I don't have a very strict rules. So my family keeps on walking in all the time. Particulatly its summer now and kids have vacations. I don't mind it, if I am doing some communication kind of work, or (ironically) if I am too deep into my code. The way, I interact with family, does not put any pressure on me, when compared to say communicating very formally. So I could be answering them, while I am in the deepest recesses inside my mind, solving a coding problem.

On the other hand, If I am frustrated, by failed efforts of not being able to concentrate hard enough then that's another matter. Then I am quite irritable, and I share that with my family as well, and ask them not to disturb me.

I am very thankful to my wife here. Who has almost mastered the art of communicating with me during work with minimal impact :-)

Advantages:

Advantages are many. Main thing is that, your time is yours. You love the freedom. And would never want to trade it with commute-to-work if possible. All the ones which the Matt's essay mentions apply, e.g. afternoon show movies, kids can walk in with their codecademy.com doubts (that's one of their summer tasks BTW :-)), easily able to attend to a need by a family person (e.g. medical need, which happened last month).

Also the main thing i.e. work, also gets done very well. And if you can focus, you will be very very productive. As I said above, I am very satisfied if I have had a day of 4-5 hours of coding.

Disadvantages:

Self doubt - Occasionally I have doubts, if I am missing on something by not going to work. Especially was a bit concerned about my business communication skills suffering because of it. Written word over emails is fine. But was worried about the verbal discussions part. This was true for the initial year of working from home.

But now with the passage of time, I am more assured. I do have once in a few months face to face meeting with my co-founder. Also there are other business face to face meetings, with an approximate average of once a month.

I do socialize with people in the park, where I go for my runs. And I discovered some of them, also work in the same mode.

So if you can manage to be productive and are able to work, the disadvantages are not many. Even philosophically speaking, why should the information age workers work in the same way as that of industrial age workers?

Edit: Format. HN text area input does not deal with new-lines in an intuitive way - some times you have to give two.