software modeling challenges