I would like to share my view on the experience we have here in Arcusys with supporting the software development to 50+ developers and over 100 projects. To allow more in-depth focus on these matters this post will have an overview on the general subject and the different components/parts of our systems would be later covered in articles in a form of series.
In our company there are constant changes regarding the need and demand on server environments and other development resources. Traditionally development server could have been set up to dedicated PC tower or rack server from the ground for the development tasks, but that of course does not scale to multiple projects. Modern solution is to virtualize hardware one way or another.
In Arcusys we have been using IAAS/PAAS solutions for several years, first Eucalyptus and now Openstack, providing a cloud computing services to our needs. This has allowed our developers to focus to the software development instead of maintaining server environments. As an example, a Liferay developer who is starting a new development work clicks few buttons in order to have the type of server resource to match their needs and then can focus on the development and implementation in a quaranteed-to-work environment. When the development is done the resources can be freed with few clicks to the resource pool to be used elsewhere.
With continuous integration/continuous delivery processes done using Jenkins and Gerrit services, and as recent addition in some projects, puppet, we have managed to reduce the human interaction and total process time on delivering changes from development to customer production environment while increasing the quality of software products by releasing energy to the tasks that need our developer efforts. The benefits of the efficient use of human and computer resources can be seen in every step from the developer to the customer and from the system administration to the company management.
But reaching this point has required lots of adjustments throughout our company and still does as the company and its needs grow and change. The development policies and procedures have been unified within projects while still allowing to meet special requirements the projects possibly need. Also, we have changed the ways to handle the permanent storage data, for example special content needed in a project for proper testing, to improve and fasten the reproducibility of changes.
We test every software change in our development in multiple steps before it reaches the customers, including internal staging and customer reviews before publishing to production. In order to achieve all this, the developer only needs to accept the results of previous steps in order to proceed to the next one, no sweat.
All in all, we have managed to transfer a great portion of wisely selected work to computers. Thus, our developers can focus on worrying about the end quality of the product they are working on, instead of all the infrastructure related to the projects.