Use a generic worker
All the workers use the same codebase, but we assign only one processing step to each worker at startup. We could instead allow a worker to handle all (or part of) the processing steps and let the queue manager give it the most adequate job.

By the way, the current way of doing is a particular case, where the set of supported processing steps for each worker only contain one element.

In the transition, we could have part of the workers working as of now, while some other workers are "generic", or manage a set of several steps...

The benefit would be to make it a lot easier to handle the deployment and scaling of workers, and avoiding lazy workers.
Use a generic worker: All the workers use the same codebase, but we assign only one processing step to each worker at startup. We could instead allow a worker to handle all (or part of) the processing steps and let the queue manager give it the most adequate job.

By the way, the current way of doing is a particular case, where the set of supported processing steps for each worker only contain one element.

In the transition, we could have part of the workers working as of now, while some other workers are "generic", or manage a set of several steps...

The benefit would be to make it a lot easier to handle the deployment and scaling of workers, and avoiding lazy workers.