Sink or Swim: How Battleship Teaches the Benefits of Iterative Development

Sink or Swim:  How Battleship Teaches the Benefits of Iterative Development
Photo by Will Esayenko / Unsplash

Responding to change over following a plan
- Manifesto for Agile Software Development [1]

The agile approach is all about embracing change. As a team, it's important to constantly learn and adapt to new approaches that can improve the quality and efficiency of your work. In this blog post, I introduce an interactive tool for the agile toolbox that can help teams experience iterative "development".

Iterative development is a fundamental aspect of the agile methodology. It allows teams to adapt and change plans as they work toward a goal. The concept of iterative development is not new and can be compared to the classic game of Battleship.

Battleship is a two-player game in which each player tries to sink the other player's ships by placing coordinates on a board. The game is a combination of strategy and guessing. One player places his ships on the board, and the other player tries to sink them by providing coordinates on the board. The game continues until one player has sunk all of the other player's ships.

In Battleship, the player who takes an iterative approach is more likely to win. Consider two teams: Team A and Team B. Team A plans ahead, trying to predict where the other player's ships are. Then it fires at those positions. Team B, on the other hand, uses an iterative approach. They fire at one position, and if they hit a ship, they adjust their strategy and fire at nearby positions.

As the game progresses, Team B becomes more likely to sink all of the other player's ships. They constantly adjust their strategy based on feedback from their previous moves. Team A, on the other hand, relies on predictions that may or may not be accurate. They may score hits, but they are less likely to sink all of the other player's ships.

In Battleship, the player who takes an iterative approach is more likely to win. Let's consider two teams: Team A and Team B. Team A uses predictive planning, trying to predict where the other player's ships are located. They then fire at those locations. Team B, on the other hand, uses an iterative approach. They fire at one location, and if they hit a ship, they adjust their strategy and fire at nearby locations.

As the game progresses, Team B is more likely to sink all of the other player's ships. They are constantly adjusting their strategy based on feedback from their previous moves. Team A, on the other hand, relies on predictions that may or may not be accurate. They may score hits, but they are less likely to sink all of the other player's ships.

The game of Battleship can teach us valuable lessons about iterative development. Predictive planning is unreliable because it is based on predicting the future, which is inherently unpredictable. In contrast, the iterative approach is empirical, and each iteration provides feedback that can be used to adjust and improve the plan.

Another parallel between Battleship and iterative development is that Team A often scores hits but fails to sink the entire ship. This is similar to developing features without thoroughly testing them. In contrast, Team B may not hit all the ships, but they are more likely to sink the ones they do hit. This is a metaphor for creating potentially shippable product increments, where each iteration delivers a tangible result that can be evaluated.

Occasionally, Team A may win, but this is due more to luck than judgment. Similarly, in development, relying on predictive planning can sometimes lead to a successful outcome, but it is not a reliable approach. Iterative development is a more effective approach because it allows teams to adapt and adjust their plans based on feedback from each iteration.

In conclusion, Battleship is a fun and interactive way to learn about iterative development. It emphasizes the importance of using an iterative approach to development and highlights the drawbacks of relying solely on predictive planning. By using an iterative approach, teams can build a more reliable and successful product.

The attached link is an online version where you can try both variants. Have fun sinking ships. Ahoy.


  1. Manifesto for Agile Software Development ↩︎

Battleships