One of the main goal of ThingML is to be able to run with a minimal overhead on devices with low resources in terms of CPU and memory (micro-controllers, embedded devices, battery operated devices...).
Typically the optimization required in these contexts conflict with the idea of separating concerns in independent components running in parallel. Most of the exiting model-based approach introduce a large overhead in terms of both response time and memory usage compared to hand coded applications. This is often a show stopper for model-based software engineering in these areas. Models are often use in early design phases but dropped in the implementation phases which tend to use a trial and error approach at the code level. The process is costly, produces systems which are rather expensive to maintain but it allow meeting the required level of performances.
The MDE community has often been answering this issue by pointing at the low prices of memory and CPU and assuming that the overhead introduced by generated code would at some point be acceptable. This is not a correct assumption and is probably one of the main reason for the rather low adoption of model based software engineering techniques in implementation phases.