DevOps concept was formed on the premise that there are gaps between the software development team and the operations team, which in turn is leading to inefficiencies in delivery. If you dig deeper to understand the gaps, they are nothing but the inefficiencies caused due to the hand-offs between the Dev and Ops team.
One could see the following root causes behind those inefficiencies:
- Different ways of thinking by Dev and Ops team
- Uneven staging and Prod test environments
- Uneven thrust given to testing
- Absence of Ops team involvement right from the beginning of the development cycle
Let’s start with the first one; development teams are trained to think in a siloed fashion. They get user stories from the product owners, who in turn guide them till the completion. However, Ops teams only look at the integrated, end to end working and tested application. In order to reduce the gap between the teams, project teams (including testers) should be trained to keep the end goal in mind.
Many companies I have come across have different staging and production environments. Right from the OS to deployment tools and directory structures differ. This causes too much stress when the undeployed code goes to the final stage of testing. It is critical that environments match. Stackoverflow has some good discussions around this topic.
Coming to the topic of unevenness in testing, I have noticed that a lot of time and resources are spent during the Dev testing as compared to Ops testing. From the purist point of view, these testings shouldn’t be separated and should be done from the beginning itself, but many companies don’t have the maturity yet to attain the purists state.
I have been working with several large enterprises who frequently release products to market. Some have 3 months and others 6 months cycle (I know that these companies are far from how Facebook releases the code twice a day). When I say large, project teams of size > 200 with several vendors, dozens of testers, developers and business analysts working on large pieces of functionality on respective code bases but successfully integrating just in time before going live.
The process in these large organizations have reached maturity levels that the release managers across vendors meet on a weekly basis to sync up time lines, functionalities, code bases, etc. This has resulted in pretty smooth deployment time and again. These companies engage the production support and management team (IT Ops team) right from the initiation phase of the project. Both Dev and IT ops teams sit together, estimate and write the hooks to monitor the application. Continuous testing at unit, integration and system level are done at the end of each sprint.
To conclude, most of these Dev-Ops related issues could be resolved by proper test planning from the beginning of the dev cycle and involving the Ops team right from the requirement gathering phase.