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.

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.

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. (A weariness named well in a friend’s notes.)


What did you think?