How does the App of Apps pattern work in Argo CD, and what problem does it solve for multi-application or multi-cluster rollouts?
Quick Answer
App of Apps is a pattern where a single 'parent' Argo CD Application's manifests are themselves just a set of other Argo CD Application resources — syncing the parent causes Argo CD to create all the child Applications, which then independently sync their own actual workloads. It solves the problem of bootstrapping and managing many related Applications (e.g. one per microservice, or one per cluster/environment) as a single Git-tracked unit instead of manually creating each Application by hand.
Detailed Answer
An ordinary Argo CD Application points at a Git path containing Kubernetes manifests for a real workload (Deployments, Services, etc.). In App of Apps, the parent Application's Git path instead contains a set of Argo CD Application custom resource manifests themselves — so when Argo CD syncs the parent, what it 'applies' is the creation of several child Application objects in the argocd namespace, and each of THOSE then independently reconciles against its own target Git path/cluster/namespace, syncing the actual workload manifests.
This is commonly combined with ApplicationSets for even more dynamic generation (e.g. templating one child Application per entry in a list of clusters or a Git directory structure), but the basic App of Apps pattern alone already solves a real operational problem: onboarding a new microservice or a new cluster becomes 'add one more Application manifest to the parent's Git repo' rather than manually running argocd app create by hand for every new service, which doesn't scale past a handful of applications and isn't itself tracked in Git.
A nuance worth knowing: because each child Application syncs independently once created, ordering/dependencies between them (e.g. a shared CRD needing to exist before a dependent Application's resources can be applied) require explicit handling — commonly via sync waves (argocd.argoproj.io/sync-wave annotations) rather than assuming the App of Apps parent enforces any particular child ordering by default.
Interview Tip
Mention sync waves specifically when discussing ordering — that's the mechanism that resolves the natural follow-up question 'but what if child A depends on child B existing first?'