My take on DevOps
standalone-sysadmin.com
standalone-sysadmin.com
How do you know what software to build? Operations.
Who uses the software and reports bugs and makes suggestions? Operations.
Without Operations, I'd just be sitting here twiddling my thumbs.
Of course, if you are developing software for other companies, you need to work through the channels, and I could see them not allowing communications directly with their operations personnel. But if it's the same company and you can't communicate, shame on everyone.
Maybe the sort of "Redhat certified" sysadmin you get these days can't even shell-script and they think this is some radical innovation.
No, sorry. I'm not going to let you get away with that.
Have you ever actually looked at or done any Redhat (sic.) certification? I have. If you compare it to any other certification at all, you will find the exams much much tougher. I passed all of them first time, most (RHCE) or the majority (above RHCE) definitely do not.
I think dragging in Red Hat certification really weakens your argument. What does being Red Hat certified have to do with knowing how to shell script? Nothing at all. If you want someone who can shell script, _ask_them_if_they_can_shell_script_.
It's a simple question, but don't drag down people who've got certifications, particularly this certification, to make your point.
If you're working on a team that is responsible for both then devops isn't a useful concept - you're probably doing it already. Many people are not so lucky.
When you have a big complex environment with thousands of servers all running the same code, it makes sense to start treating the hardware itself like software components. All modifications to hardware can be committed to a central SVN repository and pushed out with post-commit scripts. As long as you can script all types of OS patches, firmware updates, etc, using some type of language and an automation tool like Puppet or Cfengine, this can be done.
For a large company like Google or any cloud provider I'm sure it makes sense to start treating your server infrastructure like software components and have the same type of change control, QA, and deployment methodologies wrapped around it.
Hell, I don't even have commit access to the corporate SVN repository, so why would you expect me to be a cowboy and fix bugs on production systems?
I'm happy to help automate deployments, etc, but you stay away from my Perl scripts and I'll stay away from your code, thank you very much.
The solution is to encourage high quality communication at the stakeholder level and force that high quality communication downward throughout the chain of command. Most people are crappy communicators, and that results directly in the need for articles like the linked one.
I'm sure it is the same from both sides- we usually didn't tell them what type of back-end storage we were putting their database on, and they didn't tell us how hard they were hitting our database. It's pretty much messed up. I would kill for a good DevOps relationship, but most organizations are so dysfunctional that giving out too much information to other departments is considered a bad thing...
Like the developers that put outer joins into production code and then wonder why everything is slow. It takes a DBA to analyze it and say "stop doing that" before the developer tells us what they were trying to do in the first place. It would be nice if more communication happened, but in corporate America, it is not about to happen any time soon.
My thought is that the development department just doesn't want to show the rest of the company how bad of shape the code base actually is in, and the operations team just doesn't want to show the rest of the company how bad of shape the servers, storage, and network is in.
I think DevOps is something more akin to tackling operations problems from a developer's mindset. 'Infrastructure as Code' is a DevOps mantra.
A developer writes a program, runs the program on a compatible platform, and expects a certain output.
I think DevOps is - as an Ops guy you write a program, that program runs on a platform consisting of bare-metal machines, and the expected output is a platform for your developer's software to run on (i.e. configured & monitored web/proxy/db servers)