Can someone explain how and where to use a Workflow Orchestration Engine ?

These are useful for tasks that can last an arbitrarily long amount of time. Think about the process of signing up a user and waiting for her to click on a email verification link. This process can literally never end (the user never clicked) but more commonly it takes a few minutes.

It's easier to implement these things if you can write the code like:

   await sendVerificationEmail();
   await waitForUserToClick();   // This could take forever
   await sendWelcomeEmail();
If you do the above in a "normal" program, said program could stay in memory forever (consuming RAM, server can't restart, etc). The workflow engine will take care of storing intermediate state so you can indeed write the above code.

The other option is to implement a state machine via your database and some state column, but the code doesn't look as pretty as the above three lines.

Note that this particular tool seems to be more declarative than my example above (it uses JSON to do define the steps), so instead of using an `if` statement, you'd need to declare a "Decision".

Hope this helps!

So is it like https://github.com/uber/cadence, AWS SWF, Amazon Step Functions?