There are some good overall design principles that should be used when designing any software project. One of the key principles is to be very strict about the dependencies between software modules. This makes the modules easier to code, test and maintain. The principles apply to any software project in any language so they are equally applicable to Java as they are to .NET and Sitecore.
The development guidelines and recommended practices in this documentation describe the application of the overall design principles applied to a Sitecore project. It says how modules should be structured and how individual sites should use these modules. It is a set of recommendations for making your Sitecore project as easy to create, test, extend and maintain as possible.
Helix is the overall design principles and conventions for Sitecore development described in this documentation.