Exercise 3: Why Wrapping a Single Resource in a Module Can Be Premature Abstraction — Possible Solution ==================================================================== A module exists to package a SHAPE that's reused, composed, or complex enough to be worth naming as its own unit -- per the chapter, "reach for a module once a shape is actually reused, or genuinely complex enough to be worth naming." Wrapping a single plain resource, with no meaningful logic beyond passing a few arguments straight through to that one resource, doesn't do either of those things: there's nothing being reused (it's called from exactly one place), and there's no real complexity being hidden (anyone reading the module still has to open it to see the one resource block it contains anyway). What it DOES add is a layer of indirection: instead of reading the resource block directly in the configuration, a reader now has to follow a `module` block to a separate directory, open that directory's own `main.tf` to find the actual resource, then cross-reference its `variables.tf` to understand what each input argument does -- extra navigation and cognitive overhead for something that, unwrapped, would have been a single resource block sitting in plain view. The tradeoff being made: the abstraction's promised benefit (reuse, encapsulation, a stable "API" per the chapter's own tip-box) is paid for entirely up front, in extra indirection and files, without ever being collected, since the module is never actually called from more than one place or hiding any real complexity. This mirrors a general principle worth applying broadly: an abstraction should be introduced because a task genuinely needs it, not preemptively, on the assumption it might be needed someday -- three similar resource blocks are better than a premature module wrapping just one of them. WHY THIS WORKS AS AN ANSWER ------------------------------ This identifies the specific two conditions the chapter itself gives for a module being worthwhile (real reuse or real complexity) and shows neither is met here, then names the concrete cost paid (extra navigation/indirection) without a matching benefit, rather than a vague "it's unnecessary."