The Elephant in the room – 3 key points of DevOps – Strategy, Tactics and Implemention

Elephant in the room?

When people talk about DevOps, most people don’t know what their talking about or usually they only know part of what is DevOps. The blind men describing an elephant is what comes to mind.

One blind man says he feels it’s like a rope. The second blind man said it’s like a thick branch of a tree. The third blind man said it’s a huge wall.

DevOps is the elephant in the room.

We tend to only “see” one part of the elephant and we view it from our own role or perspective.

For many people, the answer of what is DevOps tends to falls between these kinds of viewpoints:

  • To systems administrators, it’s about use of Automation techniques to manage many machines and deploy code (i.e.Ansible, Kubernetics).
  • To a developer, it is a consistent code development environment and automated integration system (i.e. Docker, Git).
  • To a project manager and stakeholders, it is an Agile development methodology for software and product development.

These answers are both right and wrong at the same time. This is where the understanding of Strategy and Tactics come into play. With this, you can recognize and understand the “elephant in the room” and how to use these tactics and strategies.

The Difference between Strategy and Tactics

The culture and management practices of DevOps can be looked at as the Strategy. The implementation DevOps in the form of tools and processes used are the Tactics. One is at a global level, the other is the “hands on” task(s). Strategies don’t change often. Tactics do change depending on the situation. It’s an important to understand these perspectives to understand what “DevOps” really is.

What is Strategy from the DevOps point of view?

Strategy is the plan to archive a long term goal.  DevOps may employ many different strategies.  Here are a few examples:

These strategies are NOT always going to be appropriate for your shop for a variety of reasons and may need to be modified or other alternative strategies may need to be used.   SCRUM vs Lean?  Up to you and your team.

What is Tactics from the DevOps point of view?

Tactics is the actual methodology of implementation of a strategy.  Depending on your own needs and circumstances, the tactics you chose depend on the strategy your seeking to fulfill. Here are some examples of of tactics:

  • Using a Git shared repository is a tactic for Continuous Integration .
  • Using  Kanban software and workflow is a tactic for Lean software development.
  • Using Ansible to setup standardized servers is the tactic for the “cattle not pets” strategy.
  • Having small team of five people consisting of people from Operations, Development and Quality Assurance is the tactic  for the two pizza team and break down silos strategy.

Tactics may change for different systems you manage.  For instance an MDM (Mobile Device Manager) platform would be the appropriate choice for managing Smartphones NOT Ansible or Chef and in this sort of environment, Docker may not be appropriate for development of the front end app.

Implementation is the key

Even after understating the Strategies of DevOps and developing the Tactics to implement DevOps, if people are not DOING the tasks to implement the tactics,  just doing what they always done, they don’t have a DevOps shop. People need to participate. The place to begin is with collaboration and creating an environment where there is trust and the people involved are actually carrying out the tactics as day to day activities. To get collaboration, people need to have ownership in the project and get recognition for their part. Create an environment where people are willing to take risks and are not afraid of failure. To do this, it’s important that failure is valued as part of the learning process instead of blaming people or finger pointing.  In fact back in the 70’s at IBM, Tom Watson Jr. recounts calling to his office a young executive made a $10 million dollar mistake. Expecting to be fired, the executive presented his letter of resignation. Tom Watson just shook his head:“You are certainly not leaving after we just gave you a $10 million education.” Learning from failure is part of IBM s culture, it should be part of every successful company s culture.

There is NO right way to do this

You can read books like The Phoenix Project or  The Goal (Which The Phoenix Project is based on) and apply the Theory of constraints, or  read any number of books written about DevOps.    However, the original talk they done on 2009 10+ Deploys Per Day , Allspaw and Hammond didn’t do something all that new as these concepts were done by others.  Lean manufacturing is where Kanban and Lean software development came from.   Site Reliability Engineering , which is in principle DevOps, was developed at Google around 2003, well before the Velocity 9 conference.  At Netflix,  they weren’t thinking about DevOps when they developed their “DevOps” shop.
I am of the opinion that you have to examine BOTH the STRATEGIES AND TACTICS of what worked at various organizations and what didn’t and focus on collaboration.  Building a collaborative environment that encourages ownership of a project, gives recognition and encourages people to take risks and not be afraid of failure is the key first step to creating a DevOps shop.  Doing this will make adopting  the “Elephant in the room” less intimidating and will put DevOps in your grasp.

Feel free to give me your comments and suggestions.

Until then, have a great day.

Do you Get Git? Git for source control and DevOps

Source control is one of the core strategies for DevOps since having developers and operations team members have access to each others processes require a copy of the code and configurations available to everyone involved.
Whether you write code or just have files you continually have to revise, we need to store our files and keep copies safe.
Git provides a solution for source control and collaboration. In fact one of the largest collaborative open source platforms GitHub is built on GIT. They were recently acquired by Microsoft for over 7.5 Billion dollars.

The Problem that GIT addresses.

