I work from home. Every day. Mostly, I do software development, typically Ruby on Rails. Most of the time, I have large segments of quiet so I can get things done. But occasionally, I have an office buddy or two or three.
He's not too helpful for getting work done, but I manage. Here's my office buddy:
That's TJ. He's 6 in the latest segment (he's 7 right now), but he's watching himself on picture-in-picture, which goes back in time. The oldest segments are from when we were still in our apartment. I was working from home then too.
I think the most important thing to consider when working from home is to let people know you have deadlines. If you don't have deadlines, make some so you can tell other people you have them. It's just important to be on the same page.
I'm sure it's good to have a fixed schedule of work segments/sessions, but I don't. I just define them when I can, which is usually fine.
Another important thing, at least for my kind of work, is to have a backup plan. I just mean, redundancy. I have a primary and secondary internet service; primary and secondary telephone service; primary and secondary data storage; etc. Many of these overlap with mobile service that I already want to have anyway.
Bottom line, you can't be too prepared with Information Technology. Redundancy is your only defense.
Here are a few of the tools I use to keep up my productivity:
git on the command line for most versioning. But sometimes it's nice to get an overview in a pretty UI. For that, I use SourceTree.