Ready for Devops

Standard

I mentioned recently that it’s time to shift your focus from getting things “done” to being “ready”. What follows is a more specific, actionable post about what that means for your team (assuming your team, like mine, is responsible for delivering software solutions)…

Another Devops Definition

If you are in a technology industry today, you are talking about “Devops” (or “devops” or “DevOps”). Business leaders are gravitating toward that term in droves. Before the genie gets out of the bottle, though, and you’re asked to spin up a devops team, I felt it best to set the table for a valuable conversation. I’d argue that devops, done properly, is about being ready for success. Let’s break down what devops means:

  • Devops is not a tool, a team, a process or a technology. It is a culture. At it’s heart, it is about an organization focused on a single definition of success. I can’t begin to prescribe what success means for your organization, but it is generally about making customers happy with outstanding products or services. By bridging the gap between the software development lifecycle, IT service management, and business process management, devops establishes a unifying purpose and quantifiable behaviors for every individual to contribute collaboratively to the success of the organization.

Why Does it Matter?

The one thing we can count on in technology is change. In order to be responsive without being reactive, we need to agree on the some fundamentals. With the pace of change in our lives, we must be capable of truly letting go of the notion of getting “done” with our work. We are never “done”, but we must always be “ready”.

Since I tend to think in lists, I’ve built one here to help communicate what it means to be ready. I think it goes a long way to helping an organization adopt a devops culture. Unlike a traditional “checklist”, though, this post should serve as a roadmap throughout the lifecycle of an application/product/solution. Your team can then assess each stage of the lifecycle with full transparency, staying honest with themselves and their stakeholders as they travel the feedback loop together.

Even if adoption doesn’t make sense in all cases, or one team’s definition varies from another’s, the goal remains the same: Begin with the end in mind. Communicate, collaborate and commit to shared accountability for a successful solution. If you decide that a piece of this list doesn’t or shouldn’t apply to your solution, at least you’re making that decision in full light of day. Do what makes sense, and keep expectations clear with absolutely everyone. That is the mark of a technology professional.

Caveat: Don’t use this list as a project plan. Use it as a reference. Go off and prove concepts. Write code. Exploratory work is critical when you kick-off a project. Just be prepared along the way. If you think the launch is the finish line, you’ve already failed.

The Definition of Ready

  1. Success is defined. However your team defines success, there must be a single definition. Everyone who has a stake in your project has to be clear what it means to succeed. Without this building block, all the best developers or ops teams or salesman can never be enough.
  2. A solution is developed, reviewed, and tested. Whatever set of standards and best practices you decide to adopt (or create), follow them when you develop software. Hold each other accountable to them when you conduct peer reviews. Use them to help the whole team find and fix bugs in testing.
  3. The solution is documented. People understand pictures. It doesn’t matter if your team is full of ninjas or rock stars or gurus or whatever other term is en vogue. A solution is not just for developers, or even technical folks. Just draw a picture of the solution and its integration points. If you ever need to consult an outside expert or vendor, or hire a new employee, you’ll be glad you have it.
  4. The solution is deployed and accessible. Ideally, you have a handle on continuous delivery. Ultimately, though, you simply need to understand how and where your solution gets deployed. That includes the stages through testing and staging and production. Does the team understand how changes make it to a customer? Is everyone responsible for supporting the solution capable of accessing it?
  5. The solution is monitored. Every production solution needs monitoring. I can’t begin to tell you how detailed yours must be. Just be sure that your solution issues relevant, clear and identifiable information when a fault occurs and is being monitored for both faults and performance. Keep in mind, too, as it relates to operations: faults must be actionable. If they aren’t, get comfy with the pager.
  6. The solution has clear diagnostics, escalation and remediation. Your solution should be capable of being “smoke tested” with clear red/green results. Those results, just like any faults caught by monitoring, need to be clearly understood by all parties. That includes troubleshooting steps, known workarounds, automated tooling, etc. The point here is to be planning for what can break, how to fix it, and when to call in the experts.
  7. The solution is built for high availability and disaster recovery. Are you prepared for a catastrophic outage? Are your customers? Simply checking this box because you deploy to the cloud isn’t going to cut it. Is you solution capable of being completely redeployed to a different environment in a minimally invasive manner? Get rid of secret sauce and tight coupling to environments.
  8. The solution provides adequate reporting capabilities. You will be asked for data. Big or small, performance, usage, financials, outages… There are many interested parties. Be sure you are setup to provide answers. If you solution is not capable of providing data for analysis by stakeholders, you’ll be on the spot more often than not. Be ready to answer the questions you’ll get.
  9. The solution is staffed. Technology gives us tremendous scale, but there are still people charged with keeping it alive. When there are enough people and they understand how to do what is required, customers never know they exist. That’s a good thing. Remove the people (or try to get by with too few), and the customers will know one person: You.
  10. The solution has been communicated. Ultimately, your solution is not yours at all. The product or service you provide and this entire checklist is designed to be shared with the people who are staking their time, money or brain power on the success of the project. I hope you use this checklist as a point of reference to keep everyone on the same page. They need to know if you’re ready. So tell them.
  11. Repeat. Iterate. Work hard. Play hard. End of the list. Thought you were done? You’re not done. You’re ready. Ready to do it again and again and again… That’s what success looks like. Congratulations!

