Soar first elaborates, which means that it fires every rule that adds knowledge about the current state. This includes figuring out which operators it can perform. The operators are the actions that actually change the state.
Then Soar decides which operator to choose. This can involve computing preferences for various operators to see which is most preferred. If one operator is preferred then it is applied to the state, which changes the state. This ends the cycle, because it will cause new elaborations to fire.
If Soar cannot identify one operator to select, then it reaches an impasse. Whenever faced with an impasse, Soar creates a new goal of resolving the impasse. In effect, Soar calls itself recursively to solve the goal of selecting an operator to apply.
Soar can encounter an impasse when solving this new goal, which will lead to another new goal, etc. This leads to a stack of goals. Eventually Soar will resolve all the impasses. If necessary, it will search all possibilities.