SeqBench

Repeats Between Parts Are Invisible Per Part

6 min read · Updated October 30, 2026

Check a promoter and it is fine. Check the next one and it is fine. Put both into the same construct and the construct deletes the region between them in the cell, or the synthesis order comes back refused.

Repetition is not a property of a part. It is a property of a pair, which is why checking parts one at a time finds nothing and the problem arrives later and somewhere else.

The question that catches it

The only question that finds this is about pairs: does any two of these parts share more than a chosen length of sequence? Below about eight bases every pair of sequences matches by chance, so the threshold has to be set somewhere useful — fifteen bases is a reasonable default for a parts toolbox.

Run over a six-part toolbox where two pairs were built to share a stretch, that question returns the largest subset in which none do: four parts kept, two dropped, with both conflicts named — P2 shares more than 15 bp with P1, and P5 with P4.

Each conflict comes with the shared stretch itself, which is what makes it actionable. Knowing that two parts conflict is not enough to fix either of them; knowing which sixteen bases they share is.

Half the conflicts are on the other strand

Recombination and synthesis both see both strands, so a stretch that appears in one part and reverse-complemented in another is the same repeat. In the worked toolbox, the P4/P5 conflict is exactly that: the shared sequence reads AGTCATACCAAGTAGT in one and its reverse complement in the other.

Turn the reverse-strand check off and that pair stops conflicting — five parts are kept instead of four, and nothing in the output suggests anything was missed. The repeat is still there, and so is everything it causes.

This is the single easiest way to get a clean-looking answer from a toolbox that is not clean.

What the repeats actually cost

In the cell: two direct repeats flanking a region are a substrate for recombination, and what comes back is the construct with the intervening sequence deleted. In a recA-proficient strain this happens readily, and the deletion is silent — the plasmid still replicates, still selects, and is missing a cassette.

At the vendor: repetition is the largest single contributor to synthesis failure, so a repetitive design is the one most likely to be delayed, re-quoted or refused.

In the data: a multiplexed construct that has lost one of its units reads as a partial result rather than as a failure, so the experiment reports a subset working and nothing says why.

Designing parts that share nothing, rather than selecting from parts that do

Selecting a clean subset is the right move for a toolbox you already have, and it costs you parts — four of six here. The other direction is to build new parts to the constraint: hold the functional bases fixed, randomise the rest, and require each new part to share nothing over the threshold with any other part, with itself, or with a background sequence such as the host genome or the vector.

That is what makes a promoter library usable at scale: the members differ in strength because of the bases that matter, and share nothing anywhere else.

Both directions are deterministic. Whether two parts conflict is a fact about their substrings — there is no model, no rate and no score — so the same toolbox gives the same answer a month later, which matters when the library has already been ordered.

The subset returned is not guaranteed to be the largest

Finding the biggest conflict-free subset is the maximum independent set problem, which is NP-hard, so what comes back is an approximation. Two strategies are worth trying on the same toolbox because they disagree on real data: a standard 2-approximation over the conflict graph, and a greedy rule that repeatedly drops the most-conflicting part.

If the difference between them matters to you — it usually does when the toolbox is small and every part is expensive — run both and keep the better answer, rather than assuming either is optimal.

Frequently asked questions

Both parts work on their own. Why does a shared stretch matter?

Because the consequences are between them rather than inside either. Two long shared stretches in one construct are a recombination substrate, and the cell deletes what lies between them; a synthesis vendor's filter sees the same repetition and refuses the order. Neither shows up when the parts are checked one at a time.

How long a shared stretch is too long?

It depends on the host and the assembly, but a threshold in the range of 15 to 20 bp is the usual working choice for a parts toolbox. Below about 8 bp every pair of sequences matches by chance, so a threshold there reports noise; much above 20 and genuine recombination substrates pass.

Does the reverse complement count?

Yes. Recombination and synthesis both see both strands, so a stretch appearing in one part and reverse-complemented in another is the same repeat. Checking one strand only makes a conflicting pair look clean, with nothing in the output to say so.

How is this different from checking one plasmid for repeats?

A plasmid stability check asks whether one finished molecule contains repeats that could delete part of it. This asks whether the parts in your collection can be used together at all, which is a question about every pair in the set and has to be answered before the molecule exists.

Related tools

Related guides