Many people are complaining that when it comes to algorithms and complicated business logic - doing it with OutSystems is worse than with C# or Java, and this is hard to disagree with - visual interface and simplified Basic-like language don't fit very well when it comes to "real programming".
Yes we have extensions, but because of the way you have to deal with them - this option seem to be used only when you have no choice, when you simply can't do what you need in service studio.
So I have this idea that, in my opinion, can be the next breakthrough for Outsystems and eliminate almost all critical arguments left against it.
If there was possibility to add C#/Java code directly in the service studio. In the "Logic" area we could have a separate section for this where you can chose to create "C# action" or "Java action" (I suppose the choice should be limited according to the platform configuration). This will open traditional code editor (in the same studio). The input-output parameters will be mapped to language types like it happens with extensions, plus there will be special objects used to access server functionality. So basically this would be the same as the extensions (only that hopefully system objects would have simpler and cleaner interface than it is now), but being embedded in service studio - this will give completely different, much lighter experince. If you need to create some algorithmic action - you just create that type of action and type in the code as quickly as you would do in OOP language.
I also imagine that such action could also allow embedding classes, so that actual "action" would be one special method of a special class, but you would be able to add as many classes as you want beside (probably in the same screen, and probably with a limitation on number of lines - for this feature to not become a monster). You won't be able to change main method signature off course, since it is defined by action's interface. And there could also be possibility to create unit tests - by right-clicking the action, selecting "create unit test(s)", which will add another special action, with OOP language to use again. And there can be an option to turn on (or better turned on by default) to run those unit tests on deployment!
This all seems realistic, as Outsystems creates C#/Java code result in any case, and such actions will be needed to simply put as separate .cs/.java files in the same namespace and built together with everything else. You will then need extensions only to integrate with database, or when there is huge amount of code behind.