Yeah @colbert2677 covered it pretty well. The short of it is that initialization sequences are utilized to “set up” whatever the module needs.
Analogy: Think of a firefighter. When a fire occurs, the firefighter “initializes” by putting on all of his/her gear and getting into the truck. Only at that step is the firefighter ready to fight fires. If the firefighter tries to fight fires before fully getting ready, there’s gonna be some trouble.
So in a similar light, modules that talk with each other need to make sure that they’re ready to talk with each other.
In my framework, there’s a separate lifecycle step called “Start” which is used after everything has guaranteed to have been initialized.