One of the key documents to software design is RFC 1958 – Architectural Principles of the Internet, in my not so humble opinion.
Some hilights (emphasis mine):
Another nice document is the XML spec ¹. See section 1.1, Origin and Goals for the guiding principles:
1. XML shall be **straightforwardly usable over the Internet**.
2. XML shall support a wide variety of applications.
3. XML shall be compatible with SGML.
4. It shall be **easy to write programs** which process XML documents.
5. The number of optional features in XML is to be kept to the absolute minimum, ideally zero.
6. XML documents should be **human-legible and reasonably clear**.
7. The XML design should be prepared quickly.
8. The design of XML shall be formal and concise.
9. XML documents shall be **easy to create**.
10. Terseness in XML markup is of minimal importance.
Now think of where some XML applications are going wrong. If your XML turn out to be complex, then you did something wrong. XML was intended to be simple.
Also note how the seed for these wrong turns was already inherent in the guiding principles: “a wide variety of applications” opens a can of worms as every other application tries to adapt XML, instead of reducing its own complexity. As we see now, maybe “compatible with SGML” was important back then, but it surely is completely irrelevant these days. Furthermore, for every fancy features they dropped from SGML, they introduced a new fancy feature for XML...
I found that Tim Berners-Lee also wrote down his Principles of Design in 1998:
1. Simplicity
2. Modular Design
3. Tolerance
4. Decentralization
5. Test of Independent Invention
6. Principle of Least Power
The last one in particular is strange, however: It has to do with favoring complex data structures over code.