There you have it. That’s what I’ve learned in my career at many companies, small and large, new and old. Another thing I’ve learned is that there is much more to be learned from the perspectives of everyone else who’s breathing right now. So, leave a comment or a question. I’m ready to keep learning!

Advertisements

Developing a God Complex

Standard

It’s not what you think. The term “God Complex” has been misused for as long as it’s been part of the lexicon. Don’t beat yourself up about getting it wrong. I, too, once thought of it as a way to denigrate those who are on a perpetual power trip. A recent conversation changed all that.

I was chatting with my mother recently about giving. We agreed that, while the act of giving is frequently seen as a sacrifice, it always ends up leaving the giver feeling “warm and fuzzy”. Why does it feel good to give? It feels good because giving is an act of love, and acts of love give us a clear glimpse into the heart of the Almighty.

KONICA MINOLTA DIGITAL CAMERA

This tiny insight offers an opportunity to redefine the God Complex. It is not about a power trip. It’s about loving without reservation. And it’s crazy tough to practice! Here’s how to get started:

  • Offer ourselves as a sacrifice. Whether time, talent, or treasure, we all have an abundance from which others can benefit.
  • Give without expectation. We can give out of pure love, confident that we a fulfilling a need and not depending on the attitude of the recipient to validate our gift.
  • Take joy in the response. When we receive appreciation in return, we can experience true joy. This is not a requirement, but a welcome bonus.

Let’s take “God Complex” back! From this point forward, every time I hear it, I’ll change the picture in my head. I resolve to no longer see a selfish, cutthroat megalomaniac. Starting right now, I’ll see a sacrificial giver, full of joy and reveling in the impact they can make with their love. I’m hoping to develop a God Complex of my own. Care to join me?

Why you’re not getting anything done

Standard

You work hard. You’re always busy. That long to-do of yours keeps growing every day. The projects you think are finished always come back for more. You never seem to be done with anything. Me neither. It doesn’t bother me, though, and it doesn’t have to bother you. In fact, I’d like to show you how you can be successful beyond imagination when you stop trying to get things done.

I’ve got lists of things I need complete at work, home, church, etc. It used to bother me when, no matter how much I got done, more work kept piling up. I felt like productivity was never leading to accomplishment. I tried prioritizationdelegation, and disconnecting. Each of these are valid approaches to productivity, and I employ all three on a daily basis. None of them, though, provide me with an empty to-do-list.

