11. Rewrite something that desperately needs to be rewritten.<p>So many times I've encountered something and thought, "I can't believe that people are actually expected to use this software."<p>It was bad from a user perspective: difficult to use, slow, tedious to do what you actually needed to do, unable to "get there from here".<p>Then once I looked under the hood, it was often worse: built upon a horribly designed data structure, inflexible with constants where there should have been parameters, no apparent thought put into its use, too many violations of acceptable practice to mention, looking as if it evolved haphazardly (which it probably did).<p>It's easy to bitch about stuff like this, but you often have to go to the next level to <i>do something about it</i>. It's amazing how much rethinking you have to do and how many tools you have to build to turn horrible software into what should have "obviously" been done in the first place.<p>Easier said than done. And often, some of my best learning experiences.