Designing an embedded system to be responsive, expandable, and bug-free goes beyond the code. Coding is a very minute part of what our firmware engineers do. If your first instinct on a project is to start coding, let us help you succeed in a different way by taking the right steps.
UNDERSTAND THE PRODUCT & CUSTOMER REQUIREMENTS
We take a deep dive into understanding goals for the product, requirements for the customer as well as the end user. Some topics include: minimum CPU/RAM requirements; Battery size vs. expected lifetime; Connectivity; Peripherals; Existing drivers; possible cases of misuse by the target user group.
FLOWCHARTS & WHITEBOARDS
We make use of a variety of tools to visualize and cross-check every design. A key part is to identify product states and define state transitions. Once all the state machines are finalized, we begin writing our first lines of production code.
Coding languages (C, C++, Python, etc.) are merely tools to achieve our previously defined vision. We have multiple internal code reviews during this stage to ensure the vision is being executed correctly.
TEST, ITERATE, DEBUG, REPEAT
We employ a rigorous feedback loop: making tweaks to our existing code based on customer and user feedback.