Timer for sequence of events

I need to program a series of events, not many, maybe 20 events starting and stopping. This happens over the course of around 5 minutes once a trigger has occurred. Once the sequence is happening it'll run to the end with no need for interrupts.

This will be pretty simple to do with the trigger being checked in the loop then a whole sequence of delays but that seems really inelegant. Any reason not to do this way? I have had a look at millis(), might that be a better way? Can't quite get my head round how it will do the sequence.

Basic flow will be a slightly more complex version of:
trigger->wait 5s->start event 1->wait 15s->start event 2->wait 180s->stop event 1->wait 25s->stop event 2->go back to waiting for trigger

nickjb:
Any reason not to do this way?

The only advantage that millis() has over the delay() is that it is non-blocking so it can respond to events during the seqeuence. If you don't need it to respond to events then there is no need to use the non-blocking approach other than for knowledge and experience.

Basic flow will be a slightly more complex version of:
trigger->wait 5s->start event 1->wait 15s->start event 2->wait 180s->stop event 1->wait 25s->stop event 2->go back to waiting for trigger

For the non-blocking approach, a state machine would be appropriate. millis() can be used to keep track of the time of the state changes. When it's been a certain time (5s, 15s, 180s, etc.) since the last state change, do start/stop an event and move to the next state.

If for instance you for some reaon needed to interrupt the sequence, then the blocking nature of Delay() could be problematic.