Skip to content

Commit e21775c

Browse files
committed
Clarifications on infra engineering.
1 parent 6be124d commit e21775c

File tree

1 file changed

+100
-55
lines changed

1 file changed

+100
-55
lines changed

‎lft.md‎

Lines changed: 100 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div class="sans-text">
44

55
**Joshua Levy** ([GitHub](https://github.com/jlevy), [Twitter](https://x.com/ojoshe))\
6-
*v0.1.10 (July 2025) – Draft!*
6+
*v0.1.11 (July 2025) – Draft!*
77

88
<div class="boxed-text">
99

@@ -175,9 +175,8 @@ time.
175175

176176
## The Complexity of Software Engineering
177177

178-
> “Technology is the solution to human problems, and we won’t run out of work till we
179-
> run out of problems.”
180-
> —Tim O’Reilly[^oreilly]
178+
> *Technology is the solution to human problems, and we won’t run out of work till we
179+
> run out of problems.*” —Tim O’Reilly[^oreilly]
181180
182181
### What is Technology?
183182

@@ -199,14 +198,13 @@ problems.
199198
People (even programmers and tech leaders) make confused statements about programming
200199
and engineering[^progvseng] surprisingly often.
201200

202-
The thinking seems to be: Programmers write code.
203-
But now AI writes code.
204-
In fact, it writes code better than most programmers.
205-
Therefore programmers are no longer needed.
201+
The thinking seems to be: *Programmers write code.
202+
But now AI writes code—in fact, better than most programmers.
203+
Therefore, programmers are no longer needed.*
206204

207205
In my view, this reasoning reflects a deep misunderstanding of what engineering is.
208-
It is a bit like confusing writing with typing.
209-
Writing certainly involves typing (at least, it does today), but it’s a woeful
206+
It is a much like confusing writing with typing.
207+
Writing certainly *involves* typing (at least, it usually does today), but it’s a woeful
210208
misunderstanding to think the value of a writer is their typing
211209
ability.[^combinedskills]
212210

@@ -221,8 +219,17 @@ best solve the problem.
221219
It takes time and effort to *explore* the problem and possible solutions.
222220
Engineering is a practical exploration of solutions to a problem.
223221

224-
Not everyone would give this definition, but I hope I can convince you this is the
225-
correct one.
222+
<div class="boxed-text">
223+
224+
***Software engineering** is the precise exploration of software solutions to human
225+
problems.*
226+
227+
</div>
228+
229+
### Why We Will Always Need Engineers
230+
231+
Not everyone would give this definition of engineering, but I hope I can convince you
232+
this is the correct one,
226233

227234
Just for fun, let’s take a hypothetical example.
228235

@@ -244,17 +251,10 @@ The more clever or determined users would start *exploring* what they really wan
244251
Changing B to D or adding a special case E, and so on.
245252

246253
You know what you’d call those determined, unusually analytical users who were good at
247-
figuring out what they really wanted?
254+
figuring out what people really want?
248255

249256
You guessed it: engineers.
250257

251-
<div class="boxed-text">
252-
253-
***Software engineering** is the precise exploration of software solutions to human
254-
problems.*
255-
256-
</div>
257-
258258
### What is Good Engineering?
259259

260260
Another fundamental question is, why is software engineering so hard, both for humans
@@ -284,8 +284,8 @@ solutions.*
284284
You need to do it quickly but at the same time without getting bogged down by details
285285
that aren’t really relevant to the problem.
286286

287-
As one of the best engineers I know describes it, “good engineering is moving fast but
288-
not painting yourself into a corner.”
287+
As one of the best engineers I know puts it, “good engineering is moving fast but not
288+
painting yourself into a corner.”
289289

290290
### Product vs. Infrastructure Engineering
291291

@@ -312,47 +312,87 @@ engineering*.
312312

313313
This distinction can help resolve some confusions.
314314

315-
For example, most arguments between engineers on things like software architecture and
316-
programming languages are not about product engineering.
315+
For example, you’ve probably seen heated arguments between engineers on things like what
316+
database to use, which programming langauge is better, or if microservices are a
317+
mistake.
317318

318-
Product-thinking people often find these arguments confusing or distracting.
319+
Product-thinking people often find these arguments confusing or just a waste of time.
319320

320-
But it’s because they are not about product engineering.
321-
They are about infrastructure engineering: they are arguments about *what infrastructure
322-
will lead to future sustained velocity for other engineers*.
321+
That’s because they are not about product engineering.
322+
They are about *infrastructure engineering*: they are arguments about *what
323+
infrastructure will lead to future sustained velocity for other engineers*.
323324

324325
Product-oriented people most respect people who give solutions to users.
325326
Engineering-oriented people most respect engineers who help other engineers be more
326327
productive.
327328

328329
These observations have applied for decades on software teams.
330+
But this observation has new relevance today with LLMs.
329331

330-
But it has new relevance today with LLMs.
331332
LLMs are currently best implementing clear specifications.
332333
Product engineers can often give clear specifications.
333-
However, infrastructure engineers are problems for other engineers.
334-
It’s harder to give specifications for infrastructure engineering because so aspects are
335-
non-obvious, second order, and take time to observe.
334+
335+
However, infrastructure engineers are solving problems for *other* engineers.
336+
It’s much harder to give specifications for infrastructure engineering because almost
337+
every hard decision is non-obvious, second order, and takes time (often years!)
338+
to observe.
339+
340+
To a junior engineer, Java and Python may both seem perfectly fine for writing programs.
341+
Similarly, Postgres and MongoDB might seem like just two different ways to store data.
342+
To an experienced engineer, these are radically different technologies.
343+
This is because they have years of experience with the non-obvious and painful ways each
344+
of these tools caused them problems.
336345

337346
LLMs help all engineers, but they can do more for product engineers than for
338-
infrastructure engineers.
339-
So human engineering effort is increasingly about infrastructure engineering.
347+
infrastructure engineers, because LLMs are best at pattern matching from training data.
348+
Such pattern matching works better for features (which are typically written using
349+
similar languages and syntax) than for infrastructure (which can change the way you
350+
solve problems entirely).
351+
352+
There are two consequences of this.
353+
First, this means human engineering effort is increasingly about infrastructure
354+
engineering. helps human engineers be more productive also helps LLMs be more produtive.
355+
And secondly, good infrastructure, once it is used in training data, also helps LLMs.
340356

341357
<div class="boxed-text">
342358

359+
*LLMs are better at product engineering than at infrastructure engineering.*
360+
343361
*LLMs make (human) product engineers more effective.*
344362

345-
*(Human) infrastructure engineers make LLMs more effective.*
363+
*But (human) infrastructure engineers are what make LLMs more effective.*
346364

347365
</div>
348366

349-
### Three Types of Complexity
367+
Let’s give an example of the last point.
368+
369+
Almost all engineers readily acknowlege that CSS is overly complex and full of pitfalls.
370+
Thankfully, many people now say, LLMs know CSS and can now handle the things that were
371+
previously error-prone for humans.
372+
373+
This is true. But what is often overlooked is that another thing is also true: if it’s
374+
hard for humans, it’s also hard for LLMs!
375+
376+
It is *relatively* far more productive to use an LLM with good infrastructure than it is
377+
with bad infrastructure.[^infravsllm]
378+
379+
<div class="boxed-text">
380+
381+
*If you can minimize irrelevant complexity for an LLM while staying within the scope of
382+
the training data, you can achieve more with the same LLM.*
383+
384+
</div>
350385

351-
> People will strive to experience an equal or increasing level of complexity in their
352-
> lives no matter what is done to reduce it.
353-
> —Bruce Tognazzini
386+
Minimizing accidental complexity for engineers and LLMs is (for a while at least) still
387+
the job of human infrastructure engineers.
354388

355-
Let’s mention another word that has a few distinct meanings in engineering: complexity.
389+
This brings us to another word that has a few distinct meanings in engineering:
390+
complexity.
391+
392+
### Three Types of Complexity
393+
394+
> *People will strive to experience an equal or increasing level of complexity in their
395+
> lives no matter what is done to reduce it.*” —Bruce Tognazzini
356396
357397
An alternate and important way to frame the concept of good engineering is originally
358398
due to Fred Brooks: good engineering involves exploring the *essential complexity* of a
@@ -363,7 +403,7 @@ This is actually just a reframing of the same definition above of sustained velo
363403
Having too much accidental complexity is a common way engineering slows down and becomes
364404
ineffective.[^techdebt]
365405

366-
In fact, I think it’s best to think of three kinds of complexity that arise in
406+
In fact, I think it’s best to think of *three* kinds of complexity that arise in
367407
engineering:
368408

369409
- **Natural complexity:** If you are building an airplane, you need a good understanding
@@ -647,10 +687,10 @@ that need ongoing resolution.
647687

648688
<div class="boxed-text">
649689

650-
Socio-technical systems require a combination of both **exact** and **inexact**
651-
procedures.
690+
*Socio-technical systems require a combination of both **exact** and **inexact**
691+
procedures.*
652692

653-
Exact and inexact procedures are qualitatively different and not interchangeable.
693+
*Exact and inexact procedures are qualitatively different and not interchangeable.*
654694

655695
</div>
656696

@@ -677,11 +717,11 @@ and deal with issues personally.
677717

678718
<div class="boxed-text">
679719

680-
Exact procedures can be composed easily: combine them and the result is an exact
681-
procedure.
720+
*Exact procedures can be composed easily: combine them and the result is an exact
721+
procedure.*
682722

683-
Inexact procedures can only be composed with care: if you combine them naively the
684-
result is likely to be useless.
723+
*Inexact procedures can only be composed with care: if you combine them naively the
724+
result is likely to be useless.*
685725

686726
</div>
687727

@@ -695,7 +735,7 @@ The design of systems of inexact processes is qualitatively different from pure
695735
engineering.
696736
This is why many generic early “agent frameworks” were not as useful as they
697737
at first may have seemed.
698-
Agent frameworks often are trying to componse lots of inexact processes, blindly hoping
738+
Agent frameworks often are trying to compose lots of inexact processes, blindly hoping
699739
the composition would work.
700740

701741
### Is English the New Programming Language?
@@ -722,9 +762,9 @@ next month will do the same thing 99.9% of the time.
722762

723763
<div class="boxed-text">
724764

725-
English is ideal for documenting inexact procedures.
765+
*English is ideal for documenting inexact procedures.*
726766

727-
Code (of some form) is ideal for documenting exact procedures.
767+
*Code (of some form) is ideal for documenting exact procedures.*
728768

729769
</div>
730770

@@ -833,10 +873,10 @@ This may be a bold statement, but I think it’s worth exploring its implication
833873

834874
## The Metaphor of Linting
835875

836-
> “When you make it harder to do the basic parts of an activity, the more advanced parts
837-
> become almost impossible … Tools don’t only make things easier: they allow us to
838-
> augment ourselves to do things that were previously impossible.
839-
> —Doug Engelbart[^aug]
876+
> *When you make it harder to do the basic parts of an activity, the more advanced
877+
> parts become almost impossible … Tools don’t only make things easier: they allow us to
878+
> augment ourselves to do things that were previously impossible.*” —Doug
879+
> Engelbart[^aug]
840880
841881
### A Brief History of Linting and Type Checking
842882

@@ -1452,6 +1492,11 @@ License](http://creativecommons.org/licenses/by-sa/4.0/).
14521492
This is the real reason for the classic startup advice to ship fast and
14531493
iterate.[^leanstartup]
14541494

1495+
[^infravsllm]: Another way to think of this is, LLM training is generally not the most
1496+
efficient way to design infrastructure, because essential information (such as the
1497+
difficulty of writing code, or how error prone that code is in a given framework)
1498+
simply isn’t in the training data (at least so far).
1499+
14551500
[^nosilverbullet]: Frederick P. Brooks, [*No Silver Bullet—Essence and Accident in
14561501
Software
14571502
Engineering*](https://worrydream.com/refs/Brooks_1986_-_No_Silver_Bullet.pdf), 1986.

0 commit comments

Comments
 (0)