PTENES
Skip to content
MODULE 2.1 · HUMAN SKILLS

♟️ Tactical × Strategic

AI "ate up" tactical programming — writing code line by line is no longer where your value lies. Your turn is to move up a level: think like the general at the top that wins the war, not the battle. Based on John Ousterhout, "A Philosophy of Software Design". Each term is explained as it comes up.

6
Topics
~40
Minutes
Zero
Prerequisite
Theory
Type
Progress: 0% 0 of 6

📖 Living glossary (read first — come back whenever you need to)

Track 1 has already established the basic vocabulary (model, prompt, agent, skill, harness). Here in the Track 2 — Human Skills the NEW terms for this module go here. Lock these in before moving on:

Tactical programming — the day-to-day work, line by line: writing code, changing syntax, finding bugs, doing commits. Earning the battle (the task at hand).
Strategic programming — thinking long term: how the codebase should be, which decisions increase the team’s speed. Gaining the war, not just the battle.
Ousterhout — John Ousterhout, Stanford professor and author of the book "A Philosophy of Software Design", where the tactical × strategic distinction Matt Pocock uses comes from.
Syntax — the language’s “grammatical” rules: semicolons, parentheses, the right function name. It’s the most mechanical side of code.
Commit — a “save” of your work in the project's history (in Git), with a message describing what changed. The bread and butter of tactical work.
Delegate — handing a task to someone else (or AI) to carry out while you remain in charge of the decisions.
1

📚 Ousterhout and the two modes

🧠 Imagine it this way: An army has two kinds of people. The soldier pulls the trigger in the heat of battle—immediate action, on the ground. The general stays at the top of the hill, deciding where to attack and how to position everything to win the war. Programming has these exact same two modes.

Before talking about AI, we need a yardstick. Matt Pocock borrows one from John Ousterhout, a Stanford professor and author of "A Philosophy of Software Design". In the book, he divides programming work into two very different modes: tactical programming e strategic programming. These aren’t “skill levels”—they’re ways of thinking about what you're doing right now.

The difference, in Pocock’s own image: the tactical is “winning the battle”—the day-to-day work of writing syntax, find bugs, do commits. O strategic is “winning the war”: it’s the general at the top thinking about what the codebase needs to be and which strategies will increase speed in the long run. The reason of this becoming a topic now: AI has radically changed who does what in each mode. A common mistake is treating the two as the same thing ("it’s all programming") — they call for different mindsets.

TACTICAL — win the battle • writing code line by line • dealing with syntax • find bugs • making commits STRATEGIC — win the war • what the codebase should be • long-term decisions • what increases speed • the general at the top of the hill

Two modes of thinking, not two levels. AI has changed who handles each side.

Conceptual illustration: on the left, soldiers on the battlefield (tactical); on the right, a general on a hilltop looking at the map (strategic)

⚠️ Common beginner mistake

Think that "knowing how to program" = "typing code fast." That's only the tactical side. Anyone who only trains the tactical side is easy to replace — precisely the side AI already does better than you.

In one sentence: tactical = win the battle (today's code); strategic = win the war (tomorrow's system).

Going deeper (optional): why Ousterhout and not another author?

"A Philosophy of Software Design" is short, practical, and was written long before the AI boom—which is why it isolates tactical × strategic as design principles, not as a trend. Pocock likes to cite it precisely because it’s a foundation "that has worked for 30-40 years" (the thesis of Trail 1): when you anchor on the right foundation, AI’s arrival only changes who executes, not what matters.

2

⌨️ Tactical Programming

🧠 Imagine it this way: is the bricklayer laying bricks one by one. Real, necessary, visible work—but they don’t decide where the house goes or how many rooms it has. They build the wall they were told to build.

A tactical programming is the work you see happening: opening the editor and writing the lines, remembering where the parenthesis goes, running the program, seeing that it broke, hunting down the bug, fixing it, and saving with a commit. It’s the software “factory floor.” For decades, it was here that most programmers spent 80% of their time on — and this was where “who programs well” was measured.

