So, I have this little debate at work where some of my colleagues (which are actually in charge of administrating our Perforce instance) say that workflows are strictly a process thing, and that the tools that we use (in this case, the version control system) have no take on it. In otherwords, the point that they make is that workflows (and their execution) are tool-agnostic.

My take on this is that DVCSs are better at encouraging people in more flexible and well-defined ways, because of the inherent branching occurring in the background (anonymous branches), and that you can enforce workflows through the deployment model you establish (e.g. pull requests through repository management, dictator/liutenant roles with their machines setup as servers, etc.)

I think in CVCSs you have to enforce workflows through policies and policing, because there is only one way to share the code, while in DVCSs you just go with the flow based on the infrastructure/permissions that were setup for you.

Even when I have provided the earlier arguments, I'm still unable to fully convince them. Am I saying something the wrong way?, if not, what other arguments or examples do you think would be useful to convince them?

Edit: The main workflow we have been focusing on, because it makes sense to both sides is the Dictator/Lieutenants workflow:

Dictator/Lieutenants workflow

My argument for this particular workflow is that there is no pipeline in a CVCS (because there is just sharing work in a centralized way), whereas there is an actual pipeline in DVCSs depending on how you deploy read/write permissions.

Their argument is that this workflow can be done through branching, and while they do this in some projects (due to policy/policing) in other projects they forbid developers from creating branches.


It's not terribly difficult to set up a pull request flow on a CVCS, it's just that no one does because they don't want to manage a gazillion personal branches on the server. Perforce is one of the rare CVCS vendors trying to address this by introducing features like streams and sandbox.

There is one way DVCS distinguishes itself. It gives you more control over your local workflow. One scrum team can use a dictator/lieutenant model and another can use a single centralized server model, but when they send their code upstream the company as a whole can have an entirely different workflow. Rather than saying DVCS makes it easier to "enforce a specific workflow," I would say it makes it easier to enforce a specific global workflow without imposing a specific local workflow.

  • You make some good points, but doesn't the fact that pull requests in CVCS is impractical ("it's just that no one does because they don't want to manage a gazillion personal branches on the server") and it is a standard practice with DVCSs kind of agree with what I say?. I'm not saying that it is impossible in CVCSs, I'm saying that you have to enforce it (aka have to push people to do stuff a certain way) while in DVCS you don't. That said I completely agree on the last point and it is a great argument. – dukeofgaming Sep 20 '12 at 14:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.