This is an interesting discussion about software design. One thought mentioned are the tradeoffs with constraints. One example is functional programming with immutable data. Not being able to mutate state at times makes some things more difficult, but functional programming eliminates a whole host of other problems that pay off in the long term. The Elm architecture is another example. It requires a little more boilerplate at times, but the architecture solves a multitude of problems Javascript programmers face.
In Simple IoT, we also embrace constraints:
- treat configuration and state data the same for purposes of storage and synchronization.
- represent this data using simple types (Nodes and Points).
- organize this data in a graph.
- all data flows through a message bus.
- run the same application in the cloud and at the edge.
automatically sync common data between instances.
Are these the right constraints? It’s still too early to know for sure, but so far they seem to be working out well.