This is the first post in a series where I centralize my thoughts on the present+future of software engineering. In this post, I'll lay out a few observations that both summarize my worldview and serve as the basis for all the armchair commentary in subsequent posts.
The Timeline Abstraction
Before we get into it, I'm going to first explain an abstraction I've been using. It's called the timeline, and I use it to:
- reason about the function of all engineers.
- approx. the tendency for an agent (human/llm/hybrid) to make useful economic & material contributions. [1]
The timeline has 2 ends: regularity on the left, ambiguity on the right. It's finite on the left, and infinite on the right. The ability of an agent to move problems leftward—from ambiguity into regularity—is what creates usefulness. [2]
A problem is considered regular when its constraints are well known and its solution can be mathematically or determinstically verified. In reverse, a problem is ambiguous when it's surrounded by noise, and has constraints that are yet to be discovered.
Observations
1. Code generation is a solved problem
Codegen, as a problem, was solved by compilers, transpilers, and codemods before coding agents
got onto the scene. The distinguishing factor was moreso where on the
timeline they were operating from.
In my opinion, compilers & codemods solved problems that existed on the short-to-medium timeline. But the thing coding agents bring to the scene is the ability to solve problems on the medium-to-long timeline — something previously reserved for software engineers due to the amount of coordination, creativity, and long-term planning it requires.
We're cooked, but the alpha has always been about how well you could pull things from right to left. Both mathementically & socially.
2. Review is a function of experience [R = f(e)]
The ability to review a piece of written software, in relation to the larger system, is
strongly dependent on your ability to write the said code, ergo, experience. You really can't,
in any useful way, review a piece of code or architecture whose raison d'etre you couldn't
elaborate.
This is important, and I talk more about code review in my next post, since I believe how we solve it will provide a better index on the future of software engineering.
3. "Coding is the easiest part."
A common saying from software engineers who just discovered the sales team. Yes, I understand
where it comes from, but classically trained software engineers know the software engineering
lifecycle, and every working software engineer lives it.
But of course, it's a very human problem for the crude work that underpins any moonshot to go unrecognized. That said, statements like these ALSO conceal some of the more social parts of software production.
Raw feature implementation, however boring & easy it is, serves a key function, in that it's the reproduction center for the next generation of code reviewers. The training ground has been automated away, and I don't see anyone talking about this.
4. Software engineering has asymmetric value
Software compounds ridiculously well. Infra, libraries, frameworks, architecture, etc, anyone
can use it as long as they have the hardware and know where to insert it. This is one of the
reasons why tiny but focused eng teams can run large shops—Telegram, Instagram, WhatsApp, and
many others did this.
We all do this. I mean, how big is your node_modules folder? How many meta employees did you pay for your React dashboard? When a security vulnerability in the Linux kernel is discovered, the entire economy enjoys the work of the cortesian army almost instantly.
Software is madly asymmetric and cuts across the entire economy. If there's any way for its production process to be subsidized, it will be subsidized. Nothing highlights this more than Frontier Labs, who have cummulatively raised over 100billion USD, focusing on one main thing: software production. [3]
5. Efficiency, as a universal value of modernity
After the industrial revolution, efficiency took center stage and became somewhat of a
universal value. Other values with no economic alignment moved elsewhere. One consequence is
that production is rearranged so components can be easily swapped out, measured, and optimized
to make the overall system efficient.
This search for efficiency creates a latent crisis, especially now that short-to-mid-term programming is pretty much solved. To this, I worry for junior engineers in the near term and everyone else in the longer term.
6. The invention of the 1000x engineer
There is massive hype surrounding the effectiveness of coding agents, and their ability to
accelerate useful creation. This has resulted in the creation of several layers of pressure
and a rather dysfunctional environment. If you're not running 50 parallel agents, you're
getting left behind in the "permanent underclass". If you're not constantly executing, your
ideas aren't worth much.
An industry-scale race has been initiated, whose endgoal we're not aware, whose finish line no-one knows, yet the hysteria grows. This is largely caused by the lack of quality external signal, even though this exact mechanism was how we made useful progress as a society.
The attention economy doesn't help. The influentists also do not help. Unfortunately, the conversations they spark up with their tweets and posts, get distilled into living cultures in startups. Alot of them also have blogs & podcasts which they monetize, so more traffic is a net-positive for them.
We're yet to see 1000x output from any of the newly minted 1000x'ers, companies or startups. But all this doesn't matter, as long as you've consumed 2 billion tokens.
7. General Reorganization
This is more sociological, but a "new" set of ideas
are competing in the market. One about execution, one about
ideas generation. Of course, there's an interesting line
between homo faber and
animal laborans,
creative work and
repetitive work, and lastly, by virtue of all of us
being homo-sapiens, the absolute non-existence of
non-intellectuals. But who has time to look back and figure
out how society gets stratified, especially when there's so much existential pressure
orchestrate 500 agents.
Closing
These 7 observations capture the state of things really well. They're not supposed to say anything in particular, or even be coherent, even though they're somehow linked together. This is more of an exercise to gather my thoughts and set up my next posts.
In my next post, sociotechnical regulators II, I will talk a bit more on code review.
Post Publish Notes
After publishing this article, the social media algorithms started surfacing a few interesting research papers. They are mostly relation to a fragmentation being caused by AI usage.- AI assistance + Skill Formation - Interestingly, they do not evaluate code-writing, as they assume the function will be handled by coding agents. Secondly, in their findings, the best performing group used AI to generate the code, and then used AI again, to improve their understanding.
- AI as a seniority biased technological change - Skimmed this, but it basically analyses a massive decline in junior employment.
[1] The definition of useful here is still a WIP, but for purposes of argument, let's scope it to making your company happy & increasing overall system(human, company, country) efficiency. Surely, these have net-positive effect on the economy. go back
[2] I'm still working out how many dimensions the "timeline" exists in. But for now, a 1D version with 2 ends is good enough. go back
[3] I'm aware they have other departments & plan to conquer all verticals, and software happens to be their best wedge so far. Why don't they double down on legal? go back