After struggling for years, I came to the realization that I was focused on the wrong goal. An empty to-do list is no holy grail. There is no prize to be won for having an empty plate. Getting things done, I learned, is not as important as we make it out to be. Here’s how I learned to be comfortable with unfinished business:

  • Do work that matters to people. This shifts the focus from the tasks to the relationships. When you make this change, you start working with purpose. Purposeful work should never be complete. Connecting to people, serving others and deepening relationships are all real accomplishments that never get crossed off the list. The to-do list is a selfish endeavor. Focus on others instead. You’ll never be done. There’s always more work to do. Find satisfaction in working with purpose every day.
  • Focus on being ready, instead of done. A successful project is one that has longevity and satisfied users. By definition, then, success makes more work. Delivering a product is just the beginning of a cycle of constant improvement. Customer feedback, market shifts, and technology changes combine to make the notion of “being done” ludicrous. The work you are doing today is preparing you for the work you’ll do tomorrow. Focus on being ready to capitalize on the next opportunity to delight customers. Be thankful that success comes from preparation, not completion.
  • Keep score along the way. When you’re secure in the fact that the best work never really gets done, that doesn’t always mean others will agree. We all have people in our lives who will hold us accountable to get things done. Keeping a journal of your accomplishments will help you communicate with others when you’re asked what you’ve worked on. It also works for me to look back from time-to-time. Reviewing my journal sheds light on the fact that, while building relationships and preparing for future successes, I actually got a lot done. See what I did there?

That’s how I changed my perspective on productivity. It’s made every day a little bit better, and life a lot more fulfilling. Are you ready to do the same?

An anchor in a sea of change

Standard

Every situation in life is subject to change. Economy, health, career, relationships… Just like the temperature in my home town, they can change dramatically from one day to the next. What helps me, and what I hope will help you, is maintaining a constant sense of self.

A constant sense of self is driven by identifying and adhering to consistent values. These values are at the core of your being, regardless of circumstance. Core values define who you are and drive how you behave. They draw a clear line between what you can control and what you can’t. And they help you separate behaviors from results, the journey from the destination.

I’ve spent the last several years developing my core values. I review them daily and use them as a checklist to make decisions of all sizes. When I learn of a change beyond my control, I look to my values to guide my reaction. When everything is running smoothly, I let my values drive changes and improvements in my personal and professional life.

Being a lifelong geek, I built an acronym out of my values. It’s not a requirement, but it sure helps in communicating them to myself and others. For me, FAITH is the foundation, so it made natural sense to build my values around it.

Focus. Time and attention are liquid assets and you can choose whether to spend or invest them. There will always be distractions and competing priorities, but valuing focus helps you invest in the activities that bring the most value to your life.

Accountability. Accountability always makes people think of consequences. That’s not how I see it. Accountability is a two-way street. In my decision-making process, it ensures that I’m thinking of impact to others. In relationships, it ensures that I am open about my expectations. I believe we’re all in this together, and I behave accordingly.

Investment. Think like an owner. As a value, investment helps me in two ways. In making decisions, I evaluate as if I’m taking ownership — is the return worth committing my time, attention, money? Once committed, investment helps keep me on track, willing to make sacrifices. Investment means that it’s never “just a job”.

Thankfulness. Realizing that life is a gift elicits a response of gratitude. Sometimes it’s easy to be thankful, other times it’s not. In times when appreciation is difficult to come by, truly valuing Thankfulness forces me to take pause and look for the good in any situation. The big picture always shows me the blessings I’ve received and I can’t help but respond with thanks.

Helpfulness. The great Zig Ziglar used to say “You can have everything in life you want, if you will just help other people get what they want.” Truer words have never been spoken. Putting others’ needs first is the mark of a leader and an example I try to set every day. For my children, my team, my friends and my community.

“None of us knows what might happen even the next minute, yet still we go forward. Because we trust. Because we have Faith.”
― Paulo CoelhoBrida

Focus… Accountability… Investment… Thankfulness… Helpfulness… F-A-I-T-H

