Know Before You Move: Sun Tzu’s Intelligence Doctrine

There are two ways to make a strategic move: with foreknowledge, or with assumption.

One of them has a measurable, ugly track record.

Sun Tzu wrote about it 2,500 years ago. Most organisations still get it wrong.

He opens Chapter XIII of The Art of War with the diagnosis:

„Now this foreknowledge cannot be elicited from spirits; it cannot be obtained inductively from experience, nor by any deductive calculation. Knowledge of the enemy’s dispositions can only be obtained from other men.“

Strip the archaism and three claims fall out: you cannot guess at intelligence, past performance does not generate it, and models cannot replace it. The only legitimate source is human contact with the world you intend to act on.

The Five Types of Intelligence

Sun Tzu does not stop at „use spies.“ Giles renders Ch.XIII precisely:

„Hence the use of spies, of whom there are five classes: (1) Local spies; (2) inward spies; (3) converted spies; (4) doomed spies; (5) surviving spies.“

That is a complete intelligence taxonomy. Each class maps cleanly onto a function any modern competitive-intelligence (CI) team should already operate.

Sun Tzu's Five Spy Types, mapped to modern CI

Local spies — field reps and customer-facing staff. These are the people closest to the territory: sales engineers, service technicians, plant managers. The information they hold is rarely structured and almost never reaches the room where strategy is decided.

Inward spies — public filings and regulatory disclosures. Sun Tzu’s category was about getting officials of the enemy to talk. The modern legal analogue is exhaustive — 10-K filings, environmental permits, patent applications, tender results, court records. Most companies are leaving the majority of this signal unread.

Converted spies — industry analysts and expert networks. Whoever has built a career analysing your competitors knows them better than you do. Buying their time is one of the cheapest CI investments available.

Doomed spies — signal management. Sun Tzu’s grim category referred to spies sent with false information. Today, the equivalent is what your firm tells the market: earnings calls, pricing leaks, hiring patterns, deliberate strategic misdirection. You are also a doomed spy in someone else’s framework. Plan accordingly.

Surviving spies — primary research and field interviews. This is the only category that produces genuinely new intelligence. Customer interviews, supplier site visits, trade-show conversations. It is also the category most often the first cut when budgets tighten — the line item nobody defends in the room.

Foreknowledge Cannot Be Had from Spirits

Sun Tzu’s empirical claim — that intelligence cannot be deduced from inside the room — has aged disturbingly well. Look at where strategy decisions actually originate today: dashboards, quarterly results, forecasting models, consultant decks, vendor briefings, AI-summarised analyst reports.

All of those are secondhand. They are echoes of decisions other people have already made. None of them satisfy what Sun Tzu calls the only legitimate test: knowledge obtained from other men — meaning, contact with the world before it has been pre-processed.

The risk is subtle. Models and dashboards do not lie. They simply describe a state that no longer exists. By the time a competitor’s strategic move shows up in your variance report, they have already won the territory. Foreknowledge is, by definition, something you must acquire before it is general knowledge.

This is why the warning lands harder in 2026 than it did in 1996. The volume of secondhand information available to a strategist has multiplied a hundredfold. The volume of firsthand information has, if anything, declined.

Which raises the question: what should an organisation actually do about it?

Competitive Intelligence as Organisational Discipline

Most companies treat competitive intelligence the way they treat office supplies. They subscribe to a few feeds — Gartner, IBISWorld, a clipping service — and call it done. That is the Ritualised quadrant in the figure below: collecting, but not deciding.

Four postures toward foreknowledge: Reckless, Sun Tzu-grade, Paralysed, Ritualised

A Sun Tzu-grade CI function looks different in five concrete ways:

  • Staffed, not subscribed. Analysts whose only job is to know the competitive terrain better than the line managers do. A clipping subscription is not a function.
  • Outputs written assessments, not dashboards. A two-page memo that ends in a recommendation, not a chart that ends in a footnote.
  • On the distribution list for capital-allocation decisions — and on the agenda, not the appendix. If the board sees CI only after the deal closes, it isn’t CI.
  • Has standing to disagree with the line. A function that can be overruled by silence isn’t a function. The 2×2 above lives or dies on this single attribute.
  • Owns at least one surviving-spy channel. Primary research the firm cannot get from any subscription — supplier interviews, customer ride-alongs, field trips, trade-show debriefs. Without it, the function collects only echoes.

The blueprint is not new. Larry Kahaner’s Competitive Intelligence (1996) and Ben Gilad’s Business Blindspots (Probus, 1994) both describe what an organisational intelligence function actually requires. Gilad documents Eli Lilly’s Office of Strategic Intelligence as one of the early formal cases. Jan Herring established a comparable function at Motorola in 1982, then went on to co-found the Fuld-Gilad-Herring Academy of Competitive Intelligence. The professional society — SCIP, founded in 1986 — has been training practitioners for almost forty years.

