Как организовать модель Development, Staging, Production?
есть центральный репозиторий (гит\меркуриал на мой взгляд подойдёт лучше, чем СВН)
новая фича == новая ветка.
каждый разработчик работает локально. как только фича на его взгляд готова — создаётся пул реквест и какой-нибудь опытный разработчик проверяет код и заливает его на тестовый сервер. после того как тестировщики прогнали тесты — деплой на продакшен.
и умоляю, никаких «заливать по ФТП на продакшен». это обязательно выйдет боком в самый неподходящий момент.
Разработчики должны иметь свое изолированное окружение, обычно локальное
Дальше неплохо иметь промежуточный dev сервер, как для последнего прогона тестов, так и для интеграционных тестов
Далее dev копируется в продакшн, или снепшот из продакшена копируется в дев и они меняются ( если что можно мгновенно переключиться в старый )
Заливка из VCS только в дев.

Можно ли ставить дев и продакшн в одной среде зависит от того когда тестируется производительность и прочие нагрузочные вещи. Если до заливки в дев, то можно, иначе — нельзя — есть риск завалить тестами или кривыми изменениями.

Я бы сделал один сервер в продакшн, второй в реплику и третий дев. При сем дев и продакшн менял местами и бекапил бы их вдруг в друга, а реплика имела бы два контейнера или набора серверов соответствующие двум другим машинам.