
Don’t build systems, build subsystems - ingve
https://blog.jessitron.com/2019/10/13/dont-build-systems-build-subsystems/
======
frumiousirc
This is sage advice.

There is an anti-pattern, counter to this advice, which I call software-
psychopathy.

This is when someone (the psychopath-developer) surveys the entire problem
landscape of the full system and identifies a sub-problem, carves out a sub-
system that is unnatural but fits their competency and through their position
in the software-social-order and/or through personal charisma pushes a
solution which makes all surrounding problem space even harder to solve.

The psychopath-developer says, "I see we have problems, A, B, C and D. I will
solve B with X and now all that the solutions to A, C and D need to do is
satisfy requirements L, M, N, O and certainly Q. Aren't I a genius? Now,
excuse me as I leave the details to you and go "help" another group!"

A more charitable term might be "picking low-hanging fruit". Inside this
metaphor, by thoughtlessly picking the heavy low-hanging fruit the psychopath-
developer unweights the branch sending the rest of the fruit higher, out of
easy reach and adding burden to those suckers that come later to actually get
all the fruit. Meanwhile, the psychopath-fruit-picker is long gone enjoying
the fruits of his easy labor.

~~~
karmakaze
This exact thing happens when someone undertakes a refactoring without a clear
concept of which factor is being separated. I now avoid the word refactoring
and say I'm factoring 'thing'. If you'd factored it right the first time you
wouldn't have to refactor it. That's not quite true sometimes things can
factor further or choose a different factor first. Deduplication isn't
factoring unless it's named and salient.

------
FooHentai
I appreciate the sentiment. It's one of the most notable distinctions to be
seen between junior and senior positions in almost any area, at least where
the titles have been appropriately awarded.

A junior will create the thing or carry out the task that's asked of them with
but are often tone deaf to the context that surrounds the request and outcomes
desired. A senior will implicitly addresses the wider context, asking probing
questions to that end, without prompt.

You can also apply this concept in the opposite direction, to aid in
understanding systems you encounter. Considering it within the context it
operates in, but also what the intentions were of whomever created/deployed
it. Considering both angles usually leads to far better understanding in less
time.

------
dr_dshiv
Amen. This has big implications for artificial intelligence. It's one of the
reasons why I prefer to think about building cybernetic systems than AI..
cybernetics is classically all about systems in ecosystems, whereas AI
perpetuates the illusion of autonomy.

While this doesn't market well, it is a better tool for thinking. Not creating
artificial intelligence, but contributing to smart systems.

------
wvh
It's a valuable lesson to be learnt during one's career, especially if one
tends to come up with very unique and esoteric solutions, or is heavily into
all things novel. Your beautiful system isn't an island, and it's going to
have to interface with the rest of the "obviously" much less perfect world at
some point sooner rather than later. I've seen lots of middle-of-the-road
solutions succeed where more interesting approaches failed because they did
not integrate well with the rest of the world.

------
Hitton
That sounds lot like the UNIX philosophy:

Write programs that do one thing and do it well.

Write programs to work together.

------
asplake
In reality there is always a bigger system. The wisdom here is in recognising
that.

------
dana321
Bigger messages to learn from this:

Build for platforms, don't build in a vacuum. Ie. Use an existing battle-
tested framework if you can.

And.. Use existing subsystems if they already exist instead of reinventing the
wheel.

