1. A computer-implemented method, comprising: associating classes of a software program with module declarations for a set of modules; and using the module declarations to manage dependencies in the software program throughout a life cycle of the software program; wherein a first module declaration of the module declarations comprises a reverse dependency constraint for a first module within the set of modules; wherein the reverse dependency constraint limits a visibility of the first module towards one or more dependent modules based on one or more dependencies for the one or more dependent modules; and wherein determining whether a second module is allowed to depend on the first module comprises: allowing the second module to depend on the first module if the second module declares at least one dependency that satisfies the reverse dependency constraint; and hiding the first module from the second module if the second module does not declare at least one dependency that satisfies the reverse dependency constraint.