Design should be easy in the sense that every step should be obviously and clearly identifiable. Simplify elements to make change simple so you can manage the technical risk.
A rational model of software is to design it quickly - the economic pressure to improvise presents an interesting challenge.
The problem is, in software design, often the consequences of your decisions don't become apparent for years.
Received wisdom is that if you spend time up front getting the design right, you avoid costs later. But the longer you spend getting the design right, the more your upfront costs are, and the longer it takes for the software to start earning.
How good the design is doesn't matter near as much as whether the design is getting better or worse. If it is getting better, day by day, I can live with it forever. If it is getting worse, I will die.
Listening, Testing, Coding, Designing. That's all there is to software. Anyone who tells you different is selling something.
Learning research tells us that the time lag from experiment to feedback is critical ...