It is very simple. The build phase has to be that way because the parent component’s build_phase constructs the child components. You couldn’t call the child’s build_phase before the parent’s build_phase because they the child objects haven’t been constructed yet. An you need a constructed object to call its method.
The ordering within the other phases should not matter, except you might want know that the top level’s report_phase comes last.