In magnetic heterostructures, an in-plane electrical current can manipulate the magnetization direction of the free ferromagnetic layers through spin-orbit torques. Spin-orbit torques are transfers of angular momentum from the crystal lattice to the magnetization using conduction electrons as the medium for transfer. Traditionally, spin-orbit torques have been attributed to two causes: the spin Hall effect and the Rashba-Edelstein effect. However, this framework is incomplete because 1) experiments cannot reproducibly distinguish these mechanisms and 2) theory predicts other torques of comparable strength. Using the Boltzmann equation and first principles calculations, we have investigated the allowed interfacial contributions to spin-orbit torque. These investigations led to the discovery of a novel effect, interface-generated spin currents, which first principles calculations reveal are strong in relevant heavy metal/ferromagnet bilayers (such as Pt/Co). This work has also resulted in simple drift-diffusion models that can capture interfacial spin-orbit effects through the appropriate boundary conditions. Following this work, our group has performed first principles calculations showing that ferromagnets generate spin currents via the intrinsic mechanism that could exert spin-orbit torques at interfaces. In this talk, we discuss how both novel interfacial spin-orbit effects and spin current generation in ferromagnets could play an important role in spin-orbit torque. Recent experiments done in heterostructures, including those with a single ferromagnetic layer, provide evidence that ferromagnetic layers and interfaces cause the spin-orbit torques discussed here. Shedding light on these mechanisms will help clarify the nature of spin-orbit torque, which is crucial for realizing its potential for magnetic memories.