Agile doesn't necessitate an absence of high level design. Before a story can be worked on by a developer, is a single user story going to completely capture everything needed to be defined before one can start sprinting?
As a user, I need to enter first name into a text input field on the X form, so that I can submit my first name as part of my profile information
One couldn't just start sprinting on this in a vaccuum.
- What language did we decide to use?
- What are the coding guidelines I should adhere to?
- What are some use cases that I can test to?
- Is the project skeleton and organization madeup?
- How are software components organized? Is there a component diagram describing the software component interactions?
- Should we follow Transaction Script pattern on the server side or Rich Domain Model/MVC?
- Did we create the Domain Model?
- What are the non-functional requirements? How quickly should I get a response back? What about security? Should I do XSS filtering and sanitize inputs?
- What are our database development standards? Do we have to adhere to certain naming conventions on schema objects? Is there a class diagram describing the user profile table?
- Do we have a framework established for proper unit testing of business logic?
- Do we have a proper development environment and testing environment built so that the story can be tested by QA in isolation of ongoing development changes?
- Did we implement Continuous Integration such that our builds are constantly occurring and being verified consistently.
- When the story has passed testing and is accepted by the Product Owner, do we have a Continuous Delivery implementation such that software changes can be delivered to other environments?
- Do we have source control in place with a proper source control and branching strategy decided on?
- What web frameworks and design decisions have we decided on? Angular? Spring MVC, JSON over REST services?
- Have User Interface guidelines been defined especially for how text boxes should appear?
- Have any common web components been implemented (or need to be implemented as part of this story) to properly deliver this story per the high level design and with the goal of minimizing technical debt?
- Anything else...
If you were just starting this one story, there is an infrastructure so to speak that needs to exist or you just bundle all of this complexity into this one seemingly small story. It is required for a story that should ideally be a tiny vertical slice of an entire system.
As a post office customer, I want to send an overnight package from my home in Boston to my friend in San Francisco.
The infrastructure that is required for this story is that we need a system of roads, a pickup truck, a mail sorting machine, an express airplane, an airport with a runway and traffic control, etc...
If it sounds like a lot then that is because it is. An enormous amount of work is necessary in terms of that development infrastructure that is required before one starts sprinting and directly delivering business value.
You really don't want to do this work in the sprint
There should be efforts before and between sprints to address and tune these processes and work.
Smoothing of Risk
The pursuit of minimum viable product and refactoring constantly to changing business needs is a smoothing of risk essentially. You could spend a lot of time developing a Cadillac solution for the business to turn around and say that they actually needed a boat all along.
Think of it as paying insurance against that disaster scenario. You spend two weeks and develop a skateboard. Then you spend another and develop and electric wheelie. Business decides they actually wanted a boat, you throw away your wheelie and create a paddle board in the next sprint. You are down and out the time spent on a useless skateboard and wheelie, but you prevented yourself from wasting a lot of time building the high quality chasis for a Cadillac.
Yeah it kind of sucks to work hard on something that will probably get thrown away in a month, but just remember,
It is not about the developer!
Your ability to work on kick-ass high quality beautiful software and have pride in your work is not guaranteed. It doesn't matter. The only thing that matters is what the product owner wants, and delivering working software with quick turnaround. That is it.