Как правильно писать на Java/Scala/C#/etc?
На Java, особенно с использованием Spring Framework, нормальная разработка примерно такова
1) делим систему на слои: слой хранения данных с интерфейсом, слой бизнес-логики с интерфейсом, слой веб-приложения или веб-сервиса (к примеру).
2) Каждый из слоев обкладывается Unit-тестами (автоматизированное тестирование), при этом остальные части системы, на которые есть зависимости, выглядят просто как интерфейсы, которые можно «эмулировать» на время тестов (техника test mocking).
3) Интеграционное тестирование (автоматизированное/полуавтоматизированное тестирование) — несколько слоев запускаются почти в реальном окружении, и тестируются вместе наподобие черного ящика. Смотрим на то, как работает система в сборе.
4) Ручное тестирование всей системы перед релизом — к этому вы как раз привыкли.

Основная работа происходит на этапах 1 и 2. Цикл тест-изменение кода-тест — происходит обычно в течение нескольких секунд, так как Unit-тесты легковесные.

Цикл разработки, описанные вами, обладает одним серьезным ограничением — никакой автоматической защиты от регрессий функциональности. Для этого и пишут тесты.
Все дело в целях и объемах приложения.
Если вам нужен маленький Application — можете хоть JSP + Servlet использовать.
Если же большое приложение со множеством модулей, интеграцией с различными системами и гибкой системой динамически подключаемых модулей — это уже совсем другие подходы а-ля Spring + Hibernate + Maven + JBoss, разделение на слои, отделение модели данных от модели предметной области и т.д.
У Вас слишком общий вопрос для конкретных рекомендаций. Хороший архитектор выбирает средства по задаче.