Other blocks of four codons were split for some reason. We can imagine that originally Isoleucine was determined by AU? so initially AUU, AUC, AUA and AUG encoded Isoleucine, but now only the first three encode Isoleucine and the last one encodes Methionine instead.
This is somewhat based in the blocks of four codons that follow this patter where the first two base determine 16 block that sometimes are split https://en.wikipedia.org/wiki/Genetic_code and because the third base in the tRNA is strange https://en.wikipedia.org/wiki/Wobble_base_pair
Anyway, IIRC this is a reasonable speculation but it's not confirmed. So don't take this explanation too literally.
With this idea, the initial DNA could evolve for a few (zillions) years as list like
important-important-whatever-important-important-whatever-important-important-whatever-important-important-whatever-important-important-whatever-important-important-whatever-important-important-whatever
and then make the whatever letters also important with a almost backward compatible code, so in most case it still doesn't mater, but in a few cases it is important.
[Note: The official letter for whatever is "N" instead of "?"]
You start with a two-letter code, then something evolves that puts an (initially) rare third letter at a few locations on the tape. All the old "gear" that reads two-letter code can still read most of the tape.
A translational reading frame consists of non-overlapping codons of three nucleotides. If one nucleotide is skipped, the entire downstream message is thus garbled. So how would the translational machinery operate if each codon arbitrarily consisted of two or three nucleotides?
I was thinking of how a hypothetical code might, in the abstract have evolved from binary, through ternary up to the (current base-4).
I haven't got enough biochem knowledge to speculate how three nucleotides per amino acid can evolve to have three.