I've been working remotely at home as a software engineer and as an engineering director at Minted for three and a half years.
Obviously, opportunities to work from home are only possible at companies supportive of the arrangement—it helps if everyone is on Google Hangouts or Skype and if your coworkers are conscious enough about remote employees to remember to dial you into meetings.
That said, these are habits I've built which I think have helped me:
- Act as if you're in the office. Act identically to the way you'd act if you were going into an office. Find childcare for the hours you're working. Don't distract yourself with things that you wouldn't do in the office.
- Keep a timesheet. It will help yourself stay productive, and not work too few hours (or too many). You'll also get a record of what you've done if you need one. I use https://old.toggl.com/ (the UI of the new one is much harder to use).
- Broadcast what you're doing. Let as many people as you can know what you're working on. The information may be useful context to them, they may be responsible for supervising you, they may depend on something you're doing, or they may just be curious.
- Reply quickly. Don't make others follow up with you more than once. You'll overwhelm yourself with people asking for your status and annoy everyone you’re working with. Reply quickly even if you can't fully satisfy someone's request. Negative replies like "I can't do this, I'm doing [something else]" or simple acknowledgements like "got it" or "thank you" are better than no reply, because your counterparty at least knows you received and understood their message.
- Be hyper-concrete. Use proper nouns, correctly-spelled filenames, URLs, screenshots, (and for software, correctly spelled function names). Use phrasing that avoids pronouns like "it"/"that" or ambiguous nouns like "Matt's email"/"the function"/"the data." Use concrete verb phrases and clauses like "an error dialog appeared which said [copy and pasted text]" or "this error dialog appeared [screenshot]" instead of vague ones like "it broke."
- Use numbered lists. Referring back to "option 1" and "option 2" in a list you previously wrote is concrete and succinct.
- Buy a headset. Hangouts and Skype work really well, and even better when you have a headset.
- Anticipate people's questions. Think strategically and/or empathize with your coworkers to figure out what kind of questions they will want answers to, and look for opportunities to work answers to those questions into everything you communicate.
- Write publicly. Working remotely involves a lot of writing, so you need to become better at it. As much as possible, write things down using tools that your team uses for collaboration like Google Docs Drive, wikis, bug trackers, etc. Writing everything down also helps you remain more interruptible, which helps let you reply quickly, and then come back to what you were doing before without losing as much context.
- Choose words as if the world were watching. Use phrasing that you'd be comfortable with the whole company (or when possible, the whole world) seeing. You never know when an email you write might get forwarded to someone you didn't intend to see it, or when you might want to forward an email you wrote to a new hire instead of having to repeat yourself.
- Read carefully. Pay attention to what is sent to you as if you were taking an exam.
- Ask questions quickly. If you don't understand something you read, ask for clarification immediately. Ask concrete questions. If at all possible, don't say "I don't understand" or "What should we do?" Instead, do your best to guess what the other person meant, like: "Did you mean [screenshot 1] or [screenshot 2]?" If your counterparty means neither of those things, they will let you know, because you will still have successfully communicated your confusion.
- Use strawman proposals. One way to avert back and forth discussion is proposing a plan, even if it's a terrible one. It's often easier for others to criticize and modify an existing plan than it is to come up with one entirely from scratch.