In the current state, you can build Web Apps in 5 days alone but you can't build simple IoT solution in 1 week.
The current state doing web development is easy not only because there is many content/tutorial for that but also many great tooling that exists in the ecosystem (thanks to many Open Source project). Let's list what we have now in Web Dev ecosystem.
Now in Front-End or Mobile development we have:
- some framework that decent and have mature enough based on Component Design Pattern
- hot module/reload. Change small portion of code and the result will be shown in less than seconds regardless how big/complex your codebase.
- Static, dynamic, or duck typing language. Choose what suits you well
- development can be framework and language agnostic thanks to WebComponent & WebAssembly
- thousand library and hundred UI Components ready to use in many frameworks
- rich debugging tools, you can even do time travel debugging, event there is built in the debugger in any popular browser now
- rise of micro front-end architecture
and Back End development we have:
- some backend framework has hot reload alike. (it's called Hot Code Swap)
- many backend framework/lib became database agnostic
- thanks to microservice pattern and docker, backend code can be written in any language
- many tools for documenting, building, and inspecting API and data. (Swagger, GraphiQL, etc)
- Design Pattern agnostic. (some depends on the language that you use)
- currently, I can't find back-end framework/lib that can do time travel debugging (something like redux or mobx)
while in Embedded development (especially µC) we have:
- language agnostic but depend on specific devices. (microphyton, nodejs johnyfive, STM32F4DISC, etc)
- device agnostic but depend on language and abstraction layer. (EC++, Arduino)
- nearly write once run anywhere can only be achieved using Arduino
- low productivity because no live/hot reload thing. (exception if using Zephyr OS)
- mostly concurrent programming can only be achieved if using RTOS by sacrificing significant memory
However, IoT development is not only about hardware. It's combination of those three that makes IoT solution valuable. So, how to glue them together and avoid silos mistake? <sub>The answer that I'm thinking now is via Statecharts 🤔</sub>