Device-to-Device (D2D) communication is one of the technologies on the spotlight for enhancing the cellular network performance towards the fifth generation wireless systems. It has diverse potentials to cater for both critical and non-critical applications. For example, timely information dissemination can be achieved during disasters using D2D communication. Also, content sharing and real-time applications can be effectively facilitated. Recently, new applications and technologies are beginning to embrace D2D to further improve their performance in terms of spectral efficiency, latency, and energy efficiency. However, this is not bereft of technical challenges due to the peculiar limitations of traditional D2D communication such as interference. In this paper, we focus on techniques for managing these challenges with regards to mode selection, power control, and resource allocation. As compared with other contemporary works on this subject, we discuss these issues in line with some of the most recent research trends. In addition, we compile pertinent design considerations of D2D discussed in literature while extracting new patterns to familiarize readers with applications, models, methods and metrics studied lately. Furthermore, we highlight and classify some of the key challenges of D2D communication with respect to current and future generation cellular technologies, giving a comprehensive outlook of new research problems recently identified in this area.