Heterogeneous computing environments consisting of traditional processors and additional compute accelerators are becoming increasingly common in desktop and HPC environments. Manufacturers including NVIDA, AMD and most recently Intel have made significant investments in developing specialised hardware and software to improve the performance of demanding applications by providing support for large scale parallelism. In this talk, we provide an overview of the architectural differences between the NVIDIA K20X (Kepler) and the Intel Phi 5110P (Knight's Corner) and provide insights into how to achieve good performance on both platforms. In particular, we aim to highlight key differences that proficient programmers should consider when choosing the best architecture for their research problem and for those with less experience, we show how using simplified programming frameworks such as OpenACC can help improve code performance, regardless of the underlying architecture. Performance results and optimisation techniques will be illustrated by targeting an N Body problem to each platform as well as showing how these results compare to similar implementations with OpenMP and MPI on standard processors.