Code generation can be used to generate boilerplate code from models but requires manual coding to add behavior. Protected regions allow regenerating while preserving manual changes but not all tools support it. The "generation gap" pattern separates generated structure code from manual behavior code, but behavior is still written manually. Model-driven development with a general-purpose modeling language (GPL) like UML and full code generation from models could solve this by making models the central artifacts that are precise, complete and executable.