Constraints¶
A constraint is a condition that limits the amount of work being done effectively.
TODO: look up the Goldratt definition - theory of constraints
Improving flow¶
Once constraints start being identified, they can be reviewed to see which constrain has the biggest impact.
Understanding a Constraint¶
To effectively alleviate a constraint, the reason it exists should be understood.
Identify the symptoms to ensure that the underlying cause can be correctly identified.
Complex factors
The cause may be complex with many factors creating the symptom.
Identify the scope of each factor (local to the team/individual or a systemic factor, e.g. cultural).
Example: Pull Request Accretion¶
The team is working hard on features but pull requests are taking days to be reviewed and approved.
Symptoms identified:
- the team is working on different features
- even when working on the same feature, people are working on different aspects due to time pressures
- limited or no documentation about the lessons being learnt
- limited documentation and understanding of the common designs within the system / company
The separation with in the team that knowledge is being learned at the individual level rather than the team level.
People are not pairing on code due to time pressures and knowledge is not being communicated effectively.
A mistake would be to remove PR approvals or to use automated checks alone, as this is not resolving the underlying issue.
Remove the constrain by spending more time working together on a feature, so more people have context about the feature and require less cognitive load switching to be able to review the pull request.
Pairing on features and specific pull requests is more effective over the long term.