Unless I've misunderstood the principle, agile sprints are about layering on features until you arrive at some final release.
But software can become unwieldy complex and choosing the right data structures and class patterns, for the application, is crucial - isn't it?
So, how can you decide on the right data structures and classes and patterns, at the very beginning of the process, if in the first sprint, you are only dealing with a few of the overall application features?
Do you continually refactor and re-write as new feature-information is presented? Or is there some overall application design architecture happening up-front?
BTW, I'm not a formally-trained computer scientist, or software developer.