When I was starting out and didn’t know any better (some people say I still don’t), I would make a copy and store it in a directory. I also may store a new file with a updated name like Original.txt. I would then have a copy named Originalv2.txt Originalv3.txt as I kept making changes and updates to my file.

However, this over time became quite messy to look at and confusing after a short time.

Further, if I wanted to share this group of files with someone, I would have to tar or zip the file up and send it.
On top of this, if I’m working with someone to make changes, they would send me a file and hopefully, I add it to the right place in the project…this gets very inefficient.
This is where source control comes in.
There are many different solutions such as subversion, mercurial, etc, we’ll focus on Git.

What can Git do?

Linus Torvalds and the developers of the Linux kernel needed to replace their proprietary source control software (BitKeeper) and he made a request to the community of developers to create a source control software that had the following requirements:

Open source and free
Distributed not centralized
Able to work offline

Git is Open Source and free. Enough is said, If you need to make changes to the code to the program, you can.  Further, there is no fee to pay for the software.  Support is available from a large and active community.

Distributed not centralized. Everyone has a copy of the files. If you need to see the code that is written or a configuration file, it’s right there.

Able to work offline.  Changes can be made locally and on a central repository. You can work offline with Git. Make changes to your files and commit them both offline and on the network. Many source control systems don’t allow for offline support.

You need source control as you write code. You may make a mistake and need to roll back. Your system may be running abnormally and your files may end up corrupted… but fear not! You made a backup of that program file…or did you… Maybe its an older backup that you need to recover your code from…how far back…

This is where Git is very useful to have. You can make a local revision backup of your program.

Rather than explaining how it works, go and download a copy of Git.

Installing Git

Get git here

or use Chocolaty

$ choco install git

Git supports a variety of ways to setup a repository.
Local, HTTP/HTTPS (smart with authentication and dumb),SSH/SCP
In this article, we’ll cover local.

Setup local repository for your own files

$ git init

then

$ git add file1 file2 file3 …

or

$ git *

then

$ git commit -m ‘initial commit’

There’s more

You can upload your files to a remote repository, clone a remote repository and have this used in a DevOps environment.  It works very well with Continuous Integration/Continuous Deployment where you can setup a tool like Jenkins to start processing the code out of your repository as soon as there is a change.

For more info on Git, download the book ProGit free in e-book format.

Suggestions and ideas for using Git.
Lastly, what good is knowing about a tool without knowing how you can use it?
Many people have found other ways to use Git besides for source control for coding.
Besides using Git for making copies of code on the repository, you can use it for making
backups. People have written articles, books and distributed it using Git.
In systems administration, you can keep critical systems files using Git
I use it for my Vagrantfiles and Ansible playbooks for my systems configurations.

Let me know your comments and suggestions you may have.

Until then, have a good day.

Building a system of habits to achieve your goals.

Building a system of habits to achieve your goals.

Since this is the beginning of the New Year, this would be a good time to talk about new years resolutions or goals and how they tie back into IT and software development.

If you chose to be in a learning profession such as IT or Software Development, your habits will help you either get ahead and achieve your goals or just sink you. You learn a new technology stack new people skills or business skills. It would help if it were something you do without much thought, just out of habit.

What does this have to do with Programing, Management, DevOps, etc.?

The principle of “self-improvement” applies to developing a system of incremental improvement over time. If you can apply this principle to yourself, you can apply these in other areas of your life, including your work.

If you are like me you probably have given up on new year resolutions
Because they don’t work… At least not for long… Motivation just sputters out.
Even after you manage to reach your goal… You go back to doing the same stuff you resolve not to do. Instead of working on disjointed tasks, adopt a game plan for developing lasting habits that support ALL of your goals.

A game plan for developing lasting habits.

Small daily habits
1% cumulative improvements
Habit tracking

Small daily habits

Think of the habits necessary to reach your goal.
For instance to be healthy that is your goal, your strategy. Your tactics may be: eating healthy, exercise regularly.

To do those tactics, you need to create new habits such as:

Go to the gym
Learn to cook a healthy meal.

Where I would get in trouble is creating a gigantic LIST of TASKS.
Instead, start small and simple and stay small.

I will go to the gym and do one pushup once a day.
I will make rice with a rice cooker once every other day.
I will read five pages a day.

I found when I start with doing just one pushup, I end up doing more.

I start with making rice, I also end up steaming some vegetables in addition.

On reading five pages a day, after six months, I have read 900 pages or about 3 novels.

Otherwise, with a large number of “tasks” for your “habit” you end up with analysis paralysis… in other words you do nothing.

Inspiration or motivating yourself, those tricks for me don’t work well it’s too much “hit and miss.” However creating a small task habit with minimal willpower, I can make work everyday. The best stuff I’ve done has been when I didn’t even feel like doing it. I just do it out of habit.

The book Mini Habits describes how this can be done.

1% continuous improvement…

“It is not important to be better than someone else, but to be better than yesterday.”

Jigoro Kano
founder of Judo

