Here's an article on lessons learned building custom server controls by Nigel Shaw.  Unfortunately, I learned most of them the same way, but it's a good reference to hold on to.