Pass/fail tests used to define whether or not a feature is functioning correctly, usually developed in parallel to the defining of the feature. These tests may be written in plain English by the customer or product owner (“The user clicks , the session is reset, and the user is redirected to the homepage”).
Ideally, an acceptance test is subsequently automated by the developer so that it can easily run on all iterations of the software, ensuring that the accepted feature has not been broken by newer development. The use of acceptance tests in subsequent iterations is also known as regression testing. Acceptance testing is a key feature of test-driven development (TDD).
Background Of The Term
The concept of acceptance testing exists in engineering disciplines other than software development and is usually referred to as black-box testing.
Although acceptance testing is common across many agile disciplines, the term derives from Extreme Programming. According to C2.com, acceptance tests were first referred to as functional tests, because they test whether or not a feature works. Kent Beck, a primary mover behind TDD, proposed the change in terminology in April 2000.
Agile methodologies arose in response to traditional, phase-driven “waterfall” development methods. Those emphasize top-down project management; “big design up front”; silos for architecture and design, coding, and testing; and extensive documentation. Agile methodologies share an emphasis on small teams delivering small increments of working software with great frequency while working in close collaboration with the customer and adapting to changing requirements.
The term “agile” was first used by a group of software pundits who gathered at a ski lodge in Snowbird, Utah for the express purpose of naming and defining the greater movement in which they deemed themselves to all be participants. The original invitation to Snowbird went out to those interested in “lightweight” development frameworks. The attendees agreed that they didn’t like the negative connotations of “lightweight”, instead adopting the term “agile.”
In general a backlog is a set of items of work to be done or that might be done. A work item may be a change to an existing product feature, a new feature, a fix for a defect, a change in the environment that the product runs under, or any other activity that may contribute to its value such as a refactoring of software.
In the scrum framework and other agile approaches, a product backlog or release backlog is ever-evolving and continuously updated. It is the single source from which work items are discussed, refined, selected, and committed to. Backlog items may be at different levels of detail, some with sufficient detail that they are ready to be implemented, others with a general description that will need further refinement. Backlog items may use different formats such as user stories.
A backlog item may include its business value as provided by the customer. It may include a size that is an estimate of the amount of effort to implement it. A backlog may have its items sequenced into an ordering in which they are to be implemented, where the order is determined by considering business value and size along with other factors such as dependencies.
In addition to the product backlog, an agile team typically creates a backlog specifically for each development iteration, known as an iteration backlog or sprint backlog. The items in a sprint backlog are drawn from the product backlog. Those items should be considered sprint ready.
Backlog refinement is the process of adding new user stories to the backlog, re-sequencing existing stories as needed, creating estimates of effort for previously un-estimated stories, and decomposing large stories into smaller stories or tasks.
Backlog refinement is both an ongoing process as well as more specifically the event or ceremony that occurs regularly within a team’s iteration cycle to accomplish the above.
Scrum trainer and consultant Roman Pilcher explains the significance of backlog refinement to the agile development process: “Grooming the product backlog collaboratively creates a dialogue within the scrum team and between the team and the stakeholders. It removes the divide between “the business” and “the techies.” It eliminates wasteful handoffs, and avoids miscommunication and misalignment. Requirements are no longer handed off to the team; the team members co-author them. This increases the clarity of the requirements, leverages the scrum team’s collective knowledge and creativity, and creates buy-in and joint ownership.”
Scrum Alliance founder Ken Schwaber recommends that teams allocate 5% of their time to revisiting and tending to the backlog.
Background Of The Term
This was originally called “backlog grooming” but was changed in 2013 due to the current negative connotation of “grooming”. See Child Grooming.
The ceremony is also known as “backlog maintenance” and “story time“.
Burndown charts plot units of work that remain to accomplish (y-axis) against units of time (x-axis). In scrum the burndown chart is commonly used to track and forecast progress.
The units of work that appear on a burndown chart are derived from items in the release or product backlog. During the process of backlog refinement items are assigned an estimated point value that is a measure of effort (also known as “story points” or “size”).
The trend line on a release burndown chart will generally trend downward. However, if new items are added to the release backlog, then the total points remaining may go up.
The release burndown chart is the primary tool a team has for visualizing their “velocity”, which is the average number of points they accomplish during an iteration.
Iteration / Sprint Burndown
The initial point value of work remaining in a sprint burndown chart derives from the backlog items the team commits to during the sprint. Work remaining is generally graphed daily. The number of points the team undertakes is based on their established team velocity, i.e., the number of points they routinely have completed historically.
In scrum, no new work may be added once a sprint has begun, so the trend line will never rise. However, in Extreme Programming, work may be added during a sprint, so the trend line may rise.
A cognitive bias is a systematic pattern of irrationality. Cognitive biases can lead to perceptual distortion, inaccurate thinking, illogical interpretation, and poor decisions. Because cognitive biases affect how people understand and even perceive reality, they are difficult to avoid, even once a person becomes aware of them. Virtually everyone’s thinking is degraded by cognitive biases.
A component team is a team that is specialized to work on a single part of a larger system.
An advantage of component teams, compared to feature teams, is that it is easier to maintain consistent architectural and coding standards in each part of the system, since only one team works on each component. A disadvantage is that most customer-facing features will require work from multiple component teams in order for the overall feature to be completed. Thus, organizations with component teams tend to have more cross-team dependencies than those with feature teams.