Last 12 months I shifted my career from C++/Linux/Embedded development to Python/Cloud/Web engineering. I really encourage all of you to try different technologies and different areas of engineering … It broke stagnation, learned new ideas, and saw the same problems solved with different approaches and tools.
What I have learned from these 12 months?
Lesson 1. Start with scalability and security in mind.
Scalability starts with 2 instances … always start your architecture with 2 instances, just because adding a second instance is much more difficult than adding a 10th. Also, you cannot add security as the last element of a system.
Lesson 2. The wider and decomposed architecture will give you more flexibility than small thigh and monolith implementation.
Designing your software as a set of microservices instead of a monolith implementation that is calling everything internally. Rather delegate tasks to services via async queues, instead running internal threads.
Lesson 3. Balance state caching vs state recalculation.
This one is tricky, web apps are really easy when they are only presenting data fetched from the database, but if data is a result of a calculation that really has the same parameters, there is no sense in cache results in the database. When calculations take a lot of time, and parameters rarely change, caching may be a good idea.
Lesson 4. Containerized development and deployment give you stability in both.
How many times have you encountered a problem where something is working for everyone, but not for one dev that is using a different OS? When you use containers for development, you can ensure that everyone is using the same environment as it is used for deployment. On deployment, you can run your application with all the environments regardless of dependencies for other counterparts, plus it makes your ability easily move between host environments, which leads to easier reuse.
Is that all even suitable for embedded development? … well not for all applications obviously, not for bare metal, not for microdevices. But I think that devices that today are running Linux are really legit examples…
What is the cost of this?
Definitely, this will not make our products lightweight.