Design decisions around commands vs reporters

I'm going to speak for myself when I first started Snap!: the mutation of a list using the add, replace, insert, and delete blocks seemed like magic to me.

Long explanation of how I thought the list commands worked and the problems I had

I thought that maybe, behind the scenes, Snap! was doing something like this:


The list input here is of type "any (unevaluated)". In this example, the block essentially detects the variable you inputted in the list slot and changes its value. Of course, if you give it anything other than a variable, it errors (ignore the set blocks, I forgot to remove them for the screenshots):


Similarly, I thought the primitive would do nothing if given a list reporter or some other block that reports a list. Why should it do anything, seeing as there was no place in storage (a variable) for the list to mutate or be retrieved?
In the middle of a larger project, I created this block for use:

Of course, I never expected it to mutate the list it was given because the variable fed to the replace command was not the caller's variable. I had no notion of two variable containing the same list.
Here is something else I did not realize: the list commands could operate on lists inside of lists. Once again, I thought it was limited to just variables.

Combine the two of these misunderstandings, and you get a very confusing problem (this was not the real script, my actual program was much more complicated):

In this example, I gave the inputs "jump", "linguini", and "time". However, my output has "time" twice and "jump" never shows up. So, when debugging, I was very confused: even if the replace item reporter was somehow mutating the list, it should only have changed the range variable, especially because the range variable was only one of the items in the list variable. There was simply no way that this made any sense. I concluded Snap! had a bug and ended up reinitializing my list variable every iteration of the loop. And I moved on.

In any case, it was about a year before I read this topic and learned what I was doing wrong and how to combat it (id of). I used map TONS during that time, especially because it didn't seem to be affected by the "bug" in list mutation.