Development Models – Differences Between Push and Pull Development

agiledevelopment-processextreme programming

I was reading Extreme Programming Explained, Second Edition and in the chapter 11 "The Theory of Constraints" the authors talk about the old and obsolete "push" development model and the XP way, the "pull" development model. It looks like a quite important concept, but it takes only a very small paragraph and two images that are mere illustrations of the "waterfall" and iterative process, nothing specific about these models except by the image caption. I searched and it doesn't go any further about it in the rest of the book. I couldn't find any further explanations or discussions about it in the Internet either.

If the only difference about those is that one is "waterfall" and the other is iterative, them why push and why pull?

Does anyone understand what is really the difference between those two and give some good examples?

Best Answer

The difference between a push and a pull system is how the units of work are assigned to the person who will be carrying out that unit of work. The concept of push and pull aren't unique to software development - the idea originates from logistics and supply chain management.

In a push system, some kind of task is created and then assigned to a developer. A task could be anything from the implementation of a requirement (or a component needed to realize a requirement) to a bug fix to a document to write. Someone, usually some kind of manager or team leader, takes the units of work that need to be done and then allocate them to the members of the team to complete. Simply, work is pushed onto the people who will be doing it.

In a pull system, the tasks that must be done are stored in a queue, often a priority queue of sorts. An example might be Scrum's product and sprint backlogs, which contain user stories that are to be done. A developer who is currently not working on anything will go to the queue and take off the highest priority story that they are able to do and work on it. The people who are doing the work pull the work out of a list and do it.

The concept of push and pull aren't related to iterative/incremental versus sequential development. A team using iterative/incremental/agile techniques could use a push system, while a team using sequential development could use a pull system. However, typically, the agile methods (XP, Scrum) favor self-organizing teams and therefore pull systems.

For more information, you might be interested in this blog post on Push vs. Pull in Scrum. Kanban might also be of interest - Kanban is a methodology that comes from manufacturing, but can be applied to software development, which emphasizes just-in-time development and reducing overload on workers. Kanban is also related to and often used with Lean, another manufacturing concept which can be applied to software development.