Good object-oriented program design starts with the assumption that each part works, and you build from there. Since A works, B works. Since B works, C works. Since C works, D and E work. Of course, if it turns out C doesn't work, then you just broke D and E also - but once you fix C, D and E start working again.
Conversely, good security design starts with the assumption that each part *doesn't* work. The webserver *will* be hacked. How can we make sure the hackers can't get access to our credit card records? Well, we need to keep the records on a different computer, with very limited communication with the webserver. There's no reason the webserver would need the credit card records, therefore we scan the requests it's sending and we don't let it get any.
I am certain this has some bearing on my life. I do not know what.