Separate terraform code for managing different parts of the infrastructure for a given environment also make sense to ensure blast radius is reduced and un-related (or loosely coupled) terraform code can be independently evolved.
But breaking terraform code into separate part also takes away the ability to orchestration the infrastructure creation (since now tf does not know the dependencies). Maintaining current infrastructure becomes easy due ability to independently change the part of the system but creation of a new environment from scratch become difficult.
Option you specified is surely the most useful among the available options.
But even this option does not seems to aid execution order of the dependent terraform code bases. Dependency order is implicit and is not clear in this option. New environment from scratch will become painful as dependencies are missing.
Do you suggest any improvement to retain the ability to orchestrate entire environment while allowing to update the part of the infrastructure independent to each other?
(Terragrunt seems to provide such a dependency management and also ability to apply-all or plan-all commands, but want to check if there are other approaches as well being used natively while using TF).