Nguyen Le PhongNguyen Le Phong

Software Engineering Fatigue

Making software is like assembling Lego: you learn the fundamental bricks, then the precomposed blocks, then blocks made of blocks — until finding out what is actually underneath becomes impractical. Somewhere in that drift, learning changes character from understanding things to merely using things, and that artificiality is the source of the fatigue.

Making software is like assembling Lego bricks.

At first, you learn the fundamental bricks — the small, primitive pieces everything else is eventually built from. Gradually, you learn the precomposed blocks made from those bricks: the abstractions built by others so you don’t have to start from the studs each time.

A Vietnamese software engineer studies layered toy-brick structures beside a laptop with abstract blocks on the screen.
The first bricks are easy to see; the fatigue begins when every useful block is built from another block you did not make.

More and more, as systems grow complicated, people compose blocks from blocks that were themselves built by others. Layer settles on top of layer, each one a convenience that hides the one beneath it.

Eventually you stray far from the fundamental bricks. The cost of finding out what bricks are actually down there becomes impractical — at least if your real goal is shipping sellable software on a deadline. And somewhere in that drift, your learning quietly changes character: from understanding things into how to use things. You don’t learn the bricks anymore; you accept the blocks as handed to you. They are incidental; they feel artificial — and that artificiality is the source of the fatigue.

A Vietnamese engineer lifts the top layer of a toy-brick tower to reveal mixed pieces underneath beside a prism and pendulum.
Looking underneath has a cost: sometimes the layer you lift only reveals more layers, some useful and some merely inherited.

To put it in perspective: learning physics boils you down toward the truth of the universe — each thing you learn is a deeper layer of something real. Learning software engineering today mostly means learning arbitrary inventions of other people. They do not compound; one person’s framework does not stack cleanly onto another’s the way physical law does, so the effort rarely accumulates into something permanent.


What did you think?