By Jody in Software Design —

Tactical vs. strategic programming

I have been thinking a lot latterly about what we as software engineers should be doing going forwards in a world with AI. In his book "A Philosophy of Software Design," John Ousterhout describes two types of programmers:

  1. The tactical programmer - someone who will implement a feature as quickly as possible: As long as the code works, they are done.
  2. The strategic programmer - someone who will implement a feature, but spend extra time shaping it so it is easy to extend and reason about in the future; to them, working code isn't enough.

AI coding agents are heavily biased towards the tactical side: They want to get the job done via the shortest possible path. Over time we as software engineers need to keep this in check, not just for our future selves, but also for the future AI that has to build on our code: An AI's performance will get worse when building on slop. This is where I think we as engineers should be focusing our efforts.

We no longer need to do the donkey work of writing the code. Instead, we can focus almost exclusively on the high-value strategic work: making the code architecturally sound and able to easily embrace new features. We need to do this by proactively steering our agents to align with our best intent, not passively letting them do the first thing that works.