Published 2021-11-23

Notes on Software Development Waste

Summary

Sedano et al (2017) on "Software Development Waste" identified and describe that software projects manifest nine possible types of waste, in terms of loss of productivity and unnecessary friction.

These are my notes on the paper, where I summarize the waste taxonomy according to the paper, and speculate about possible relationships between the wastes and their causes.

Types and causes of waste

Building the wrong feature or product
The cost of building a feature or product that does not address user or business needs.
  1. User desiderata (not doing user research, validation, or testing; ignoring user feedback; working on low user value);
  2. Business desiderata (not involving a business stakeholder; slow stakeholder feedback; unclear product priorities)
Mismanaging the backlog
The cost of duplicating work, expediting lower value user features, or delaying necessary bug fixes.
  1. Backlog inversion;
  2. Working on too many features simultaneously;
  3. Duplicated work;
  4. Not enough ready stories;
  5. Imbalance of feature work and bug fixing;
  6. Delaying testing or critical bug fixing;
  7. Capricious thrashing
Rework
The cost of altering delivered work that should have been done correctly but was not.
  1. Technical debt;
  2. Rejected stories (e.g. product manager rejects story implementation);
  3. No clear definition of done (ambiguous stories; second guessing design mocks);
  4. Defects (poor testing strategy; no root-cause analysis on bugs)
Unnecessarily complex solutions
The cost of creating a more complicated solution than necessary, a missed opportunity to simplify features, user interface, or code.
  1. Unnecessary feature complexity from the user’s perspective;
  2. Unnecessary technical complexity (duplicating code, lack of interaction design reuse, overly complex technical design created up-front)
Extraneous cognitive load
The costs of unneeded expenditure of mental energy.
  1. Suffering from technical debt;
  2. Complex or large stories;
  3. Inefficient tools and problematic APIs, libraries, and frameworks;
  4. Unnecessary context switching;
  5. Inefficient development flow;
  6. Poorly organized code.
Psychological distress
The costs of burdening the team with unhelpful stress.
  1. Low team morale;
  2. Rush mode;
  3. Interpersonal or team conflict
Waiting/Multitasking
The cost of idle time, often hidden by multi-tasking.
  1. Slow tests or unreliable tests;
  2. Unreliable acceptance environment;
  3. Missing information, people, or equipment;
  4. Context switching from delayed feedback
Knowledge loss
The cost of re-acquiring information that the team once knew.
  1. Team churn;
  2. Knowledge silos
Ineffective communication
The cost of incomplete, incorrect, misleading, inefficient, or absent communication.
  1. Team size is too large;
  2. Asynchronous communication (distributed teams; distributed stakeholders; dependency on another team; opaque processes outside team);
  3. Imbalance (dominating the conversation; not listening);
  4. Inefficient meetings (lack of focus; skipping retros; not discussing blockers each day; meetings running over (e.g. long stand-ups)

Possible Relationships

relationships.svg

Sources

© Henrique Alves <henrique@nowhere>