I worked on a large programming project for a few years which was distributed over various locations on the internet. I've since moved on since it devolved into bickering factions without any real leadership. It could have used a lot of the points you brought up here (esp "Lead, Follow, ..." and "Learn other jobs").
The best thing about the work was: The golden rule (i.e. mentoring, debugging, etc. when others needed it the most). Nothing beats a cooperative team environment. The worst: Infighting over, or just plain usurpation of new development work while leaving the scraps (i.e. user documentation, integration/system/regression testing, etc) to others. It's been noticed a million times before, but things just seem to work better when there are small teams which are located together. (I'm assuming this is true in the military as well).
Update: Hit "Create" too soon and needed to edit a little.