In this paper, we develop a novel selective maintenance framework for optimizing the reliability or economic performance of a multi-component system subject to multiple failure modes. We classify the failure modes into soft failures and hard failures (possibly dependent). Soft failures are defined as occurring when a degradation process under condition monitoring surpasses a predefined threshold while hard failures are spontaneous failures that cannot be monitored. To optimize the system performance, different levels of maintenance actions on multiple components are considered. In particular, imperfect maintenance actions reduce the effective age and degradation level of a component while increasing the component's frailty. We solve the optimization problem using standard Differential Evolution (DE) and Genetic Algorithm (GA) heuristics. A numerical example shows that the proposed selective maintenance framework provides an effective tool for making the optimal maintenance decisions by considering hard failures and the correlation among degradation processes.