It’s honest, indispensable work: without tactical work, nothing runs. But it has a dangerous trait — it’s mechanical and standardizable. Almost every tactical task has already been done millions of times by someone: creating an endpoint, validating a form, writing a loop. That’s why the reason matters: anything repeatable and well-defined is exactly the kind of thing machines learn to do. The common mistake is confusing “I’m busy typing” with “I’m creating value”—a lot of typing can hide a lack of decisions.

write run find the bug fix commit A repeatable, well-defined loop — exactly what machines learn quickly.
Illustration: a keyboard and flowing lines of code, representing the mechanical tactical work of day-to-day tasks

Quick retrieval: which of these is work tactical?

In one sentence: the tactical level is the software equivalent of "laying bricks"—necessary, but repeatable and easy to automate.

3

🗺️ Strategic programming

🧠 Imagine it this way: the home’s architect. They don’t lay a single brick, but decide where the foundation goes, how the rooms connect, and where the plumbing runs. One wrong decision from them costs 1000 bricks’ worth of repairs later.

A strategic programming is the opposite of “typing.” It’s thinking before e around of the code: how the codebase should be structured, which interfaces connect the pieces, and which decisions today will speed up (or stall) the team a year from now. In Pocock’s words, it’s "winning the war, not the battle" — the work of the general at the top.

For Ousterhout, the strategic involves design the hard parts first, scope each task well, think through interfaces between modules, plan tests and scenarios, and design a codebase that’s easy to work with. The reason for this to be rare: you can "deliver" without doing any of this—just push tactical code that works today. The cost comes later, in the form of technical debt. O common mistake is putting off strategy “until you have time”: that time never comes, and the codebase decays.

design the hard parts scope tasks well interfaces between modules tests and scenarios documentation that points codebase that’s easy to evolve = the war is won

🔬 Worked example: the same feature, two modes

Task: "add credit card payments". See the difference between tactical-only and strategic:

Tactical only

Call the payment API right on the cart page, copy the validation code from somewhere else, commit. It works today. → When Pix, boleto, and subscriptions come in, each one becomes another patch stuck onto the page. It turns into a maze.

Strategic first

Draws a interface "PaymentMethod" with a clear contract; card is the first implementation; write contract tests. → Pix and bank slip are added by implementing the same interface. The AI handles each one on its own, following the template.

In one sentence: the strategic part is designing the landscape so every future feature (yours or AI’s) is easy to fit in.

4

🤖 Why AI dominated tactical work

🧠 Imagine it this way: the cash register "ate up" the cashier's mental arithmetic. No one gets hired for adding numbers quickly anymore. The value shifted to those who decide the price, the display, what to sell. AI did that to tactical work.

Here's the phrase that gives the module its name. Matt Pocock is direct: "AI has basically eaten tactical programming. It's gone." — the AI basically "ate up" tactical programming, it was over. Not in the sense that the tactical approach no longer exists, but in the sense that is no longer where your value lies: the AI handles the tactical work better and cheaper that you. Remember topic 2? Tactical work is repeatable and well-defined — and that’s exactly what an model where language shines.

The practical consequence is significant: you now have access to a "infinite fleet of tactical programmers" that work 24 hours a day, never get tired, and cost pennies. But — and this is the key point — a fleet is only as good as the person commanding it. The reason for this to push you upward: if tactical work has become cheap and abundant, the bottleneck has become the strategic. O common mistake is continuing to compete on tactical work (“I’ll type faster than AI”)—a race you’ll lose against someone who never sleeps.

YOU the strategic tactical agent · writes code tactical agent · fixes bugs tactical agent · makes commits tactical agent · writes tests An endless fleet of tacticians — commanded by a single strategist.
Illustration: a human figure in command directing a fleet of AI agents carrying out tactical tasks

