The goal of my research is to advance software engineering through empirical studies and the innovation of processes and techniques. In my research, I use a mix of research methods ranging from grounded theory and interviews to mining software repositories to gain a better understanding of the complex nature of software development. Based on the understanding obtained from these studies, I then develop and evaluate techniques for different stakeholders involved in software engineering projects, such as newcomers and managers, using Natural Language Processing, Information Retrieval, and Machine Learning. These techniques range from summarizers and improved search engines for software documentation to interactive visualizations and awareness tools for collaborative software engineering.