take the timeout flow as common
optimize the strategy interface