Laziness in Haskell is so hard for me to understand. I never have any idea what the runtime performance of something I write in Haskell will be. It's either blazingly fast or molasses slow, and I can never tell.
These rules cut out 99% of space leaks. The profiling tools are a big help for the last 1%.