The tools are not exotic. The discipline is not new. It is simply unevenly distributed.

The Cost of Acting Without Knowing

Every strategic move is made on one of two foundations: foreknowledge, or assumption. Sun Tzu’s claim is that the second is far more expensive than firms admit — and the failure rates are measurable.

Failure rates for moves made without enough intelligence

KPMG’s 2024 study of more than 3,000 public deals over $100M (2012–2022) found that 57.2% of acquirers destroyed shareholder value on a TSR-adjusted basis. KPMG’s earlier 1999 study of 700 cross-border deals (1996–1998) put the failure rate at 83%. The instrument has been refined; the diagnosis has barely moved in a quarter-century. Most acquirers do not understand what they are buying until after they own it.

CB Insights‘ Top Reasons Startups Fail report found that 43% of founders attributed failure to poor product-market fit — another phrase for „we did not know enough about the customer before we built the product.“

Three independent measures, three different forms of moving without foreknowledge, similar verdicts. Sun Tzu’s warning was not poetry.

The point is not that CI is a magic wand. The point is that the alternative — acting on assumption — has a measurable, ugly track record.

What to do this week (head-of-strategy edition):

  • Audit your last three strategic decisions. For each, write down what was known versus what was assumed. Most teams cannot tell the difference until forced to.
  • Find your firm’s surviving spies. Who actually talks to customers, suppliers, and field engineers? Are their notes ever read in the room where decisions are made — or do they die in someone’s inbox?
  • Read one 10-K of your most threatening competitor end-to-end. Most CI failures aren’t exotic — they’re cheap public signal that nobody bothered to read.

Tomorrow: positioning. If foreknowledge is what you know before you move, positioning is the move that makes the next fight unwinnable for the other side. (Article 3 — Shaping the Battlefield: Sun Tzu on Positioning Before Competition, Tuesday May 5.)

Show R Code
# =============================================================================
# generate_intelligence_doctrine_images.R
# Charts for "Know Before You Move: Sun Tzu's Intelligence Doctrine"
# Article 2 of 15 — Strategy That Lasts series (May 2026)
# =============================================================================
#
# Output files (all 800px wide, dpi=100, bg='white'):
#   https://inphronesys.com/wp-content/uploads/2026/05/intel_five_spy_types.png      (Ch.13 spy taxonomy → modern CI)
#   https://inphronesys.com/wp-content/uploads/2026/05/intel_failure_rates.png       (Primary-cited failure rates)
#   https://inphronesys.com/wp-content/uploads/2026/05/intel_ci_maturity_quadrants.png (Conceptual 2x2 — no numeric axes)
#
# Translation locked: GILES (1910), public-domain.
# Sun Tzu accent color: #7EB8C4 (May 2026 series color)
# =============================================================================

suppressPackageStartupMessages({
  library(ggplot2)
  library(dplyr)
  library(tidyr)
  library(scales)
})

source("Scripts/theme_inphronesys.R")

# Sun Tzu accent (May 2026 series tag)
suntzu_teal <- "#7EB8C4"
suntzu_teal_dark <- "#4A8A99"

# =============================================================================
# CHART 1 — Five Spy Types: Sun Tzu Ch.13 → Modern CI Roles
# =============================================================================
# Source: Sun Tzu, The Art of War, Ch.XIII "The Use of Spies", trans. Lionel
# Giles (1910), public domain. Project Gutenberg #132.
# https://www.gutenberg.org/files/132/132-h/132-h.htm
# =============================================================================

spy_types <- tibble::tribble(
  ~order, ~giles_term,         ~giles_definition,                                   ~modern_ci,
  1L,    "Local spies",        "Inhabitants of a district",                          "Field reps and customer-facing staff",
  2L,    "Inward spies",       "Officials of the enemy",                             "Public filings, regulatory disclosures",
  3L,    "Converted spies",    "Getting hold of the enemy's spies",                  "Industry analysts and expert networks",
  4L,    "Doomed spies",       "Spies who carry false information",                  "Signal management and counter-intelligence",
  5L,    "Surviving spies",    "Spies who bring back news from the enemy's camp",    "Primary research and field interviews"
)

# Position rows top-to-bottom by reversing the y-order
spy_types <- spy_types |>
  mutate(y = rev(seq_along(order)))

