Principles of Software Engineering

Software engineering is a constant battle against uncertainty – uncertainty about your specs, uncertainty about your implementation, uncertainty about your dependencies, and uncertainty about your inputs.

--Nathan Marz

I'd add to this that software engineering is helping users to find success in the face of all this uncertainty. I think this his true whether you are writing a UI or a library meant for other programmers.