Here's the reasons:
Always DRY(don’t repeat yourself), even for assets. They may need to be in different directories, but you can easily link a directory to another using symbolic link.(more information)
Determine your design resolution before you make the game, and scale everything based on it. This also applies to textures. If you scale your textures to the right size then you don’t need to scale the display objects individually. (more information)
The editor is highly flexible to change. Everything in the properties panel is customizable by changing settings/editor_template.json. Anyways make sure to backup your custom template file before an upgrade. Since it will override your custom template if the default template is changed.
Parsing strings is considerably slow, you should avoid parsing the same JSON layout multiple times by caching the parsed layouts in the memory. UIBuilder.create() can accept both parsed (as3 object) and unparsed (JSON string) data. It’s highly recommended pass in parsed data to increate performance, espicially when you are creating many instances of them (e.g. ListItemRenderer)
There are many ways to create dynamic contents, feel free the choose the way work best for you
Passing in a binder object with UIBuilder.create can make your life easier and display object naming more consistent. This way you can remove all the boilerplate code like _exitButton = _sprite.getChildByName(“_exitButton”) as Button;