how to manage Drupal team with multiple developers of Drupal working collaborative on a large scale project

Events happening in the community are now at Drupal community events on www.drupal.org.
ghedas's picture

Hi,

I have a question about management of Drupal projects. I search the forums but cannot find any complete solution for it.

In large scale web projects that need a team for development I don’t know how it is possible to development simultaneously with a team of developers. In Drupal projects I think about 85 to 95 percentages of project is configuration by using modules and only 5 to 15 percentages of remaining needs to write and develop Drupal modules which depends of course on requirements of projects.
For projects that we use Drupal, every project assigns to a team consist of one developer and one project manager and one theme designer and so on, but only one developer is considered for development (sometimes one for configuration of modules and the other for implementing customized modules) in our team.

My problem is that such projects that are based on CMS (Drupal) cannot be version controlled, but in from scratch projects developers develop almost independently by version controlling softwares such as Git and almost these projects are more adaptable by issue tracking systems. I think because configurations of Drupal stores in DB version controlling of it seems impossible. Another problem in such large scale projects is strong dependency of project phases’ implementations that cannot be developed independently. Because for example when the first phase is running and the next phase is under development, DBs of these two versions will be faced to some conflicts and cannot be solve by exporting and then importing DB. The reason is that some nodes may have same ID but different node contents and same problems exist.
I’ll be very pleasant if someone guides me or gets me some keywords or resources or any suggestions. Is there any way, style or method for using Drupal in large scale web projects by more than at least two or three developers?

Thanks in Advance

Comments

I've found that this is a

ruedu's picture

I've found that this is a very hard question to answer because the requirements are different between organizations and projects. That said, I'll give an overview of how we're tackling this problem.

Outside of Drupal itself, we use a combination of Jenkins, drush, bash scripts, git and git hooks to control the flow of work from development up to production. While git is thought to be "distributed" you generally will end up with a central server when working with a group. Our central server will fire off a shell script, based on which git branch was just pused, that tells Jenkins to perform some tasks. If code is pushed into our development branch then Jenkins will build the site from scratch by checking out the code from git, enabling modules and configuring things as they should be configured. Once that is done, Jenkins will take a backup of our production server and then apply the new code to that in a programmatic fashion using a shell script that is similar to the one used to build the site from scratch.

In order for the entire system to work, we force ourselves to make all configuration changes using code. To do so, we use a combination of features (features module), strongarm, drush, direct SQL manipulation and an upgrade helper module that has some update hooks in it. All of our code and web configs sit inside one large git repository, including Drupal core, all contrib, custom and feature modules. When we need to upgrade Drupal core we use drush and then commit the changes to our repo.

By ensuring that all configuration changes are in code or can at least be manipulated using some script we simply push our work up the dev->staging->production stack and we don't have to worry as much what content has been added to the live site. We're also able to repeatedly test how an upgrade will go on our production site because we can take a database backup and then apply the new code to it repeatedly. Once we're satisfied with the upgrade results we merge our changes into a "production" branch and push it into the central git server. A hook is then fired to actually upgrade the site.

There have been some issues along the way but for the most part it has provided us with the ability to control the dev->production process. There are caveats of course. It's very hard to revert a change, to the point where if something goes up that turns out to be broken, you can't revert, you must fix it by moving forward OR restoring from backup.

Hopefully this overview will give you some ideas on how to move forward. Most people I've talked to think our system is "the wrong way" but it makes sense for us and has worked really well. Go with best practices where ever you can, but don't be afraid to do things a bit different if it works for your needs.

. It's very hard to revert a

igor.ro's picture

. It's very hard to revert a change, to the point where if something goes up that turns out to be broken, you can't revert, you must fix it by moving forward OR restoring from backup.

Use capistrano or phingistrano for manage reverts (if you will set maintaince on site, during deploy it would work perfect)

Most people I've talked to think our system is "the wrong way" but it makes sense for us and has worked really well.
For sure you are not the right way, making Drupal dev processes stable.

DevOps

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: