The Best Defense


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.


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…


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?