Какие действия начинаются в команде после слов, что приложение должно быть модульным и написанного ТЗ по функционалу и визуалу?
Решается вопрос с архитектурой, какой язык и фреймворк будет использован, какие объекты понадобятся, как будет выглядеть интерфейс, какие иконки нужны, какие таблицы в бд, как они связаны, что можно взять из готового, а что будет писаться с нуля и еще около тысячи мелких деталей...
Или все возможные функции должны быть запланированы сразу на 10 возможных лет, чтобы хоть как-то ответить на этот вопрос?
Нет, при наличии нормальной архитектуры программные фичи достаточно легко интегрируются с уже написанным кодом, собсно ооп как раз топит за низкую связанность, то есть максимальную независимость компонент. Если все +- в пределах канона ооп, особых проблем быть не должно.
Выбор бд, аренда сервака,
От задачи уже решается, в том числе от планового объема хранения, а аренда сервака скорее от предполагаемой нагрузки, которая тоже естественно будет совершенно разной для разный приложений.
а что нужно для того, чтобы внутренний функционал можно было удобно масштабировать?
Не накосячить при планировании архитектуры, остальное решаемо.