it's also important to consider what an engine actually is which is just a collection of methods and systems that drives programs. if implemented correctly, adding functionality or updating existing modules could be easy and efficient. however, if you have modules that CO depends on other moduals to much, you start running into problems where adding capabilities or making adjustments to existing ones can be difficult. if updating 1 module breaks 3 in the pipeline, it's not an efficient engine.