Engineering Self-adaptive Systems: From Experiences with MUSA to a General Design Process