<p>What is the Reuse/Release Equivalence Principle and why is it important?</p>

[{'answer_id': 63145, 'author': 'Phillip Wells', 'author_id': 3012, 'author_profile': 'https://Stackoverflow.com/users/3012', 'pm_score': 5, 'selected': False, 'text': '<p>The Reuse/Release Equivalence Principle (REP) says:</p>\n<blockquote>\n<p>The unit of reuse is the unit of release. Effective reuse requires tracking of releases from a change control system. The package is the effective unit of reuse and release.</p>\n</blockquote>\n<p><b>The unit of reuse is the unit of release</b></p>\n<p>Code should not be reused by copying it from one class and pasting it into another. If the original author fixes any bugs in the code, or adds any features, you will not automatically get the benefit. You will have to find out what\'s changed, then alter your copy. Your code and the original code will gradually diverge.</p>\n<p>Instead, code should be reused by including a released library in your code. The original author retains responsibility for maintaining it; you should not even need to see the source code.</p>\n<p><b>Effective reuse requires tracking of releases from a change control system</b></p>\n<p>The author of a library needs to identify releases with numbers or names of some sort. This allows users of the library to identify different versions. This requires the use of some kind of release tracking system.</p>\n<p><b>The package is the effective unit of reuse and release</b></p>\n<p>It might be possible to use a class as the unit of reuse and release, however there are so many classes in a typical application, it would be burdensome for the release tracking system to keep track of them all. A larger-scale entity is required, and the package fits this need well.</p>\n<p>See also Robert Martin\'s article on <a href="https://web.archive.org/web/20030614000424/http://objectmentor.com/resources/articles/granularity.pdf" rel="nofollow noreferrer">Granularity</a>.</p>\n'}, {'answer_id': 50911635, 'author': 'arush436', 'author_id': 2175945, 'author_profile': 'https://Stackoverflow.com/users/2175945', 'pm_score': 2, 'selected': False, 'text': '<p>From Clean Architecture, by Robert Martin.</p>\n\n<blockquote>\n  <p>The Reuse/Release Equivalence Principle (REP) is a principle that seems\n  obvious, at least in hindsight. People who want to reuse software components\n  cannot, and will not, do so unless those components are tracked through a\n  release process and are given release numbers.</p>\n  \n  <p>This is not simply because, without release numbers, there would be no way to\n  ensure that all the reused components are compatible with each other. Rather, it\n  also reflects the fact that software developers need to know when new releases\n  are coming, and which changes those new releases will bring.</p>\n  \n  <p>It is not uncommon for developers to be alerted about a new release and decide,\n  based on the changes made in that release, to continue to use the old release\n  instead. Therefore the release process must produce the appropriate notifications\n  and release documentation so that users can make informed decisions about\n  when and whether to integrate the new release.</p>\n</blockquote>\n'}]
['https://Stackoverflow.com/questions/63142', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/3012/']