Worked remotely for 11 years between 2 different jobs.
Personal Tips:
- Have dedicated work area if possible but change up the setting - Sitting in the same spot gets old fast. If you can, switch between sitting, standing, etc and also be able to go to a different room for a bit for a change of setting. If you have a laptop, feel free to lay on the couch now and then as a change, but don't put the TV, etc on.
- Routine is important - Wake up at a set time, get out of your pajamas, have some morning chill time before diving in. Don't simply roll out of bed and jump on the computer.
- Take breaks - It is easy to lose track of time and work through lunch, etc. Take regular breaks to reset your focus and stretch your legs.
- Focus on work and focus on stopping work - Stay away from distractions (twitter, etc) and focus on the work. When your work is done for the day, stop working. It is easy to fall into a trap of getting distracted and then feeling guilty and working longer to try to "catch up". Save the guilt and focus.
Communication Tips:
- Leverage chat apps like Slack, Hipchat etc for basic conversations. If there is a communication breakdown, things need to be more explained, etc: be ready to take the conversation to video chat (Google Meet, Zoom, etc).
- Have a dedicated video chat room for your team to quickly join. Put it in the description of your chat room and/or bookmark/pin it in your browser.
- Assume team mates are present but possibly busy. If you don't get an immediate response, they may be in a call with someone else, on a needed break, or focusing on work.
- Keep "water cooler" conversation to isolated channels to keep important team messaging front and center.
- Schedule Regular 1 on 1s with your manager. They should be doing this anyway.
Architecture and Other Thoughts:
- I've found having smaller durable dedicated product teams work the best at distributed work. It results in fewer distractions and fewer conversations needing to be had. Self empowered teams need less sign off and fewer meetings.
- Similar to the previous remark, microservice architecture works well for this too as there are fewer stakeholders that need to be involved with each deployment, etc.
- Have a strong culture of unit, integration, and contract testing to minimize panics that require a lot of synchronous communication. Be sure you have a CI/CD process that runs tests and can rollback deploys as needed.
- Know who to get on the horn if something goes wrong - bad data, failed deployment, etc. Not everything needs to be an all-hands.
- Replace analog tools with digital ones - use google drawings instead of whiteboards, use google docs with live editing to collaborate on ideas + you now have documentation.
- Regularly schedule needed meetings. Be on time for them. Cancel them if they are not needed. Keep them on point and concise. If someone hijacks a meeting with a tangent, have a protocol for moving the conversation to the end of the meeting OR taking it "offline" (i.e. outside of the meeting). Again, this is a good practice regardless of working remotely.
Those are just some tidbits off the top of my head from my years of experience working remotely.