Showing posts with label change. Show all posts
Showing posts with label change. Show all posts

Wednesday, November 16, 2011

"DevOps" - Change is NOT the Enemy

From Wikipedia (link):

"DevOps" is an emerging set of principles, methods and practices for communication, collaboration and integration between software development (application/software engineering) and IT operations (systems administration/infrastructure) professionals"

Sounds familiar? It should.

If you've ever been part of one of these groups at some point in your career, you probably said to yourself or heard things such as: "Those developers just want to rapidly push on us all this new technology but we've yet to handle issues with the currently deployed tech." or maybe "Operations are dinosaurs; they reject any opportunity to use our new software and make us stick to old outdated tech. without realizing the benefits of the new!". In essence, agile development creates change and operations want less change.

As organizations make the move to new technologies (e.g. cloud, SaaS, PaaS, WCF, .NET 4.0, etc...), the role of development versus operations teams is evolving and this change must be properly managed but, change isn't the enemy, the lack of alignment is. Businesses fail to see this and think pushing change down the pipe will magically break their reliance on monolithic applications and help them move towards more modern distributed service based applications. The fact to the matter is, distributed and loosely coupled applications are more complex to manage and also fail in a distributed way!

This type of change has to be monitored, measure and managed so both parties can establish a better communication and collaboration relationship. Can you think of any examples where this has happened to you? (post them in the comments)

Obviously, this post is merely skims the topic of "DevOps" but, I'm hoping it got you thinking a little and wanting to read-up on this more. I will be attending a presentation on Thursday more specifically on "DevOps" applied to addressing performance issues so hopefully I will have some detailed examples. I'll post a follow-up on this subject then.

Always be Failing!

Here is a good change enabler: FAILURE!

Failure is a powerful tool. People learn from failure but unfortunately, the first reflex most of use have is trying to prevent failure. When you think about it, we should be spending more time becoming resilient to failure instead of preventing it; This would be a much more valuable investment of our time.

When you fail, fail quick and fail LOUD so people can see the causal relationship between a change and failure. For example, think about having a big, publicly visible build system monitor or package deployment summary screen that goes RED when something bad happens (broken build, unresolved dependency, failing unit tests, etc..). The instant feedback is key!

In today's fast moving technological world and particularly with software development, change is something that is risky, but necessary. Enabling change by embracing failure can be extremely beneficial  and if failing hurts, DO IT MORE!

  • Push code all the time - It will get less painful
  • Upgrade all the time - It will get less painful
  • Write tests all the time - It will get less painful
  • Do code reviews all the time - It will get less painful
  • Merge branches all the time - It will get less painful
  • Fail all the time, it will get less painful

So go ahead, learn from failure and enable change! Just don't forget to make sure people aren't stigmatized or afraid to fail.