The methods rank(), ready() and finished() in AbstractModule have a greedy implementation which means that every method call walks through the whole workflow multiple times. They should cache their states, if this turns out to be a performance problem.