This influx of articles has made it apparent there are a number of different views of what DevOps actually is. I think it would be interesting to garner the view of anyone who cares to read this as to what they think DevOps is, and to that end, I shall start with my own view.
The Project Management Triangle (of cost, quality, and speed) typically dictates that projects can optimize only two of the three constraints of delivery, to the impairment of the third.
DevOps is a discipline that enables the optimization of all three constraints in the delivery of IT software changes.
DevOps requires People, Processes, and Technology to work effectively. With reference to the first way of Gene Kim's "The Three Ways", DevOps is a system; and (as per Russell L. Ackoff) "A system is not defined by the sum of its components but by the interaction of those components", therefore DevOps is:
DevOps is all of these working in harmony, as a system, to deliver small incremental changes into production at high frequency and low cost with high quality. It is a fundamentally different way of delivering IT change that requires a culturally different organization to one that typically follows a waterfall approach. Removing any of the components above will result in an ineffective approach that will return to the typical project management triangle of delivery.
There are a number of methods of implementing DevOps, however, they all follow some key themes:
Test Early: One of the key principles for management of W. Edwards Deming (considered by many to be the master of continual quality improvement) states, “Cease dependence on inspection to achieve quality" Effectively don't inspect a product after it is built as that is too late fix bad quality. Build quality into the software by running automated tests before the code is even checked in.
Automate: Use the technology to do what it is good at. Let humans do the thinking and automate all the repetitive steps.
Continually Improve: Taiichi Ohno (considered the father of the Toyota Production System) stated "Progress cannot be generated when we are satisfied with existing situations"; we should always make use of continual feedback loops to constantly improve.
A little bit at a time: The smaller the change; the lower the impact, the lower the risk, the less needs to be tested, the quicker the delivery, the quicker the feedback, and the easier to fix if the quality is flawed.
Responsibility through collaboration: Focus on enterprise goals rather than team or department goals, nothing should be "someone else's problem".
There is a lot more detail that underpins my thoughts on all the above, but for the sake of brevity (and to avoid too many tl;dr) and garner some discussion I shall leave it at that for now. Over to you!
I totally believe there is value in reviewing your process from time to time. If you look at the Capability Maturity Model you have different levels. You need to decide what Development Model works best for you site, but a team has to evolve if it's going to sustain change from many different directions.
Wow, thanks for this @Manoj Gangwar - this was concise and a great intro for folks who are getting the hang of all things devops. I love the key themes you shared as well.
Recommended Learning For You
Level up your skills with Atlassian learning
Atlassian DevOps Essentials
Learn to manage the product lifecycle by building, automating, and improving processes with Atlassian's approach to DevOps.
Jira Automation
Reduce project complexity and optimize your team's processes through the power of automation.
Bitbucket Pipelines Configuration
Build better software and release more often by learning how to implement a CI/CD solution with Bitbucket Pipelines.