An overview of software modelling with UML
In modern software design we don't have the luxury of being able to build complete, complex systems which fail, and then learn from the results of our failures. To succeed, we must fail earlier when the costs and consequences of doing so are minimised.
The key to this is modelling.