A method for generating an executable declarative device program comprising: receiving (302, 402) a first element (128, 220) representing a first hardware device in a network at a design surface (114, 202) of a computing device user interface; obtaining device capabilities of the first hardware device corresponding to the first element; providing the device capabilities of the first hardware device as a list of outputs (134, 224) associated with the first element at the design surface; receiving (304, 404) a second element (130, 222) representing a second hardware device in the network at the design surface; obtaining device capabilities of the second hardware device corresponding to the second element; providing the device capabilities of the second hardware device as a list of outputs (134, 224) associated with the second element at the design surface; receiving a selection of an output associated with the first element; receiving a selection of an output associated with the second element; automatically generating (308, 410) a parameterized expression (132, 236) that binds the first output associated with the first element as input to the second element, to trigger the output associated with the second element; generating a device program using the automatically generated parametrized expression by: identifying a first device protocol associated with the first hardware device; identifying a second device protocol associated with the second hardware device, wherein the second device protocol is different from the first device protocol; generate a runtime entity that provides interpretation between the first device protocol and the second device protocol; and compiling the automatically generated parametrized expression with the generated runtime entity; and deploying the generated device program to the first hardware device for runtime execution to execute the automatically generated parametrized expression binding the first hardware device and the second hardware device. receiving (302, 402) a first element (128, 220) representing a first hardware device in a network at a design surface (114, 202) of a computing device user interface; obtaining device capabilities of the first hardware device corresponding to the first element; providing the device capabilities of the first hardware device as a list of outputs (134, 224) associated with the first element at the design surface; receiving (304, 404) a second element (130, 222) representing a second hardware device in the network at the design surface; obtaining device capabilities of the second hardware device corresponding to the second element; providing the device capabilities of the second hardware device as a list of outputs (134, 224) associated with the second element at the design surface; receiving a selection of an output associated with the first element; receiving a selection of an output associated with the second element; automatically generating (308, 410) a parameterized expression (132, 236) that binds the first output associated with the first element as input to the second element, to trigger the output associated with the second element; generating a device program using the automatically generated parametrized expression by: identifying a first device protocol associated with the first hardware device; identifying a second device protocol associated with the second hardware device, wherein the second device protocol is different from the first device protocol; generate a runtime entity that provides interpretation between the first device protocol and the second device protocol; and compiling the automatically generated parametrized expression with the generated runtime entity; and identifying a first device protocol associated with the first hardware device; identifying a second device protocol associated with the second hardware device, wherein the second device protocol is different from the first device protocol; generate a runtime entity that provides interpretation between the first device protocol and the second device protocol; and compiling the automatically generated parametrized expression with the generated runtime entity; and deploying the generated device program to the first hardware device for runtime execution to execute the automatically generated parametrized expression binding the first hardware device and the second hardware device.