This sounds like why there are also so many bugs in software. I find that the more I learn about software development, the more difficult everything becomes. Once you start thinking about all the edge cases, and how many ways there are for something to break, every project becomes more difficult. Designing software is like designing a bridge, except you have to worry about how your bridge performs when people decide drive over it backwards. Somehow it will end up being the designer's fault when something goes terribly wrong. If I could just design a web application without worrying about how people are going to try to find security holes and steal all the data I would be a happy man. Does the guy who designs bridges have to make considerations to ensure it can't be attacked by terrorists?