⚠️ Common mistake

"If AI handles the tactical work, I don't need to understand code anymore." Wrong: you still need to read e judge the tactical level for commanding the fleet. What changes is that stopping at the tactical level is no longer enough—not that it no longer matters.

In one sentence: the AI ate up the tactical work — so all your value shifted to the strategic side.

5

🧗 Level up

🧠 Imagine it this way: the kitchen’s best cook becomes the chef. They still know how to chop and fry—but now their value lies in the menu, the brigade, and the standard for every dish. Someone who only handles the knife never opens a restaurant.

If the tactical work has been absorbed, the move is to level up: start operating strategically. Pocock is clear that "strategic programming hasn't changed with AI" — the fundamentals of designing a good system are the same as always. What changed was for the person you delegate the tactical work to: before, you handed the mechanical tasks to junior and mid-level developers; now you delegate for AI. The reason for this to be liberating: you spend less time typing and more time deciding—that's where the real result takes shape. The common mistake is “leveling up” only on your business card (becoming a “leader”) without ever letting go of tactical work in practice; then you become a bottleneck that reviews every line. Real growth means entrust execution and focus on design.

1 · type the tactical details (AI already does that) 2 · read and judge the AI 3 · design the system Leveling up means letting go of the lower rung, not accumulating all three.

✓ Level up

  • • Design interfaces and scope before coding.
  • • Delegate tactical work to AI and review it critically.
  • • Spend your free time thinking through the system.

✗ Getting stuck in the tactical

  • • Competing with AI at typing speed.
  • • Manually rewrite what AI has already delivered.
  • • Putting off design “until there’s time.”

In one sentence: the strategic part hasn’t changed—only the “junior” has been replaced by AI; your turn is to become the one who provides direction.

6

🎖️ The general at the top

🧠 Imagine it this way: the general doesn’t fire the cannon—they decide where it points. If they go down to shoot, no one commands the army. Your place is at the top of the hill, reading the whole map.

Wrapping up the module: the metaphor of the general at the top is the summary of everything. AI is your tactical force; you’re the strategic general. To delegate effectively to that force—the subject of all of Track 2—Pocock gives Ousterhout’s list: design the hard parts first, scope tasks very carefully, think through the interfaces between modules, think about tests and scenarios, and have enough documentation to point the AI to the right places. Before you “tell the AI to code,” run the checklist below — it’s the practical summary of this module. Copy and paste it when delegating a task:

checklist-do-general.txt
Antes de mandar a IA codar, pense como GENERAL (estratégico):
[ ] PARTES DIFÍCEIS — qual é o pedaço arriscado? Desenhei ele na frente?
[ ] ESCOPO — a tarefa está nítida e fechada, ou está vaga demais?
[ ] INTERFACES — como este módulo conversa com os outros? Defini o contrato?
[ ] TESTES — quais cenários provam que ficou certo (inclusive os de borda)?
[ ] DOCUMENTAÇÃO — apontei a IA pros arquivos/padrões certos do projeto?
Se respondeu tudo, o tático (a IA) é só execução. Você ganhou a guerra.
GENERAL you · strategic AI tactics AI tactics AI tactics AI tactics

Quick recall: what does Pocock mean by "AI ate the tactical work"?

In one sentence: your place is at the top of the hill — define the war and let the tactical troops (the AI) win the battles.

🧾 Module Summary

✓
Two Modes (Ousterhout) — tactical = win the battle (today's code); strategic = win the war (the system).
✓
AI has taken over the tactical work — does it better and cheaper; you've gained an infinite fleet of tacticians.
✓
Level up — the strategy hasn’t changed; only the “junior” has been replaced by AI. Go to design.
✓
Be the general at the top — hard parts, scope, interfaces, tests, documentation. Then delegate.

Next module:

2.2 — Your skills are the ceiling: why you are the AI multiplier, and how seniors get 10x.