greatest doesn't depend on anything beyond ANSI C or do any allocation, keeps boilerplate to a minimum, and allows for rapid iteration during development.
Having a bootloader in place is crucial for any embedded product. Not tackling it early will risk getting your product to market, and its long term health.
In order to easily distribute a complicated piece of software, we created a virtual machine appliance. We developed an automated and modular build process.