Instead of working towards “instant discipline” or “instant insane amounts of work” or a long list of tasks that you are unable to sustain, look for small improvements instead. When you start doing things like pushups without inspiration, rather out of habit, add another habit like sit-ups or an additional routine to your workout. Find small ways to improve your habits everyday.

In management, the Kaizen approach  (otherwise known as Lean Management) is based on the belief that continuous, incremental improvement adds up to substantial change over time. This can be done in your daily habits and routine.

Find a better way to organize your workspace
Find a shortcut to work
Try a healthier food option

Little improvements in your routine will improve your life. Do this daily and compound your improvements and you have big changes in a short period of time.

Track your progress

You can use a piece of graph paper and place a check mark for each time you successfully completed your habit for the day. This acts as a way to reinforce the habit you are building.

A habit or goal tracking app also will work. There are several of them out there. I use Goal Tracker & Habit Calendar on Android.

Summary

Instead of focusing on a goal, focus on habits to reach your goals.
Focus on small daily habits that are not big.
Do 1% habits that reinforce each other and work on them every day.

Track your habit progress using a habit tracking app on your smart phone.

It will take anywhere from 20 days to 365 days. Track this until this is automatic.

Books helpful for habits

Mini Habits
Atomic Habits

I like to hear any comments or suggestions you have.
Until then, have a great year.

Windows package management with Chocolatey

What does DevOps have to do with Windows package management?

Good question, since maintaining consistency with software tools is a key principle in Development Operations. You don’t always have a choice on what environment or platform you can run and you are stuck with maintaining a Windows environment. Windows has been a pain for myself and many other people taking care of Window machines because the business needs them. Besides the most common problems in maintaining a Windows machine, installation and management of software is a big pain. It’s very likely that you have to support Windows in a desktop environment and server environment. I always thought, being an old school Unix Sys Admin, “Why can’t we have an automated package manager like apt-get, pkgadd, which are available in Unix/Linux in Windows?”
The answer I and many others found is in Chocolatey.

What is Chocolatey?

Chocolatey is a nuget based Windows package manager. Nuget is a .net framework library manager developed by Microsoft. The mechanisms used in Nuget is used for installing Windows packages.
Chocolatey does the following:
1 – Install software
2 – Upgrades software
3 – Remove software
4 – Installs dependencies
5 – Support unattended installs
6 – Support private repositories
7 – Works with automated provisioning systems (Ansible, Chef, Puppet, etc)
8 – Allows creation of private custom packages

Installing Chocolatey.

First, Chocolatey requires the minimum of Windows 7 sp 1 with Powershell Version 3 or later. Windows 10 on up meets the minimum requirement..

Install via powershell
As administrator, run the following on powershell window:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))

https://chocolatey.org/api/v2/package/chocolatey

After you install chocolatey, you can add any package you want.

$ choco install firefox

It will install the latest version of firefox.

To update firefox,

$ choco upgrade firefox

It will update firefox to the latest version.

To list all of the packages you have installed on your machine.

$ choco list –local-only

Chocolatey v0.10.11
7zip.portable 18.5

yed 3.18.1.1
84 packages installed.

This creates a list of all applications managed by chocolatey.

There are other things you can do with chocolatey such as creating your own packages, running your on repository and use tools like Ansible, Puppet or Chef to deploy these packages to your Windows machines. It’s beyond the scope of this article. I may cover this in a future article, just be aware it’s available.

Until then, have a good day.

Roy

Recommended Reading for DevOps – It’s Your Ship: Management Techniques from the Best Damn Ship in the Navy

So what would a book on management on a Navy ship have to do with DevOps?

Well it’s really a book on how Captain Michael Abrashoff created a collaborating organization on his ship while in the US Navy. As a result, he brought his ship from the bottom 3rd in the Pacific fleet to the best ship in the Navy. He increased his crew re-enlistment rate from 8% to close to 100% during his time on the USS Benfold.

The Military is know for it’s highly rigid command structure and for that matter its traditionally restrictive culture that discourages contribution and change. On top of that, you don’t get to choose your crew or your boss. Does that sound like a place you might be working for?

He created a collaborative culture by doing the following:

1 – See the ship through the eyes of the crew
2 – Communicating often
3 – Create discipline by focusing on purpose
4 – Listen aggressively

He also outlined how he did this in a restrictive military culture.
He would find ways to:

1 -Use dumb rules to his organizations advantage.
2 – Shelter his crew from the higher ups bad policies.
3 – Make his superiors look good and get latitude to run his ship.

Although this book has been out for a while (2002), these ideas presented in this book can give you some ideas on what you can do to implement the collaborative culture of DevOps in your organization.

Soft skills like communications and management are often overlooked by people in Software Development and Technical Operations. Take the time to improve these skills as it will not only enrich your workplace, but enrich your life.

If you have any suggestions or ideas, feel free to let me know.

Until then, have a good day.

Roy

Here is a link to the book:

It’s Your Ship: Management Techniques from the Best Damn Ship in the Navy by D Michael Abrashoff