Comma and 'that' omissions in the sentence

Of the four structures given,

  1. *The implementation, we have made before, may ...
  2. *The implementation, that we have made before, may ...
  3. The implementation we have made before may ...
  4. The implementation that we have made before may ...

(1-2) are both ungrammatical (whence the asterisks) because commas make a normal
relative clause
into a non-restrictive (parenthetical, supplementary) relative clause,
which

  • has different syntax from restrictive relative clauses,
  • requires a relative wh-pronoun (which, who, etc),
    which
    • can't ever be deleted like (1), and
    • can't ever use that like (2).

(3-4), on the other hand, are both grammatical because they are restrictive (normal, integrated) relative clauses, and thus are not subject to those restrictions. Restrictive relative clauses

  • are not set off with comma intonations at either end
  • are allowed to use either a wh-pronoun or that, regardless of the antecedent

    • The man that came to dinner broke his leg.
    • The man who came to dinner broke his leg.
    • The leg that he broke healed rapidly.
    • The leg which he broke healed rapidly.
  • are not required to have a relative pronoun at all, except as subject

    • *The man came to dinner broke his leg.
    • The leg he broke healed rapidly.

It depends on what you're trying to say.

Let's start with:

The implementation we have made before may become a cause of code duplication.

Does "the implementation" refer to the current implementation, or are the two implementations identical?

If so, then it should be:

The implementation, which we have made before, may become a cause of code duplication.

If "the implementation" refers to a previous implementation, then it should be:

The implementation that we made before may become a cause of code duplication.

People often suggest rather strongly to omit "that" when used as a subordinating conjunction; I prefer to leave it for the sake of clarity. There are instances in which omitting it introduces ambiguity.

As for your question about pauses: pause at the commas, if they are used.

Peripherally, you may want to remove the "have", as it implies an ongoing process--as if you are continuing to build the original implementation.

Here's an article with more detail.