Good Citrix design in its most basic form is simple.  The number one rule is to remove all single points of failure.  This means there should be redundant servers for everything critical.  I consider the Secure Gateway, Web Interface, and XenApp servers critical.  Those are just for Citrix.  The other things to consider are redundant domain controllers, Clustered SQL servers, and a file server that is already designed for HA.  The most cost effective way of pulling this off is to use virtualization technoligies like ESX.  My typical small/medium business setup to to virtualize two XenApp servers, and two WI/CSG servers.  The WI/CSG is setup using NLB whereas the XenApp servers just use the standard Load Balancing built into Citrix.  Your SQL server should replicate the DS, there are good artilces on how to do this out there.  That's about it, just about any design I do starts with this and is customized for the customer requirements.