A boolean flag could be added in the Serde, where upon the first time configure() has been called, the second time it is called, it will be a no-op (because
isConfigured has been set from false to true). This approach might be simpler to implement because the upgrade path is more straightforward.
It is important that the configure() operation is idempotent.
Another issue which is present is that two Serdes could not be configured with different config values. In order to resolve this issue, the global StreamsConfig must contain not only one configuration of Serdes, but several, each for a distinctive Serde. This would allow individual Serdes to possess different configuration values.
Upgrade path will be decided once the alternative has been selected.