* we had to build in many polymorphic methods in the pvm classes so that we can inject special behavior in the engine. implementation of lazy initialization hooks in the base class is really unreadable and unmaintainable
* one other situation now arises where the pvm uses a classloader. in the engine we want to make the classloader configurable. but in the pvm, we can't access the process engine configuration.
* variables in the pvm are stored in a Map<String, Object>. then in the engine we provided a VariableMap implements Map<String, Object> that translates all the values into persistable VariableInstance. Because the PVM uses the map api, we cannot introduce backpointers from VariableInstance to execution easily or do other engine specific stuff with variables.
* we now have figured out a new strategy for dealing with different environments. if we extract the interfaces of the model that the interpretation algorithm needs, then we can build different domain models and still have one engine to interprete those different models. then we can build a plain pojo model, a dedicated mybatis persistence model, a cloud model etc.
those are the ones that I recall from the top of my head