What determines a successful protein expression in E. coli?
One important aspect when expressing a protein from a different organism in E. coli is that the codon usage of the original organism is likely different from the codon usage of the E. coli used for expression (Codon usage bias).

Though the genetic code is degenerate, not all codons are equal. They might encode for the same amino acid, but organisms tend to favor specific codons over others and the tRNAs for those codons tend to be present in different concentrations. When you now have a lot of codons in your sequence that are very rare in E. coli, the expression will suffer because the tRNA for those codons is not present in high enough concentrations to sustain the translation.

There are two ways of compensating for that, either you get your E. coli to produce more of the rare tRNAs, or you optimize your sequence to use different codons. For the first solution you can buy certain E. coli strains that contain plasmids encoding the tRNAs that are rare in E. coli, one of those strains is e.g. the Rosetta BL21 strain. 

For optimizing the codon usage there are several companies offering to synthesize optimized sequences. There are also tools available online, but I have no direct experience with those.

The optimization is also not as easy as just using the most prevalent codon every time, it has been shown that optimizing the codons to match the translation speed in the original organism can enhance the expression yields. For some proteins, pause sites during the translation might be necessary to ensure proper folding. If the protein doesn't fold correctly it will be quickly degraded and your yield will suffer. This is described in the article "Heterologous Protein Expression Is Enhanced by Harmonizing the Codon Usage Frequencies of the Target Gene with those of the Expression Host" from Angov et al.

You'll find a nice overview about the whole topic in the article "You're one in a googol: optimizing genes for protein expression" from Welsh et al.