Software Engineers try to come up with models to explain how software development works or, more often, to describe how they think it should work.