p1 <- ggplot(spy_types) +
  # Light alternating row backgrounds for readability
  geom_rect(aes(xmin = 0, xmax = 10, ymin = y - 0.45, ymax = y + 0.45),
            fill = "#f8fafc", color = NA) +
  # Left accent bar (Sun Tzu teal)
  geom_rect(aes(xmin = 0, xmax = 0.12, ymin = y - 0.45, ymax = y + 0.45),
            fill = suntzu_teal, color = NA) +
  # Giles term (left column)
  geom_text(aes(x = 0.3, y = y, label = giles_term),
            hjust = 0, fontface = "bold", size = 4.6,
            color = iph_colors$dark, family = "Inter") +
  # Giles definition (italic, below term)
  geom_text(aes(x = 0.3, y = y - 0.25, label = giles_definition),
            hjust = 0, fontface = "italic", size = 3.4,
            color = iph_colors$grey, family = "Inter") +
  # Arrow
  annotate("text", x = 4.3, y = spy_types$y, label = "→",
           size = 5, color = suntzu_teal_dark, family = "Inter") +
  # Modern CI mapping (right column)
  geom_text(aes(x = 4.7, y = y, label = modern_ci),
            hjust = 0, size = 4.2, color = iph_colors$navy,
            family = "Inter") +
  scale_x_continuous(limits = c(0, 10), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0.4, 5.7), expand = c(0, 0)) +
  labs(
    title = "Sun Tzu's Five Spy Types, Mapped to Modern CI",
    subtitle = "Chapter XIII of The Art of War — the 2,500-year-old taxonomy of foreknowledge",
    caption = paste(
      "Source: Sun Tzu, The Art of War, Ch.XIII, trans. Lionel Giles (1910), public domain.",
      "Definitions paraphrased from Giles for clarity; full text at gutenberg.org/files/132/132-h.",
      sep = "\n"
    )
  ) +
  theme_inphronesys(grid = "none") +
  theme(
    axis.title = element_blank(),
    axis.text = element_blank(),
    panel.grid = element_blank(),
    plot.margin = margin(15, 20, 10, 15)
  )

ggsave("https://inphronesys.com/wp-content/uploads/2026/05/intel_five_spy_types.png", p1,
       width = 8, height = 5, dpi = 100, bg = "white")

# =============================================================================
# CHART 2 — Failure Rates: The Cost of Acting Without Knowing
# =============================================================================
# Every bar primary-source cited. Each represents a different kind of
# "moving without foreknowledge".
# =============================================================================

failure_data <- tibble::tribble(
  ~category,                                ~rate, ~source_short,
  "M&A deals that destroyed\nshareholder value (2012–2022)",      57.2, "KPMG (2024)",
  "Mergers that failed to enhance\nshareholder value (1996–1998)", 83.0, "KPMG (1999)",
  "Startup failures attributed to\npoor product-market fit",            43.0, "CB Insights (2026)"
) |>
  mutate(category = factor(category, levels = rev(category)))

p2 <- ggplot(failure_data, aes(x = rate, y = category)) +
  # Reference line at 50%
  geom_vline(xintercept = 50, color = iph_colors$lightgrey,
             linetype = "dashed", linewidth = 0.5) +
  geom_col(fill = suntzu_teal, width = 0.6) +
  geom_text(aes(label = paste0(rate, "%")),
            hjust = -0.15, fontface = "bold", size = 5,
            color = suntzu_teal_dark, family = "Inter") +
  geom_text(aes(label = source_short, x = 0.5),
            hjust = 0, size = 3.2, color = "white",
            fontface = "italic", family = "Inter") +
  scale_x_continuous(
    limits = c(0, 108),
    breaks = seq(0, 100, 25),
    labels = function(x) paste0(x, "%"),
    expand = c(0, 0)
  ) +
  labs(
    title = "The Cost of Acting Without Foreknowledge",
    subtitle = "Three independent measures of moves made without enough intelligence",
    x = NULL, y = NULL,
    caption = paste(
      "Sources: KPMG, \"All that glitters is not gold\" (2024) — 3,000+ public deals >$100M, TSR-adjusted.",
      "KPMG, \"Unlocking Shareholder Value\" (1999) — 700 cross-border deals, 1996–1998.",
      "CB Insights, \"The Top 12 Reasons Startups Fail\" (2026) — 431 founder post-mortems since 2023.",
      sep = "\n"
    )
  ) +
  theme_inphronesys(grid = "x") +
  theme(
    axis.text.y = element_text(size = 11, color = iph_colors$dark,
                                lineheight = 1.0, hjust = 1),
    panel.grid.major.y = element_blank(),
    plot.caption = element_text(size = 8.5, color = iph_colors$grey,
                                 hjust = 0, lineheight = 1.3,
                                 margin = margin(t = 12)),
    plot.margin = margin(15, 25, 10, 10)
  )