There you have it. My core values are the ideal me. They are not one-size-fits all, but I hope they inspire you to examine your own and build healthy habits to reinforce them daily. Paying attention to what is truly important to you will keep you honest with yourself and provide you with clarity in uncertain times. If there’s one thing in this world that’s worth understanding, it’s you.

The Best Defense

Standard

How do you keep users happy with your production code?

Users are happy when your code works, so your team (rightly) focuses on quality. Best practices are followed and many hands are involved in ensuring quality software makes it to production. Surely, conventional thinking dictates, we can avoid production bugs if enough people pitch in to help.

Except you can’t avoid production bugs. You can, however, delay software deployment and disappoint your users. User experience, at its core, is about handling the complicated bits behind the scenes, so your users can simply use your software (or use your software simply). Your users don’t care about your quality control processes or compliance policies. Your users care about using your software. In production.

So, the question becomes: How can you deliver quality software faster?

I’ll assume, for the purposes of this article, that you’ve already implemented the common sense development practices of Test-Driven Development, Peer Reviews and Quality Assurance testing of all sorts. Those are table-stakes for this game. Unfortunately, along the way you’ve likely also implemented rigorous change control processes, complete with checks, balances and hoops through which you must jump before you can make go from development to production. Are you ready for the three-step recipe to delighting your users?

  1. List the people, processes and technologies that stand between development and production.
  2. Eliminate everything that is not required by law.
  3. Automate the rest.

All software has bugs and all production systems have corner cases that can’t be tested in QA. Start with that realization. Continue with a passion for excellence/quality. Arrive at a decision to take a leap of faith.

keepemlaunching

We aren’t shipping diskettes with each new production version (if you are, I’ll accept your scornful comments). We’re capable of making changes at Internet speed. Write your tests first. Develop software with healthy paranoia. Engage deeply in consistent code reviews with your expert peers. Execute a clear QA plan. Communicate changes with stakeholders. Then… Push. The. Button.

The best defense is a good offense.

  • Question the necessity of every step between development and production.
  • Attack the status quo with a vengeance. There is no fear in this dojo.
  • Automate everything that slows you down. Computers love well-defined, repetitive tasks.
  • Ship it. Again and again. Just keep making your software better.

Your users are counting on you responding to their needs. They are going to deal with bugs. They just might not deal with a delayed response. Show them you care, and ship it.

Today I…

Standard

Today I had a big project turn south. An upcoming change to critical IT infrastructure got delayed. My team was disappointed by the setback, and it was my fault. Sure, the project had many variables spread across a sea of shifting priorities, but it was mine to manage. The communication with our stakeholders was mine to own, to drive, to execute. And I failed.

As we worked through our options and lamented the myriad complications, my mind drifted back to a conversation I had earlier this year with my middle daughter. She was worried about starting a new school year. She felt like a failure and said she “would never be good at school”, that she was “stupid”. These are fighting words in our house, as I don’t tolerate anyone speaking like that about my children… even the children themselves.

At that time, I told her what would become a rallying cry for her in school and many other pursuits in life: ”We all have bad days. Today sounds like it was one of those. We can’t go back in time and work harder or learn more or change anything at all to avoid this bad day. All we can do is start right now, making every day a little bit better than the day before. If we do that, before long, our bad days become good days.”

The more I recalled that conversation with my daughter, the more I realized that the real failure of today was to focus on the bad day. I took my own advice to heart and went a step further… I vowed to start making every day a little bit better and to track my progress. Every day, I will make an intentional effort to improve my leadership, my organization and my company. I will make a difference and I will tell the story. By tracking each improvement on a daily basis, I’ll be able to articulate each small change that led to every significant improvement.

I challenge you to do the same. Make a difference. Don’t focus on failure. Focus on getting better. I started today.

Today I forgave myself. Today I started what I’ll finish. Today I practiced what I preach. Today I led by example. Today I got a little bit better at getting a little bit better.

Tomorrow, I’ll do it again. Will you?