title: Is violation of DRY principle always bad?
body: <p>I have been discussing about <strong>DRY</strong> (<em>Don't Repeat Yourself</em>) principle also known as <strong>DIE</strong> (<em>Duplication Is Evil</em>) and there are votes, that any simple code repetition is always an evil. I would like to hear your opinion about the following points:</p>
  
  <ol>
  <li><strong>Uncertain future</strong>. Let's say, that we have the same code in two places. The key is, that these two places have only incidental connotation. There is a possibility, that they will vary in the future because their context and semantics are different. Making an abstraction from these places is not cheap and if one of these places change, unwrapping from abstraction will be even more expensive.</li>
  <li><strong>Readability</strong>. There is a complex computation that involve several variables or steps. In other place of code there is another one, that have some parts identical. The problem is, that if we take out the common parts, the readability of calculation will decrease and created abstraction will be very hard to give it a descriptive name. Worse, if some part of algorithm will change in the future like in point 1.</li>
  </ol>
  
  <p>Does the above cases are good reason to give up abstraction process and just leave duplicated code in favor of risk of future changes or just readability?</p>