Thinking Games

[article]
Summary:

Have you outgrown playing games, now that you're in the serious business of software quality assurance? Well, maybe it's time to get that old chess board out of the closet. In this column, Elisabeth Hendrickson argues that the thinking skills you develop from games will serve you well in planning software projects.

I have a deep appreciation for games. I believe that they allow us to explore the way the world works in a small, contained setting. Every game I play teaches me different lessons I can apply elsewhere in life. Games of chance teach me about risk. Games of skill teach me about strategies and tactics. Both kinds of lessons serve me well in software management.

My father taught me to play chess when I was a child. The key to playing chess well is thinking ahead—imagining how your opponent will react to your move, and then how you will react to your opponent's possible moves. As a novice chess player, I had difficulty imagining my own moves much less figuring out how my father might respond. Similarly, as a novice manager, I had trouble seeing the effects my actions might have.

Thinking ahead—anticipating outcomes and analyzing implications—is a key to building good software. We need to think ahead when managing the project, changing requirements, making design choices, and designing tests.

Consider the client/server software where the client software assumed that everything the server sent would be in the proper format. Unfortunately, the server generated bad data on occasion. When the server generated bad data, the client tended to crash.

Or consider the company that changed its business strategy from selling software to hosting the software as a service. By design, the software could support only one customer per server. As a result, the company spent about $15,000 on hardware for each new customer, more than some customers paid for the service over the lifetime of their contract.

So what can we do to improve our ability to think ahead? How can we predict the consequences of our decisions on software projects?

Practice, Practice, Practice
It's easy to practice chess. Find a partner or run a chess program and play the game. It's harder to practice thinking ahead on software projects. But without practice, it's difficult to become good at it. It's easier and safer to practice thinking ahead in business when you aren't the person in charge. Imagine yourself in the leaders' shoes. What would you expect to happen? How would you react? It may take a long time for the organization to feel the effects of decisions, so keep observing even after it looks like the events are water under the bridge. Keep track of your predictions and the actual results.

Study Past Games
Great chess players often study past games to learn gambits, combinations of moves that have been effective in the past. You can learn a great deal from past projects in your company. Review the notes, status reports, metrics, and any other artifacts you can get your hands on. Identify the pieces. Think about the shape of the board. See how the team made decisions and analyze how well those decisions worked.

Your historical knowledge helps you in three ways: 

  1. It helps you improve your ability to predict the future, and thus think ahead.
  2. It teaches you which strategies and tactics have worked in your environment in the past and which have failed.
  3. It gives you leverage in influencing your teammates. It's powerful to be able to say, "Well, you know, we tried reviews back on the 2.5 release and they worked well. We stopped doing them because of schedule pressure, but maybe we should start again." 

About the author

Elisabeth Hendrickson's picture Elisabeth Hendrickson

The founder and president of Quality Tree Software, Inc., Elisabeth Hendrickson wrote her first line of code in 1980. Moments later, she found her first bug. Since then Elisabeth has held positions as a tester, developer, manager, and quality engineering director in companies ranging from small startups to multi-national enterprises. A member of the agile community since 2003, Elisabeth has served on the board of directors of the Agile Alliance and is a co-organizer of the Agile Alliance Functional Testing Tools program. She now splits her time between teaching, speaking, writing, and working on agile teams with test-infected programmers who value her obsession with testing. Elisabeth blogs at testobsessed.com and can be found on Twitter as @testobsessed.

StickyMinds is one of the growing communities of the TechWell network.

Featuring fresh, insightful stories, TechWell.com is the place to go for what is happening in software development and delivery.  Join the conversation now!