Some years back, Jens made a list of all the major features he had in mind up until around now, and for the most part he's been checking them off steadily. But some major things not on that list have also been done.
For example, I've been bugging Jens about APL-style array processing since I joined the team for BYOB 3. But when Jens learned from Mark Guzdial about media programming, he suddenly became excited about it for efficiency reasons.
The recent JS-dictionary based OOP work was also a sudden idea, because German CS teachers were asking for it.
Metaprogramming, on the other hand, was on the list all along. I think it was the last item (I don't have a copy handy), so who knows what's next... well, except I'm excited that meeting the needs of people who want to specialize one menu input based on the setting of another one has gotten Jens 90% of the way to a general internal definition feature. The main obstacle was making a block's script variables available to any code in its Block Editor window, not just to the main block itself, and now we have that. Internal definitions are another thing I've wanted since the beginning.
The ability to use dynamic scoping, another thing I've wanted all along, is now doable using the THIS CALLER block.
I know Jens still wants to improve our handling of sounds, so you should expect something to happen about that eventually.
A huge elephant in the room is accessibility for people with visual or motor impairment. The keyboard editor is a first step, but there's lots more we need, including in particular an interface to screen reader software.
We also know the costume editors (bitmap and vector) need a rewrite. I'm guessing that now is a good time to take a break from big new features to deal with that, and with incremental backup saving (maybe log-based), and a bazillion little things that have been in the github issues collection forever.
In parallel with that, we're working on improving the community site to have better support for classroom teachers and to allow comments on projects as everyone wants.
Most of our big ideas have come from the languages we grew up in, namely Smalltalk for Jens and Lisp for me. Those are two of the small number of programming languages that embody important big ideas in computer science; APL is another. And Prolog, which can be implemented as a library written in Snap! itself. (That's almost at the hold-your-breath stage, thanks to @qw23.) In my view those are the big four. We've learned from Henry Lieberman's design for prototype-based object inheritance done right (as distinct from how JS does it). Continuations, of course, come from Scheme, our preferred dialect of Lisp.
(By contrast, the whole mainstream C-based languages, including JS, Java, and Python, are based not on big organizing ideas but rather on exposing to the programmer the weaknesses of computer hardware. That's entirely appropriate for C's original purpose, namely to implement the Unix operating system, or operating systems in general, or the memory management part of a programming language processor. But it's harmful when used as a general-purpose language, and especially when used as a teaching language. Imho.)
Our design goals have been changing, in what I view as a sorta chaotic way. When we started out, our goal was to have a minimal language in which other features could be implemented by the users; we were very proud about getting first class procedures and lists while adding only eight blocks to Scratch. We are super proud that FOR, MAP, etc. can be written in Snap! itself.
But when you write such basic tools in Snap!, your programs run slowly. Over time we've implemented more and more, especially list processing tools, as primitives. I'm pleased that they're primitives, so we are putting our best (functional) foot forward about list programming, but also sad that students don't get the benefit of writing them themselves. The recent addition of editable primitives is another thing I've asked for since forever! This should let us have our cake and eat it too. But we have to settle whether the code you see when you choose Edit on a primitive block should be the simplest possible version that gets the point across
or should instead implement all the bells and whistles of the primitive version. But once that's all cleaned up, and I (or you...) get around to Scheme-style hygienic macros with define-syntax, and qw23 finishes the logic programming library, I'll feel like our programming language work is done, and from there on it's all about the GUI. (For example, the ability to lasso a bunch of scripts and drag them all into the palette to delete them all at once.) But that's me, and I'm not speaking for Jens about this.
Syntactic sugar is becoming more of a thing thanks to metaprogramming. (That is, users can add their own.) I'm perfectly happy about that, although as you know Jens is less so.
Thanks for your interest!