Software is an increasingly critical source of risks in products and services provided to our daily life. Historical software projects have maintained a tremendous amount of invaluable ?lessons learned? during the life cycle process of system development and evolution, which, if effectively reused, will significantly reduce uncertainties of software quality. Despite decades of Empirical & Evidence-based Software Engineering (SE) research, there are too few examples in the state-of the-art research and practice where lessons learned from one project were successfully migrated to another. We diagnose one of the problems as that lessons are documented in scattered and unstructured data-intensive and/or natural language process artifacts which rely on tedious and error-prone manual approach and sufficient domain knowledge to recognize. To address this problem, our solution is to automate the recognition of different types of lessons learned (e.g., classes of risks/problems/defects with resolution methods) in various types of projects and then reuse the knowledge learned for the process improvement on future system evolution. We propose a systematic framework for human-machine cooperative project lessons learning and classification that provides practical techniques and tools. We address fundamental research questions on mining and restructuring problems in lessons learned (i.e., what problems can be learned from historical projects) via integrated relevance annotations by system analysts and automated tools.