Очень вариативно. В моем случае тогда я не работал по специальности, просто ОЧЕНЬ попросили. В том случае там почти не было интерфейса, как таковое проектирование в случае таких небольших программ тесно сливается с написанием кода. В случае больших проектов - все упирается в архитектуру и инструменты. Если это сетевая игрушка, то в зависимости от архитектуры и инструментария команда может делится на клиентов и серверных, на вьюшечных и на логиков, в случае веба частенько люди работают пресловутым фуллстеком при поддержке девопса для развертывания (либо для работы с докером). Как правило отдельных гуру архитекторов вообще не работающих с кодом мало где любят, поэтому проектирует систему как правило самый опытный кодер. По своему опыту могу сказать, что если конкретные интерфейсы (я говорю не про ТЗ и обобщенные хотелки заказчика) и проектирование будут выполнять разные люди, то будет срач, маразм, раздор, Мордор и беспросветный мрак.