Biomolecular recognition is complex. The balance between the different molecular properties that contribute to molecular recognition, such as shape, electrostatics, dynamics and entropy, varies from case to case. This, along with the extent of experimental characterization, influences the choice of appropriate computational approaches to study biomolecular interactions. Here, we present computational studies of cytochrome P450 enzymes and their interactions with small molecules and with other proteins. These interactions exemplify some of the diversity of molecular determinants of binding affinity and specificity observed for proteins and we discuss some of the challenges that they pose for molecular modelling and simulation.