Context: Software Engineering is a constantly evolving subject area that faces new challenges everyday as it tries to automate newer business processes. One of the key challenges to the success of a software solution is attaining sustainability. The inability of numerous software to sustain for the desired time-length is caused by limited consideration given towards sustainability during the stages of software development.Objective: This review aims to present a detailed and inclusive study covering both the technical and non-technical challenges and approaches of software sustainability. Method: A systematic and comprehensive literature review was conducted based on 107 relevant studies that were selected using the Evidence Based Software Engineering (EBSE) technique.
Results:The study showed that sustainability can be achieved by conducting specific activities at the technical and non-technical levels. The technical level consists of software design, coding, and user experience attributes. The non-technical level consists of documentation, sustainability manifestos, training of software engineers, funding software projects, and leadership skills of project managers to achieve sustainability. This paper groups the existing research efforts based on the above aspects. Next, how those aspects affect open and closed source software is tabulated. Based on the findings of this review, it is seen that both technical and non-technical sustainability aspects are equally important, taking one into contention and ignoring the other will threaten the sustenance of software products. Conclusion: Despite the noteworthy advantages of making a software sustainable, the research community has presented only a limited number of approaches that contribute to sustainability. To the best of our knowledge, those representations require further research. In this regard, an organized, structured and detailed study on existing technical and non-technical sustainability approaches is provided here which will serve as a one-stop-service for researchers and software engineers who are willing to learn about those.