H>Теорию я сейчас сам почитаю ) , интересует именно практический опыт.
Использовал (уже было это legacy). В трезвом уме никогда бы не взял его в начальный проект (даже без опыта использования).
* Если вдруг у вас сотрудник посередине рабочего дня ушел в отпуск и потом вернулся, ваадиновская сессия будет потеряна. Соответственно, сотрудник будет созерцать "take note on unsaved data" без возможности повторить операцию (нужно запускать приложение и все делать ручками)
* Фильтрация на клиенте списка через сервер (банальная фильтр по подстроке, сокращает выбор из списка)
* Я completion так сделать и не смог нормальный (выбор в одном поле может заполнять несколько полей). Он к чему-то какими-то гвоздями прибит. Т.е. "модель" + "визуализатор" оно сделать не смогло. Это даже не говоря о том, чтобы выделять найденную подстроку.
* Zoom-in + Zoom-out приводит к потрясающим скроллбарам на каждом компоненте
* Layout клиента в пикселях (не понятно, на каком шрифте вычисленных)... Поэтому ХЗ, что и куда поедет.
* Вообще Layout отлаживать нетривиально.
* У них была какая-то забористая трава, когда они сочиняли таблицы. У колонок таблицы и у набора полей в одной строке своя отдельная жизнь. Для реализации таблицы нужно 3 модели реализовать (минимум!).
* Валидация у таблиц приниципиально отсутствует (т.е. непонятно, куда ее отображать).
* Судя по всему, "form validation" прибит гвоздями к фреймворку. И его отображение — тоже. Поэтому если я хочу выводить все warnings в отдельной области, нужно постараться.
* Их Property как-то странно типизированы. Половина property сделана generic (то ли method property, то ли что-то еще). Зато сам интерфейс property работает с object. А еще в этом Property есть метод setReadOnly. Рационального объяснения наличию такого метода в интерфейсе Property я не нашел.
* С клавиатурой плохо дружит. Какие-то окна пооткрывал, потом позакрывал. Потом нажал пробел. Интерфейс куда-то пропал (небольшой кусок где-то было видно, остального — нет).
* В 7-ке появилась куча статических аксессоров и черной магии. Например, у нас упали несколько тестов UI-компонентов. Там где-то конвертеры (то ли статические, то ли threadlocal) не зарегистрировались.
* Я не понял, как в application что-нибудь нормально заинжектить (глобальный на все приложение объект/коннектор/пул и т.п.). В сервлетах я это могу из startup listener поднять (вместе с сервлетами

). Как в vaadin'е — так сразу и не нашел. Если знаете, делитесь информацией.
* Я не разбирался, что там с security. Можно ли какой-нибудь запрос куда-нибудь подменить. И как оно с текущим Application связано.
* Challenge/response authentication не так просто изобразить. Нужно кастомный клиентский компонент писать. Брать challenge/response или пересылать пароль по http(s) — другой вопрос.
* Что-нибудь глобальное на клиенте прикрутить к сети — то еще приключение (в GWT, впрочем, тоже). Хотелось бы какое-нибудь банальное окно "а у вас связи нет" выводить с возможностью повторить запрос, например.
* Касательно аутентификации. Single-page application не дает сделать более менее безопасную галочку "save password". Нет, я понимаю, что это сразу небезопасно. Но хотя бы по сети этот токен не гонять на каждый запрос, а только при входе (банальный workflow: request -> redirect <...>/auth -> redirect application). Кука с долгоиграющим токеном дается только на <...>/auth и не светится в каждом обмене.
Вот как-то так. Это на маленьком простом приложении. Может, еще чего забыл.