This method encapsulates the logic of determining which upgrade steps should be applied, and then how they are applied. Again, this should make it easier to unit test this logic.