Software development using models