A system for controlling a vehicle, comprising: a first computing device physically positioned in the vehicle; a second computing device positioned away from the vehicle; and an elastic computing module communicatively coupled to the first computing device and the second computing device, the elastic computing module being configured to: determine computing and memory capacities of the first computing device and the second computing device; determine software demands of a software application for controlling a component of the vehicle; and dynamically allocate processing of the software application to the first computing device and/or the second computing device based on the computing and memory capacities of the first and second computing devices and the software demands of the software application, wherein the software application comprises a plurality of software applications; wherein the elastic computing module is configured to allocate processing of each software application according to the partitions of the plurality of software applications, wherein the first domain encompasses a first safety category and the second domain encompasses a second safety category, wherein the elastic computing module is further configured to deallocate the first or second computing device previously allocated to the software application, execute one or more on-device tests on said computing device, determine whether said computing device has detectable issues and, if no issues are determined, re-allocate the computing device to the software application. a first computing device physically positioned in the vehicle; a second computing device positioned away from the vehicle; and an elastic computing module communicatively coupled to the first computing device and the second computing device, the elastic computing module being configured to: determine computing and memory capacities of the first computing device and the second computing device; determine software demands of a software application for controlling a component of the vehicle; and dynamically allocate processing of the software application to the first computing device and/or the second computing device based on the computing and memory capacities of the first and second computing devices and the software demands of the software application, determine computing and memory capacities of the first computing device and the second computing device; determine software demands of a software application for controlling a component of the vehicle; and dynamically allocate processing of the software application to the first computing device and/or the second computing device based on the computing and memory capacities of the first and second computing devices and the software demands of the software application, wherein the software application comprises a plurality of software applications; wherein the elastic computing module is configured to allocate processing of each software application according to the partitions of the plurality of software applications, wherein the first domain encompasses a first safety category and the second domain encompasses a second safety category, wherein the elastic computing module is further configured to deallocate the first or second computing device previously allocated to the software application, execute one or more on-device tests on said computing device, determine whether said computing device has detectable issues and, if no issues are determined, re-allocate the computing device to the software application.