It is a myth that we can get systems “right the first time.” Instead, we should implement only today’s stories, then refactor and expand the system to implement new stories tomorrow. This is the essence of iterative and incremental agility. Test-driven development, refactoring, and the clean code they produce make this work at the code level.
Before we started this agile project I always felt guilty when I didn't get it right the first time. My managers would down their noses at me and make me feel like crap. I need to understand this stuff better so I can explain to them why they don't want me to try to build it right the first time.