So think of a stack as an isolated environment/context with different configuration with the same underlying program/infra*. If you want different infra without a lot of dynamic then you would want different projects. Basically can have projects/admin, projects/dev, projects/prod and can just have a single stack. Then if they need to reference each other you can using stack references. Now if the infra is similar or you want to have a single program with more dynamic infra you can have a single project with the same program (maybe more if's/loops for dynamic stuff) and the environment is split using stacks (admin, dev, and prod). Then you would select the stack and it would run just for that stacks config. You can still reference each stack as well if necessary from others.