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:
- It helps you improve your ability to predict the future, and thus think ahead.
- It teaches you which strategies and tactics have worked in your environment in the past and which have failed.
- 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."
Ask "What if?"
"What if?" is the most powerful question a game player or software professional can ask. The company that changed its business strategy was too busy trying to attract customers to ask, "What if we're enormously successful and sign up hundreds of customers?" The answer would have been that they would need hundreds of servers, a place to put those servers, and administrators to run those servers-problems that all came to fruition.
The company where the engineers decided that the client didn't need any error handling to handle bad data didn't ask the very simple question, "What if the server isn't infallible?"
Jerry Weinberg says, "If you haven't thought of three possibilities, you haven't thought enough." For each decision, consider at least three possible outcomes. For each outcome, consider at least three possible causes. Cause and effect in a game is straightforward. Cause and effect in real life is far less tractable. Use the rule of three to expand your "What if?" thinking.
Finally, the ultimate key to thinking ahead is to think. Think actively. Think continuously. If you find yourself on autopilot, going through the motions, it's time to pause long enough to engage your brain. Use your greatest tool—the one between your ears—to your best advantage.
Thinking ahead is a learned skill, both in games and in real life. I struggled for years before finally beating my father at chess and I still can't beat him regularly. Just when I think I have him backed into a corner, he makes a surprising move and crows, "Checkmate!" If thinking ahead in a game with a finite number of tactics and strategies is so difficult, it's no wonder we often fail to think ahead in the real world where possibilities are endless. But as long as you're thinking, you have a much better chance of thinking ahead.