Designing Victory based on Known Threats
I was once addicted to a RTS game called Halo Wars. This game was the first RTS game I had ever played and it was for the console (Xbox 360). The objective of the game was to deprive your enemy of their bases and / or military units such as infantry, air, etc. Thus, within the first 20 seconds of a game, I had already developed a strategy for either attacking the enemy base or countering their expected invasion. In order to develop a strategy within the first twenty seconds of a game, I would first have to execute a default strategy that would be easy to cancel and replace while at the same time performing reconnaissance on the enemy. Performing reconnaissance was absolutely vital for preparing to invade or countering an eminent attack. Just from observing the enemy’s environment, I could make the decision to execute the “Rush” strategy and invade before the enemy had setup their defenses or I could leverage the “Turtle” strategy and build-up my defenses so that I could counter their attack and then invade their territory with limited resistance.
After playing the game for a while, I noticed a pattern for most of the games that I had won:
- Destroy the enemy before they can get started. While building my infrastructure I would send a small force to disrupt any activities that the enemy had brewing. This forced the enemy to play on my terms. Thus, I set the pace of the game.
- Investing in infrastructure in response to enemy activity was absolutely paramount. It’s foolish to fight a war without understanding your enemy’s capabilities.
- Continuing to update infrastructure in response to enemy activity continued to be paramount. I continued updating my infrastructure and military units each time I identified a change in the enemy’s eco-system.
- If the previous patterns were established, then conquering enemy bases became easy. I had answers for each situation they put me in because I designed my infrastructure based on their threats
What does this have to do with Software?
Building software is also a game of planning and execution. The illustrations described also serve as patterns for building great software. The main point though is that in order to build software effectively, one must be strategic when building software infrastructure and execute software development strategies with ruthless intent.