It is easier to fight for one's principles than to live up to them.
The most important single aspect of software development is to be clear about what you are trying to build.