I guess it's high time we started thinking about implementing a fully-featured controller supporting component pooling and possibly data caching. Such a controller would be useful for testing components that implement the init() life cycle method and also for the Workbench (caching of data fetched from remote sources might be useful for testing).
The primary feature of the controller would be pooling/ reuse of components according to the component life cycle.
Additionally, I think it would be great if the controller could implement some caching of data fetched by the data sources in a similar way it is done in the 2.x line web application (broadcasters). With such a mechanism, if fetching of some data is in progress, other requests for the same data blocks until the data is fetched; for further requests for the same data, it would be served from cache. I'm sure there are lots problems to be analyzed here (e.g what should be the keys in the data cache, intercepting processing of document sources, deadlocks?), but if we managed to implement such caching on the controller level, we'd be able to use the same caching mechanisms in all sorts of applications: Workbench, web application, DCS etc.