Model-Driven Software Engineering in Practice