MSL: A pattern language for engineering self-adaptive systems