What is DevOps? (what is this buzzword really?)

What DevOps is not

it is not a team or role

It is not about having an internal third party setup where you ask a “DevOps” team for systems administration stuff because your project team does not know how.

What are signs that DevOps is not implemented?

you “handover” a lot of tasks (it’s much more evident if you actually use the word “handover” during task transactions, and NO changing the term to a synonym still won’t hide the fact that you are not practicing DevOps

What DevOps is

it is a discipline, a mindset, a way of working.
It is a paradigm you can use to view how you define workflows/roles/responsibilities within your software development teams

DevOps is about equipping your self-organizing project team with the skills and tools to fulfill their role of delivering value to the customer from product conceptualization, development, deployment, and continuously ensuring that the customer is getting the value all the time.

What about tooling?

Of course there is a baseline of skills/tooling that is required for a team to be able to work the “DevOps” way.
The team needs to have

  • mastery on Cloud Service Providers (AWS, GCP, Azure)
  • mastery on Linux Operating Systems
  • mastery on the Application Tech Stack e.g. php+mysql+nginx, javascript+react+node, react+python+flask
  • mastery on automation tools e.g. Automation using scripts like bash or python, Configuration Management tools like Ansible, Cloud Resource Provisioning tool like Terraform or Cloudformation
  • mastery on Automated Testing, understanding and implementation of linters,unit tests tools, UI test tools, Performance monitoring tools for the application tech stack.
  • mastery on Systems Design like Microservices, Autoscaling and Loadbalancing etc.

These skills/tools need not to be on a single person (and it should not).
Having these masteries singled-out to a single person is a sure fire way to achieve a very low BUS FACTOR

What can I do to achieve DevOps within my project team?

  • either find people who has the right DevOps mindset or find open-minded people within your team to study the discipline.
    • be sure to avoid dogmatic people at this phase, some people pretend they know it but act otherwise.
    • this role could be the DevOps evangelist within the team, much like the role of a Scrum Master in a team following the Scrum Framework of Agile Methodology
    • the DevOps Evangelist shall then train the other members of the project team to grow their Server Administration skills.
  • find people with high mastery on tools/skills listed above or grow multiple people within your team.

The right Mindset is crucial before you slap on the technical skills,

Here’s what a sample Self Organizing Development Team could look like

  • Developer (90% programming, 10% systems administration)
  • Developer (50% programming, 50% systems administration)
  • Developer (30% programming, 70% systems administration)
  • Product Designer(s)
  • UI|UX Designer(s)
  • Quality Assurance (Automated)
  • Quality Assurance (Manual, for Exploratory testing)

Notice that there is no “DevOps” role, just a bunch of programmers who know their shit up to production.
Programmers like these won’t be the types that tell you “But It works on my machine!” or “It aint my problem” or just get blocked whenever they see an error in production.
They have higher skills since they know how the application behaves in production and thus, are able to create better applications.

Other References

DevOps as defined by atlassian

This very popular DevOps skillset roadmap from github (kamranahmedse/developer-roadmap)

DevOps as explained by an Openshift Evangelist