A diferença entre um sistema push e pull é como as unidades de trabalho são atribuídas à pessoa que executará essa unidade de trabalho. O conceito de push and pull não é exclusivo do desenvolvimento de software - a idéia se origina do gerenciamento de logística e da cadeia de suprimentos .
Em um sistema push, algum tipo de tarefa é criada e depois atribuída a um desenvolvedor. Uma tarefa pode ser qualquer coisa, desde a implementação de um requisito (ou um componente necessário para atendê-lo) até uma correção de bug ou um documento a ser gravado. Alguém, geralmente algum tipo de gerente ou líder de equipe, pega as unidades de trabalho que precisam ser feitas e as aloca para os membros da equipe para concluir. Simplesmente, o trabalho é empurrado para as pessoas que o farão.
Em um sistema pull, as tarefas que devem ser executadas são armazenadas em uma fila, geralmente uma fila de prioridades. Um exemplo pode ser o backlog do produto e sprint do Scrum, que contém histórias de usuários que devem ser feitas. Um desenvolvedor que atualmente não está trabalhando em nada vai para a fila e tira a história de maior prioridade que é capaz de fazer e trabalhar nela. As pessoas que estão fazendo o trabalho tiram o trabalho de uma lista e o fazem.
O conceito de push and pull não está relacionado ao desenvolvimento iterativo / incremental versus sequencial. Uma equipe que usa técnicas iterativas / incrementais / ágeis pode usar um sistema push, enquanto uma equipe que usa desenvolvimento sequencial pode usar um sistema pull. No entanto, normalmente, os métodos ágeis (XP, Scrum) favorecem equipes auto-organizadas e, portanto, puxam sistemas.
Para obter mais informações, você pode estar interessado neste post no Push vs. Pull in Scrum . O Kanban também pode ser interessante - o Kanban é uma metodologia que vem da manufatura, mas pode ser aplicada ao desenvolvimento de software , que enfatiza o desenvolvimento just-in-time e reduz a sobrecarga dos trabalhadores. O Kanban também está relacionado e é frequentemente usado com o Lean , outro conceito de fabricação que pode ser aplicado ao desenvolvimento de software .