What is DevOps?
There are many definitions about DevOps in the web. From my point of view DevOps is the collaboration between the Operations and Development teams in order to create and maintain an environment which assures continues software delivery.
I like also the following definition from https://theagileadmin.com/what-is-devops/.
"DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support."
To go one step further.. I will say that DevOps is more important than any methodology we apply in software development. It may sounds radical for some people but I believe that when you adjust your operations to support the way the development teams are working then you are close to maximize productivity!
Why DevOps is so important?
That's easy to explain.. you just have to examine what happens if the operations in an organization are not software delivery oriented. Instead, they apply general procedures which focus on non important parts of the production such as documentation and requirement handling.
I'm not saying that these are not important parts but creating software means write code, test, deploy and support. So when operations are working together with developers could establish a highly effective environment for producing software with quality in place and ready to be delivered.
But let's examine what this actually means. There are three factors which affect organizations that produces software.
Do it fast
Well this is something that always is misunderstood. Many think, that fast development is achieved only by having more people working on a project. This is not the most important factor! Software is something very complex. Having just people to write code doesn't mean anything for the output.
I'm sure that if you are a developer reading this article, you probably have experienced the fact that you implemented a new feature lets say in 1 week, and it reaches the "ready to deliver" state some weeks later due to other factors, such as deployment problems and insufficient testing. Lack of automation testing causes instability of the rest of the system and so on.
Now imagine many developers doing the same and having a bunch of related problems. The delivery is held back and worst.. if someone attempts to release, then everyone is running to the trenches to avoid the bombs..
So to achieve speed in producing ready things.. you need automation and infrastructure to support fast deployment and testing.
Do it good
Good software means first of all to cover the users basic needs. Secondly, means to be stable and user friendly. So how operations help on that? In order to produce good software you have to be able to inspect it and "fix" it.
If this doesn't happen easily then the pressure of delivery will increase because the teams will not have time for proper testing and inspection. DevOps role is critical for that too! Again its the easiness that they provide by having the environment which enables good inspection of what is developed and how much stable it is.
Do it cheap
Software development cost money. Developers are generally highly paid people who design and implement the features of the system. It is well known that when you are creating software without taking into account the technical debt.. then you will pay a lot of money in the future trying to change it. So how technical debt is related to DevOps?
Well maybe not all kind of technical debt are related with operations. But testing infrastructure it is for sure! Testing automation and feedback is crucial for preventing technical debt.
This article got my attention about how DevOps teams could help to reduce or prevent technical debt. http://www.informationweek.com/strategic-cio/how-devops-can-cut-innovation-crushing-technical-debt/a/d-id/1318677
No DevOps, no Scrum
I believe there cannot be effective scrum teams without the DevOps philosophy. Effective teams means able to cope with change and produce software with quality in meaningful timelines.
Scrum is enough difficult to implement. If a team has not solved the production "easiness" then probably both team members and stakeholders will be soon disappointed.
I believe that every team members should have a large amount of IT resources available in order to enable him to do other tasks, apart from coding, really fast!
DevOps don't stop to software related topics. If there is a gap in communication which affects teams such as remote team members or other teams, the operations should work closely to provide transparency and easy communication.