Непосредственная опция, которая приходит на ум, - это спецификация пользовательского интерфейса, существующая вне приложения. Когда приложение запускается, пользовательский интерфейс генерируется во время выполнения. Хотя это больше работы, чем статический, скомпилированный пользовательский интерфейс, он также намного более гибок в долгосрочной перспективе, учитывая ваш конкретный жизненный цикл программного обеспечения.
Существуют каркасы, которые существуют исключительно для этой цели: XUL является одним из хорошо известных примеров.
Вы могли бы, однако, свернуть руку самостоятельно. В конечном счете, это дает вам возможность разделять пользовательские интерфейсы ваших клиентов.