1. A method for downgrading firmware in a controller, comprising: receiving a request, by the controller, to downgrade the firmware from a current version to an older version; for a feature implemented in the current version and not implemented in the older version: determining if the feature is currently in-use by the controller; if the feature is currently in-use by the controller: providing a warning of feature incompatibility between the current version and the older version to a user; and abandoning the request; if the feature is not currently in-use by the controller: checking other features implemented in the current version and not implemented in the older version and repeating determining, providing, abandoning, and checking; and downgrading the firmware, if all of the features implemented in the current version and not implemented in the older version are not currently in-use by the controller, wherein downgrading the firmware comprises executing, by the controller, the older version of firmware.