Sprint Goal and MVP
I've been struggling with the sprint goal of creating "a potentially shippable product increment". There are instances where that is just not possible as most of the sprint may require doing design work before committing to code. How do you wrestle with this fact and avoid falling in the trap of doing multi-sprint design, then develop that could send you back to waterfall-land?
Every Sprint ought to yield a potentially shippable product increment, no matter how small it may be. Whether most of the work undertaken in a Sprint is design -- or perhaps the setup of infrastructure or architecture or the remediation of technical debt -- is not necessarily a great concern.
In your situation, is a complex product being worked on, for which empirical process control would be important? Are there significant unknowns or risks to be reduced? If so, then Sprint Goals ought to be of better service. What is there to be learned or validated each new Sprint, in the timeliest way, and by the smallest piece of feature functionality?