ggsave("https://inphronesys.com/wp-content/uploads/2026/05/intel_failure_rates.png", p2,
       width = 8, height = 5, dpi = 100, bg = "white")

# =============================================================================
# CHART 3 — CI Maturity Quadrants (CONCEPTUAL — NO numeric axes)
# =============================================================================
# Foreknowledge Discipline (x) × Action Speed (y)
# Pure conceptual frame. NO synthetic-but-plausible data.
# =============================================================================

quadrants <- tibble::tribble(
  ~x,   ~y,   ~label,           ~tag,                                          ~fill,
  0.25, 0.75, "Reckless",       "Move fast.\nMove blind.",                     "#E8B4A8",
  0.75, 0.75, "Sun Tzu-grade",  "Know first.\nMove decisively.",               suntzu_teal,
  0.25, 0.25, "Paralysed",      "Don't know.\nDon't move.",                    iph_colors$lightgrey,
  0.75, 0.25, "Ritualised",     "Know everything.\nDo nothing with it.",       "#D4C5A0"
)

p3 <- ggplot() +
  # Quadrant fills
  geom_rect(data = quadrants,
            aes(xmin = x - 0.25, xmax = x + 0.25,
                ymin = y - 0.25, ymax = y + 0.25,
                fill = fill),
            color = "white", linewidth = 1.5) +
  scale_fill_identity() +
  # Quadrant titles
  geom_text(data = quadrants,
            aes(x = x, y = y + 0.1, label = label),
            fontface = "bold", size = 6,
            color = iph_colors$dark, family = "Inter") +
  # Quadrant tags
  geom_text(data = quadrants,
            aes(x = x, y = y - 0.08, label = tag),
            size = 3.6, color = iph_colors$dark,
            family = "Inter", lineheight = 0.95) +
  # Axis arrows
  annotate("segment", x = 0, xend = 1, y = -0.05, yend = -0.05,
           arrow = arrow(length = unit(0.2, "cm"), type = "closed"),
           color = iph_colors$grey, linewidth = 0.6) +
  annotate("segment", x = -0.05, xend = -0.05, y = 0, yend = 1,
           arrow = arrow(length = unit(0.2, "cm"), type = "closed"),
           color = iph_colors$grey, linewidth = 0.6) +
  # Axis labels
  annotate("text", x = 0.5, y = -0.1,
           label = "FOREKNOWLEDGE DISCIPLINE →",
           fontface = "bold", size = 3.8,
           color = iph_colors$grey, family = "Inter") +
  annotate("text", x = -0.1, y = 0.5,
           label = "ACTION SPEED →",
           fontface = "bold", size = 3.8,
           color = iph_colors$grey, family = "Inter",
           angle = 90) +
  # Endpoint labels
  annotate("text", x = 0.05, y = -0.13, label = "Low",
           size = 3, color = iph_colors$grey, family = "Inter") +
  annotate("text", x = 0.95, y = -0.13, label = "High",
           size = 3, color = iph_colors$grey, family = "Inter") +
  annotate("text", x = -0.13, y = 0.05, label = "Slow",
           size = 3, color = iph_colors$grey, family = "Inter", angle = 90) +
  annotate("text", x = -0.13, y = 0.95, label = "Fast",
           size = 3, color = iph_colors$grey, family = "Inter", angle = 90) +
  scale_x_continuous(limits = c(-0.18, 1.05), expand = c(0, 0)) +
  scale_y_continuous(limits = c(-0.18, 1.05), expand = c(0, 0)) +
  coord_fixed() +
  labs(
    title = "Four Postures Toward Foreknowledge",
    subtitle = "A conceptual frame. Three of these quadrants are failure modes.",
    caption = "Conceptual diagram. No empirical axes."
  ) +
  theme_inphronesys(grid = "none") +
  theme(
    axis.title = element_blank(),
    axis.text = element_blank(),
    panel.grid = element_blank(),
    plot.margin = margin(15, 15, 10, 10)
  )

ggsave("https://inphronesys.com/wp-content/uploads/2026/05/intel_ci_maturity_quadrants.png", p3,
       width = 8, height = 7, dpi = 100, bg = "white")

# =============================================================================
# Confirmation output
# =============================================================================
message("\n=== Intelligence Doctrine images generated ===")
message("https://inphronesys.com/wp-content/uploads/2026/05/intel_five_spy_types.png")
message("https://inphronesys.com/wp-content/uploads/2026/05/intel_failure_rates.png")
message("https://inphronesys.com/wp-content/uploads/2026/05/intel_ci_maturity_quadrants.png")

Interactive Dashboard

References


Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert