This is an interesting question, but I think it is too broad for SO. Perhaps narrowing it down to one principle at a time would allow for adequate answers. Even then, this may be a better fit for softwareengineering.stackexchange.com. — jaco0646 49 secs ago