My ideal setup is shockingly similar to a web application itself: I have a front- and back-end computer for all personal software development. As I reflect on this, I find it humorous that I've aligned myself with a setup that resembles so closely to how I write web apps.
My back-end "server" is an old gaming rig that I have repurposed. It sits in my basement with an ethernet connection placed right next to my home network. It is connected to a UPC so brownouts don't interrupt development. I have also changed a BIOS setting so my server will turn back on automatically whenever I lose power. All of this hardware helps keep my server online and always available.
The benefits of having a server for software development is multi-faceted:
- I can have as many front-end clients as I want and can pickup exactly where I left off (continuity)
- I don't need to install any software on my client computers except for ssh (consistency)
- Any heavy processing doesn't cause my client to overheat and scorch my thighs (power)
- The specs of the client doesn't really matter that much (flexibility)
The other really amazing feature of this setup is since I have a server to host my dev environment, it doesn't matter what front-end I use, I'll always pick up exactly where I left off.
It also makes long-running tasks easier to handle since I don't have to worry about my computer going to sleep while it's processing. For example, I can have a full ethereum node running in a tmux session and I don't have to worry about it getting interrupted.
My front-end clients consist of a few machines. I have a framework laptop that I purchased late last year. It is a fantastic ultra thin laptop that I would highly recommend to anyone interested in a similar setup. I have my primary gaming rig that I'll sometimes use when I don't want to switch computers. I also have an iPad that I can be perfectly productive using with this setup.
In order to make this workflow feasible, I need to move as much of my software tools into the terminal.
I accomplish this goal with a couple of tools:
- mosh (ssh alternative that allows for intermittent connectivity)
- tmux (tabs and window panes for terminals)
- neovim (IDE, tabs and window panes)
- zerotier (so I can connect to my server from anywhere)
These tools are essentially all I need to be productive. The only thing missing is the browser which I have to run on my client machines.
Overall this setup has served me well for years and its benefits outweigh the initial setup.