SENG2021
Teamwork 🏈
Requirements Engineering
In this lecture
- What are software requirements?
- Dealing with requirements
- Layers of abstraction
- How do we manage requirements in agile?
Requirements to Design
- Before defining a solution (our design) we must first understand the problem we're trying to solve (our requirements)
- What does good look like?
- Define outcome/endstate first
- Then come up with a solution
- Avoid creating solutions to problems that don't exist
- Avoid following processes and practices without a logical basis
Requirements to Design: A Series of Abstractions
- What is the problem we're solving?
- How will we solve it?
- Different people in the team will work at different levels of abstraction
- One person's design is another person's requirements
- Power of teamwork - split responsibility from those who define problems to those who solve them
Software Developers vs. Software Engineers
What's the difference?
The Engineering in Software Engineering
- Problem-solving; thoughtful planning and designing; seeing things through from end to end;
- Defining the problems to be solved, not just finding solutions
- Dealing with the unknown, deal with ambiguity
- Learn to deal with unknowns gracefully as they arise
- Domains are often highly specific, nuanced and complex
- When we spend time with a problem, the problem space grows around us
- Transformation of the unknown into the known
Requirements Engineering
- Process of understanding the problem to be solved
- Iterative process
- Team process
- Hardest for people new to the team / junior developers
- As people become more experienced, they can use their context to aid their understanding
- Research, asking questions and clarifying unknown areas is essential
Assumptions
- We make assumptions all the time, implicitly
- When understanding software requirements, we have to make assumptions in order to understand efficiently
- Three types of assumptions
- Reasonable assumptions that don't cause problems/breakages
- Reasonable assumptions that do cause breakages
- Unreasonable assumptions
Assumptions, interpretations and communication flaws
Requirements Engineering: An Iterative Process
- Sometimes we need to start actualising solutions in order to better understand what the problems are
- During the process review, our requirements are often clarified as much as our design
- Our changes/work is validated as well is verified
- Need to balance between spending too little and too much time at the beginning understanding the problem up front
Requirements Engineering: A Team Process
- Pair programming - a highly useful technique for lifting members of the team up
- People bring their context and experiences to solve problems
- Role of senior engineers is to mentor and coach junior engineers, provide context and guidance
How do we manage requirements engineering in agile projects?
Backlog / Ticket Grooming
- Grooming - a process of preparing tickets for the next sprint of work
- Grooming meetings include:
- Removing redundant or outdated tickets from the backlog
- Splitting tickets into sub-tasks/further tickets to modularise problems
- Ticket reporter / feature lead will often explain the ticket to the team
- Team has the opportunity to ask any questions and clarify details in ticket description
- Allows the entire team / stream to understand all the work being done in the team
- Provides further context to the team on their work
- Usually completed once per sprint (to groom tickets for the upcoming sprint)
Ticket Estimations
- An agile meeting (can be combined with grooming)
- Completed once per sprint (to estimate tickets for the upcoming sprint)
- Each ticket to be completed is allocated a number of story points
- Allocating story points is a democratic team process (vote and discuss)
- Story points are not a measure of time - different tasks will take different amounts of time by different team members; time isn't an accurate measurement here
- Instead, we measure relative effort
Ticket Estimations
- Factors to consider include
- How much work is there involved? (number of files/packages/lines of code)
- How complex is the task?
- How much context is required to understand the problem?
- How much risk is there to the task?
- How much business value does this task deliver?
- Does this task rely on other dependencies (other teams) to complete?
Ticket Estimations
- Fibonacci scale used to allocate numbers
- 1, 2, 3, 5, 8, 13, 21
- Teams should determine their own standard for ticket estimations, with examples of work
- An example of a standard for ticket estimations
- 1 - very trivial change (e.g. feature flag cleanup)
- 2 - minor change (e.g. fixing some broken unit tests)
- 3 - moderate change (e.g. adding a new suite of tests to a function in an API)
- 5 - significant change (e.g. hard bug fix, large spike/investigation)
- 8 - can often be broken into smaller subtasks, or is highly complex
- 13 - this should be broken down into subtasks
- 21 - Epic (contains a series of tasks to complete)
Why estimate?
- Team/people needs
- Allows engineers to contextualise their work
- Manages expectations
- Get commitment from the team
- Task needs
- Forces us to ask questions around a task, discover unknowns and grow the problem space
- Useful for synchronous estimations to spark these discussions
- Shifting left and moving discovery earlier in the process
- Organisation/planning needs
- Allows teams to plan capacity
- Allows higher management to see team progress and measure reliability
- Allows for optimisation of throughput
Spikes
- Special type of task/ticket that involves investigation rather than implementation
- Examples of spike tickets
- Investigate why there is a spike in errors on an API
- Research into which language we should use for our backend
- Design a database schema
- Often will produce a document / report / investigation findings as a result that is taken into further tickets
- Can break more complex tasks down into spike / design / implementation
Roadmaps
- Even though we work in an agile way and release regularly, we still have a long-term plan of where we're going
- Start with a problem:
- Understand the problem space
- Define the high level solution
- Create a roadmap of how to get to the desired endstate
- Roadmaps involve
- Timelines - estimations for how long tasks will take (this is hard!)
- Sprint plans
- Resource allocations - who will be working on what?
- Considerations
- Completed by feature leaders / engineering managers
- Need to be able to adapt and change the plan
- Can use Gantt charts to visualise roadmaps
SENG2021 23T1 - Requirements Engineering
By npatrikeos
SENG2021 23T1 - Requirements Engineering
- 275