О, да!
В моей последней работе, при работе над довольно крупным проектом, у нас была команда архитекторов, которая создала всю структуру, которую мы использовали. Они разработали собственный ORM (около 2000 года, Hibernate не был столь же повсеместным, как сегодня) и пользовательскую среду RCP на основе Swing.
ОРМ не так уж и плох. Они были просто чрезмерно обеспокоены циклическими зависимостями, поэтому в некоторых случаях у нас было довольно плохое время для выражения нашей модели предметной области, поскольку бизнесу требовались циклические зависимости (бизнес-объекты могли проходить в обоих направлениях между различными административными единицами).
Каркас Swing был адом. Они пытались реализовать компонентную модель с чем-то похожим на иерархический контроллер. На бумаге это выглядело очень хорошо: вы можете иметь компонент, который можно использовать повторно. Модель, взгляды и контроллер были четко разделены. Но на самом деле инфраструктура не обеспечивала достаточной гибкости, поэтому нам пришлось сохранять ссылки на JComboBox, чтобы получить данные через уровни абстракции. Мы должны были написать 4-5 классов для каждого маленького кусочка пользовательского интерфейса. В некоторых случаях потребовалось несколько дней, чтобы добавить флажок в форму. Отладка была ужасной, поскольку процесс проходил через 15-20 классов для каждой простой операции. Удивительно, но спектакли были в порядке.
Хуже всего то, что каждый компонент Swing был обернут в слой абстракции "на случай, если мы захотим изменить инструментарий пользовательского интерфейса"!