# Let rules ## Prefer explicit dependencies over shared convenience bindings ### Rule Do not add a `let` binding only to let sibling values share one expression. Apply this rule only when one sibling value clearly owns the concept. When one sibling value owns the concept, reference that sibling value directly. When a flake output owns the public value, reference that output through `self`. Do not make an output attrset recursive only to reference sibling outputs. Do not apply this rule when a binding names a local constant used to keep sibling assignments in sync. ### Rationale Shared convenience bindings hide dependency direction. Explicit references show which value owns a concept and which value consumes it.