MartianCraft has been my work home for nearly 10 years; I started with the company immediately after college and haven’t looked back. And since MartianCraft has always been a fully remote company, I’ve learned a lot about remote software development and remote work in general over the years.
It would be a lie to say that I’ve perfected remote working, but I have gotten pretty close — thanks to a good office setup and day-to-day work/life balance. Join me as I share my setup and what I use every day to help myself be as productive and efficient as possible.
The Desk and Office Setup
A good setup always starts with a dedicated space to work. It’s really important as a remote worker to mentally separate work-time and not-work-time, and having a designated work space helps with that. If you can’t dedicate an entire room to your home office, a smaller space or the corner of a room will do, as long as that space is dedicated to work. In my case, I have an “office” that’s shared with an exercise space with a treadmill.
Last year, I decided to invest in a motorized standing desk and ended up choosing the UpLift V2 standing desk with a walnut tabletop. This desk has been awesome. It’s sturdy and easily accommodates all my gear, and I can lift it up to standing height when I want a break from sitting. Being able to stand has proven to be very useful, especially during those long days when I spend more time at my desk than normally.
Setting the room and desk up is also important — most everything I need to do my job is within reach and readily available. On my desk sit two HomePod minis in stereo pair, an iPad mini that I use to write notes, and good lighting so I can easily see everything (especially important when I need to close off my west-facing windows on hot summer days).
I’ve chosen to decorate a lot of the walls in my office with old Apple posters from around the time when Steve Jobs returned to Apple — the golden age of Apple is one of my favorite eras in computer history.
The Hardware
I spent the better part of 2021 planning what I would do when I could get rid of my aging 2013 Mac Pro and replace it with an M1-powered Mac. That plan led to me entirely re-evaluating my hardware and figuring out how to replace all of my aging equipment (including my beloved 27-inch Apple Thunderbolt Displays).
My current setup revolves around two monitors that I purchased this year, both 27-inch LG UltraGear 27GN95B-B monitors that are 4K and 120fps capable. They offer dual DisplayPort connectivity and HDMI connectivity. I’ve ditched the stands on these monitors in favor of a dual VESA mount on my UpLift desk.
The left monitor is connected via a single Thunderbolt 4 cable to my 2022 Mac Studio M1 Ultra (128GB memory; 4TB SSD). I’ve achieved this with a CalDigit Thunderbolt 4 Element Hub and OWC Thunderbolt dual DisplayPort Adapter.
A KVM Switch lets me use the second monitor with the MacStudio or with the 2021 MacBook Pro 16-inch M1 Max (64 GB RAM, 2 TB drive) plugged directly into it. The Mac Studio also connects to my OWC Thunderblade SSD RAID drive, which was a recent acquisition to replace a Pegasus R2 RAID I’ve had since 2013. The second monitor also has an Apple TV plugged in via HDMI, allowing me to test tvOS apps, listen to music, or catch up on live news and podcasts while I work.
The Software
I am an iOS engineer at heart, but my time is spread among all of Apple’s platforms (iOS plus macOS, watchOS, and tvOS) — and I dabble in web and server development as well. As an engineer working across multiple platforms and someone who likes to automate repetitive tasks, I rely on a lot of software to get my job done:
Developer Tools
- Xcode for writing Apple platform apps
- BBEdit for quick text file edits
- Nova for larger text file edits or web projects
- Proxyman for inspecting web API responses from apps
- Tower for git and seeing/managing diffs before committing
Productivity/Reading Tools
- Reeder to read
- DEVONthink for my paperless setup and importing PDFs
- Apple Notes
- GoodNotes used on iPad mini to take work notes throughout the day
- Calendar
- Reminders
- Ulysses for longer-form writing
- Diagrams for wireframing ideas and state machines
Design Tools
- Adobe Creative Suite, specifically Illustrator and Photoshop to export and cut assets as needed
- Sketch for editing vector-based artwork and exporting at various sizes
- Figma for viewing and reviewing design documentation and wireframes
- PixelSnap for measuring views when pixel-perfect designs are needed
Communication Tools
Utilities and Scripting Tools
- Shortcuts
- Paste for storing multiple clipboard items and history
- HomeControl for controlling office lights and scenes from the menu bar
- CleanShot X for taking screenshots — a must-have modern macOS utility
- MicroSnitch for notifications when webcam and microphone are in use
- LittleSnitch to see what my macOS web traffic looks like
- ChronoSync to sync files between my development machine and file server on a schedule
- Bartender to clean up my menu bar on macOS — I hide everything except the Shortcuts menu bar extension
- CloudMounter to mount my work Google Drive account on macOS
- Carbon Copy Cloner to help with my backup process (more on that below)
- Keyboard Maestro to help me automate some tasks in my daily workflow
- Hazel to clean up files on my desktop and perform folder-backed automations
Backing up
Backing up is an important part of my workflow, and I accomplish it in a bit of a paranoid fashion. I have three stages of backups for my development machine and my file server. The first stage is accomplished through Time Machine, which is always connected and performs regularly scheduled backups. The second stage is accomplished through Carbon Copy Cloner, which runs nightly and makes a bootable clone of my main drive and a copy of the contents of my iCloud Drive on an external drive for safekeeping. The third and final stage of backup also occurs nightly. After the CCC backup, Backblaze stores all my contents and backup drives on its offsite backup.
Fortunately, I’ve never had any modern drive or hardware failures that required me to recover backups from anything other than Time Machine. But in the event that a failure does occur, I’m prepared.
Having an offsite backup is extremely important in case fire, water damage, or a natural disaster destroys everything onsite. Being prepared for whatever comes gives peace of mind.
The Work Day
I typically start my day “at the office” sometime between 8am and 9am. Mondays are when most of my meetings happen, followed by a few hours of development work. Tuesday through Friday are standard development days with scattered meetings that can pop up. I typically check in early in the mornings, then grab a light breakfast, and then dive into nitty gritty development tasks until I break for lunch.
I then return to finish out the day, usually ending sometime between 4:30pm and 5:00pm. On very rare occasions, I will return after dinner to wrap things up if I ran an errand or did something else that broke up my workday.
Getting out and about is one of the perks of remote working. I often piggy back off my lunch time to run errands and get in a quick walk. Exercise is extremely important to me, and being able to walk during lunch and then get in a much fuller exercise regimen in the late afternoons helps keep me happy and healthy.
Working remotely certainly is a great gig, and I’ve enjoyed it for years. But it also takes a lot of responsibility. When first getting started, it can take time to get into the proper mindset for remote working, to get the setup fixed to your liking so you can actually be productive, and then to follow through. Getting sidetracked is common, but it helps to ensure that you have an office space that your brain associates strongly with work.
My biggest piece of advice for those new to working remotely: Take your time, set up your workspace, and then do the work as though you were in an office — an office that happens to be fixed to your liking and filled with improvements to your personal quality of life.
When you’re happy with your setup, your productivity will follow.