Organizations want to be efficient. That’s why we have specialists doing specialized work. Unfortunately, specialists doing specialized work means that we end up with dependencies. Specialist B can’t do her work until Specialist A finishes his. And Specialist C is waiting on both of them. In the software world, this looks something like this:

  1. Gather requirements.
  2. Write code.
  3. Test.
  4. Deploy.

If we have specialists doing each of these things, the work gets handed off from person to person and we have dependencies. We can’t deploy without the tests, we can’t test without the code, and we can’t code without requirements. Now we have a bunch of dependencies.

And it gets worse. Oftentimes, teams are aligned around components and each team has to go through this cycle in order to deliver a feature. Suddenly, things aren’t feeling so efficient.