This sentence alone
I want all the developers and robot to have the identical environment for both development and production
Docker. I'm a fan of snaps for deployment of certain assets but you cannot develop inside of a snap, they're read only and take a bunch of time to generate each snap (think 20-30 minutes).
Snaps are for deployment (usually in the cloud, but also on robots/IoT) and cannot be used for development from their read-only state packaging up the entire code/dependencies around Ubuntu Core. The general community uses Docker by in large and OSRF even provides base images on DockerHub to pull from for base, desktop, and specialty installs https://hub.docker.com/_/ros.
Docker is pretty easy to get started with, here's an example of building one of my packages in docker: https://github.com/SteveMacenski/slam.... As you can see, its < 25 lines. Launch the container and then you can run your ROS packages (and/or create an entry point so its automatic).
Edit: More info on snaps and ROS can be found here https://snapcraft.io/docs/catkin-plugin. Analogous to my docker example, here's a snapcraft yaml I use for deployment of the same project https://github.com/SteveMacenski/slam.... Feel free to use those two as testing grounds to get the hang of it since I happen to use both in this particular case