Somewhat offtopic, something that isn't done enough when people are learning to do design and coding, is to analyze failures
I think that's totally on topic. It's part of the learning process. The other thing that isn't taught is how to take that 'bad design' and refactor it to become a good design. Scrapping an entire codebase isn't feasible 100% of the time, but a refactor can breathe new life into a codebase. In order to improve, you must know where it went bad. Plain and simple.
Somewhat offtopic, something that isn't done enough when people are learning to do design and coding, is to analyze failures
I think that's totally on topic. It's part of the learning process. The other thing that isn't taught is how to take that 'bad design' and refactor it to become a good design. Scrapping an entire codebase isn't feasible 100% of the time, but a refactor can breathe new life into a codebase. In order to improve, you must know where it went bad. Plain and simple.