Как произвести разделение труда, чтобы потом все работало?

Обычно есть: (a) команда работающая в скопе всей системы - архитектурная команда; (б) команды (люди) рыботающие над отдельными модулями (каждый ответственнен за набор компонент).

Другое возможное разбиение ориентируется по скилзам - т.е. UI-одни, серверная часть - другие.

Мы приняли подход, когда разработчик работает над задачей с начала до конца. Т.е. ответственнен за компоненту начиная с анализа, до дизайна и т.д. При этом на различных участках процесса он работает с так называемыми консультантами - попросту люди, которые наиболее опытны в определенной области и могут обучить, помочь что-то сделать и т.д.

Есть другие подходы?