Sometimes I like to cook.
There are at least two modes of cooking: dish (aka intent, goal, design) mode and fridge (aka tools, economy, implementation) mode.
Dish - you define what you want and allocate required resources.
Fridge - you start with controlled resources and look for a wish that fit the most.
We (humans) switch between this modes all the time, usually too fast to recognise.
I sense we are too focused on “how to” (fridge) part, and don’t pay enough attention to “what is it for” (dish) part in our current state [of software development].
If implementation name is REPL, then design name is PERL.
Thread macro “->” is a good example.
Thread of what? My intents or CPU cycles?
Easier (to read) is a tricky argument.
Easier to confirm a happy path? Maybe.
But what about other options?
We have to untwist a thread into a DAG.
Yeah, I know, sometimes “just do it/any option” is not a bad option. Sometimes.
If you forget about other options. Like, don’t do it now (at all).
Take a look at any workflow/dataflow/visual-programming-tool.
It always “implementational”, time-forward, left-to-right.
Even the best example I’ve found so far (https://github.com/framed-data/overseer) goes halfway in example.
Intent (aka result) for each edge goes first, but still “finish” is the last line.
(def job-graph
{:start []
:result1 [:start]
:result2 [:start]
:finish [:result1 :result2]})
Do you need your “finish” or you just like to “start”?