Tasks are not independent of each other. Tasks may need to be done in a specific order, and Relay can keep track of what has been done and what can start next.
The most common dependency is a finish-start dependency, which means that this task cannot start until the predecessor task has finished. Other types of dependency are also supported.
If a dependency isn't met, then when you indicate that the task is ready, it will be marked as "waiting for dependencies". Use the related task section to see what it is waiting for. When the dependencies are met, the task will be marked as ready.
Finish dependencies do not stop you completing the task, but it will not be considered that the task has truly finished until the finish dependencies have been met.
If a task has sub tasks, then the subtasks have an implicit start-start dependency on the parent task, and the parent task has an implicit finish-finish dependency on all the sub tasks. Or, in plainer words, you cannot start a task until its parent has started, and a task is not considered finished until all its child tasks are finished.
If you don't want this, use the Outline task template to group tasks together. Outline tasks do not have any dependencies.
In the normal case, dependency calculations will be managed without any manual intervention. However, if you make changes to dependencies while tasks are in progress, move tasks around, or add new tasks, then the dependency information may need to be recalculated. Use the check dependencies option from the project : menu to recheck dependencies.