Learning to Adapt – Software Engineering for Uncertainty