Software / Systems / Leadership

Daniel Rossler

Embedded Systems. Wireless Connectivity. Engineering Leadership.

Software Engineering Leader Embedded Systems Wireless Connectivity Applied AI

Read profile

Two decades of embedded and wireless engineering.

I’m a software engineering leader with more than two decades of experience developing and shipping embedded systems, wireless connectivity platforms, and consumer products that must operate reliably at scale. At Apple, I manage a software team focused on wireless connectivity and embedded platform integration. Before joining Apple, I spent twelve years at Motorola, where I worked as a principal engineer across mobile and embedded technologies while also leading a team.

My experience includes Consumer Devices, Cellular, Wi‑Fi and Bluetooth factory bring-up, board integration, test and certification readiness, official software releases, low-level driver and platform integration, bootloader flows, factory support, and AP-to-radio/baseband communication. I remain hands-on with complex technical challenges, including crash and stability forensics, memory corruption involving heaps, pools, and stacks, JTAG/Trace32 scripting, ETM trace analysis, and security-fix handling and propagation. Throughout my career, I have collaborated closely with hardware, RF, testing, and factory teams to bring reliable products from initial board bring-up through production.

What I’m exploring now.

  • Ambient computing
  • Multimodal assistants
  • Edge AI
  • Robotics
  • Embedded electronics
  • Wireless systems
  • Music technology

Principles learned in practice

The 10 Commandments of Embedded

  1. 01

    Shall Initialize Memory

    Most likely you will be saving time debugging intermittent issues due to memory garbage.

  2. 02

    Shall Check for Errors

    If you are calling a function and it returns an error, do not trust the values present on the parameter passed in.

  3. 03

    Shall Check for NULL Pointers

    If you don't know where the pointer is coming from, make sure you assert for NULL pointer.

  4. 04

    Shall Release Memory

    Prevent Memory Leakage. Make sure that you release all memory after using it. After releasing, make sure you set all pointer references of that memory to NULL. Commandment #3 will do the rest.

  5. 05

    Shall Not Use Big Local Variables

    Whenever a large array or structure is declared within a function (without static modifier) it will end up on your stack, and eventually might cause an overflow. Allocate the memory instead.

  6. 06

    Shall Not Overflow

    Be careful when copying memory. Use strncpy and snprintf (passing the buffer length as parameter). Make sure buffer length is not a negative number (that will turn out to be a really big number).

  7. 07

    Shall Not Perform Big Tasks from within Interruptions

    ISRs are supposed to be quick. Do not sleep, run big loops or block in any circumstance an interruption handler.

  8. 08

    Shall Not Cause Misalignment

    Whenever turning an address from an array into a pointer or a larger type, make sure its content will be properly aligned.

  9. 09

    Shall Not Use Recursion

    Recursion might lead to Stack Overflow. Usually embedded systems have a really short stack.

  10. 10

    Shall Avoid Global Variables

    Use Global Variables only when necessary. It will take memory space even though when it is not in use. Try to allocate or using locally, but never go against Commandment #5.