Does anyone have any tips on how they manage maintaining development state across multiple machines?
If you're an emacs user, you can put an emacs daemon somewhere accessible and connect emacs clients from both machines. This allows you to continue on your work when switching machines without even saving.
Vim doesn't have the same type of server functionality, but if you open up vim on a file that another vim process has opened, it'll ask you if you want to open it up in the same (maybe unsaved) state the original process has and so continue to work on it.
You can also work from tmux.
There's many ways to go about this depending on what you consider to be the "development state" you want to preserve (like, does it include the graphical windows and optionally their positions?), but the simplest for me still seems to be to avoid the whole issue and work almost exclusively on the laptop.
Rather than deal with syncing environments, etc. why not just use the same one all the time and remote to your desktop when you want to use your laptop?