Design Principles For Non-Equilibrium Self-Assembly