Proteins represent a diverse class of biomolecules that carry out a vast number of functions, enabling life. Proteins must fold into specific, three-dimensional structures in order to perform their functions. How a protein adopts its native structure is not well understood. Small, simple protein domains can refold reversibly in the test tube, suggesting that all the information required for folding is contained in the amino acid sequence. However, the majority of proteins misfold and aggregate upon in vitro refolding. These proteins require additional information besides their amino acid sequence to fold. In the cell, proteins are produced by the ribosome from N- to C- terminus, and can begin to fold during translation. Synonymous codon choice can alter the rate of translation, and synonymous substitutions have been shown to affect folding for a handful of proteins. Synonymous codon usage may therefore represent the additional level of information most proteins need to fold, but this process has remained difficult to study. In this dissertation, I describe novel experimental and computational techniques that I developed to study co-translational protein folding. Using a strategy designed to study subtle fitness defects, I discovered a decrease in fitness upon synonymous mutation of an enzyme necessary for E. coli cell growth. The synonymous mutant was able to produce active enzyme, but it accumulates at a slower rate than protein translated by the WT sequence. The fitness defect was exacerbated by a degradation tag, suggesting that the decreased accumulation was due to enhanced degradation brought about by impaired folding. I also adapted a coarse-grained model of co-translational folding to simulate a protein with two native states, whose folding is known to be sensitive to changes in the translation rate. This model accurately predicted the folding ratio between the two states and proposes a reasonable folding mechanism. This model also predicted an unknown co-translational folding intermediate and experimental support was found for the population of this intermediate during co-translational folding. Finally, I explored the ability of different promoter systems to produce low levels of protein in vivo. Ensuring uniform, low levels of protein per cell is important for a variety of applications, such as detecting subtle changes in function, or in reducing aggregation. I demonstrate that there are inherent differences between various systems to produce recombinant protein, and that not all systems are amenable to producing low amounts of protein per cell.