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