Since graduating from university, I have been working remotely for different start-ups. There are a number of aspects that were unexpected:
Communication is actually really, really easy. Almost every article I see about remote work is about how to handle communication. The solution to basically every issue there is “keep Skype open while you’re working”. You can IM people if you need something quick, you can voice/video chat if you need to have a lengthier discussion, you can share screens if you need quick feedback, and it even saves your text chat logs going back a couple months. Throw in a web-based task or bug tracker (e.g. Trello, JIRA, PivotalTracker, even a Google Spreadsheet), and what more do you really need?
Design iteration moves slower. Even if you share screens over Skype, it’s not the same as putting something right in someone’s face and asking for their opinion. The communication overhead is negligible for bigger features, but if you’re making lots of small and subtle tweaks, it’s definitely easier when you’re face-to-face.
Remote work helps with documentation. Between chat logs, google docs, and emails, you get a lot of documentation work done “for free” that you’d otherwise have to go out of your way to write down.
Time zone differences have advantages! …and disadvantages. I’ve been working for companies in Berlin, Germany (six hours ahead of me) and in San Francisco, CA (three hours behind). It feels fantastic to have flexible work hours, but if I want to sleep in and start work at 11am, it’s 5pm over in Berlin and the work day is basically over. Keeping up regular communication is super important when working remotely; you need some work hours to overlap. On the other hand, sometimes the time difference works to our benefit: having a few hours where you know nobody else is working is great when you want to do a lot of code refactoring.
Remote work is easier if everyone is remote. One of the areas where remote work struggles a bit is when you have a face-to-face meeting that also includes a couple people Skyping in. For completely remote teams, this issue is avoided entirely; everyone is communicating through the same medium anyway. It’s definitely workable to mix face-to-face and video chat, but meetings flow better if you don’t have to. I personally believe this is why larger organizations struggle a bit with remote work; it feels more tacked-on than integrated.