Embedded Software Engineering Overview

By
Athira Varma Jayakuma

Fellow presentation and intro to your career path

Since childhood, my inclination towards science and mathematics has been fueled by my prowess in critical thinking and logical reasoning. Back in 2005, in a small town in ‘Kerala’, a small state in India known for its high literacy rate, my mind was debating with itself around the two opportunities in front of me: a seat for Bachelor’s in the Computer Science Engineering department or another in Electronics and Communications Engineering department. While my love for coding and algorithm development was fighting to get me into Computer Science, my curiosity about semiconductor physics and electronic circuits was pushing me toward Electronics and Communication Engineering. Ultimately, I realized that opting for Electronics and Communication Engineering would keep me close to electronic hardware, but at the same time would help me to remain connected to coding, through courses like Microprocessors, Microcontrollers, and Embedded Systems. With this decision, I, Athira Varma Jayakumar, embarked on a journey toward realizing my dream career in the Electronics and Communications Engineering department.

At Cochin University of Science and Technology, the highly knowledgeable professors helped me build a strong foundation and develop a keen interest in digital electronics and embedded systems. During one of the coursework, I became acquainted with Simulink (a system modeling tool by MathWorks), which was gaining significant popularity and growing to be one of the heavily used tools in several industries. I got really fascinated by the usage of models to build and simulate system functionality like digital systems, modulation techniques and control systems, that led me to choose doing my final Semester project using MATLAB and Simulink.

After graduating bachelors in 2009, when I became one of the lucky ones to be hired into Delphi Automotive Systems, tagged as a super-dream core-company, during campus recruitment, I had no idea that I was going to land up in a field where opportunities for all my passions, coding, modeling and microcontrollers, that I cultivated from college, would coincide. I was lucky enough to be able to join a team where we developed embedded controllers that handled several features of Volvo trucks (Engine Control, Exterior and Interior Lighting, Trailer detection and lighting, Brake Handling etc). While I gained expertise in Embedded C coding, I was totally fascinated by the idea of being able to generate code out of application models in Simulink. To indulge in and learn about the controller software development process starting from requirement analysis, software architecture, detailed design, coding, unit testing, integration testing, System testing, and troubleshooting vehicle issues was very exciting. As I gained expertise in the work, I got promoted to Technical Lead role where I got the privilege to lead the development of controller software for Ford cars and trucks. During the 8 years of my career in Aptiv, I enjoyed every bit and piece of my work in the Automotive Industry.

When I arrived in the USA in 2017 with a heavy heart, due to leaving my passionate job, I was determined to gain more knowledge in my field of interest and earn a higher degree. Clearing GRE and TOEFL exams, I gained a seat for pursuing master's in computer engineering department in Virginia Commonwealth University (VCU). As I wanted to hone my skills in embedded systems, I decided to focus myself on courses that can help me with that goal. Again, my knowledge of Simulink and MATLAB helped me gain a position in a lab at VCU to support research going on in Cyber-physical systems safety and security. Model-based engineering, its capabilities and usage in the nuclear industry was a hot topic of research in the lab. Pursuing master’s in VCU while working as a Research Assistant in the lab helped me heavily as I was able to expose myself to the latest research ongoing in the Embedded Systems and Cyber-Physical Systems field and at the same time foster my research skills.

After a fruitful journey at VCU as Research Assistant and graduating master's program in May 2020, I decided to resume a career in the industry, preferably Automotive industry where I could go back to using my deeper embedded systems knowledge, software and model-based engineering experience for real-life applications. After a long job hunt period and some bitter experiences, in September 2021, I got into a perfect role that was waiting for me at DISTek Integration which is a company focusing on engineering expertise in off-highway industry (which is obviously very close to the On-Highway automotive industry) software solutions. In this role of Senior Software Engineer at DISTek, I use model-based software development to design and test robotics and drive-by-wire controllers for autonomous mining trucks. Even as a fully remote employee, I am able to run real-time tests on the actual controller hardware with the plant model, simulating the vehicle physics and sensors and actuators, in the loop. Every day is exciting for me with lots of problems to solve and creative solutions to work through.

Embedded Software Engineering career options 

Embedded software engineers and modeling engineers play critical roles in advancing technology, innovation, and problem-solving across various industries. Their expertise is instrumental in shaping the modern world. Embedded software engineers and modeling engineers are in high demand as the digital landscape continues to merge with the physical world. This convergence has led to an unprecedented proliferation of devices and systems that rely on embedded software to function efficiently and intelligently. Their skills are sought after across a multitude of industries, like automotive industry, off-highway, consumer electronics, aerospace and defense, medical devices, nuclear power etc. each presenting unique challenges and opportunities. Your expertise in designing applications and developing software that operates seamlessly within constrained environments opens doors to a plethora of career paths. Here, we delve deeper into some of the promising avenues that await your exploration:

  • Embedded Software Engineer
    This role involves developing, testing, and debugging software that runs on embedded systems. You'll work closely with hardware engineers to ensure seamless integration and optimal performance of the software.
  • Model-Based Development Engineer
    Model-based developers use tools like MATLAB/Simulink to design and simulate complex systems using executable models. They create models that represent different aspects of a system's behavior, helping to ensure correctness before actual implementation.
  • Control Systems Engineer
    These professionals are responsible for designing, analyzing, and optimizing control systems that regulate the behavior of dynamic systems. They concentrate on developing control algorithms and model system dynamics,for various applications such as automotive and systems (e.g., engine control, stability control), industrial automation, robotics, and more.
  • Embedded Software Architect
    Architects design the overall software structure of embedded systems. They make high-level decisions on software design patterns, communication protocols, and overall system organization.
  • Embedded Software Verification and Validation Engineer
    These engineers focus on testing and validating embedded software to ensure that it meets quality, reliability, and safety standards.
  • IoT (Internet of Things) Software Engineer
    As an IoT engineer, you'd work on developing software for interconnected devices, managing data communication, security, and remote control of IoT systems.
  • Functional Safety Engineer
    With the growing emphasis on cybersecurity, these engineers focus on securing safety and security of embedded systems against safety vulnerabilities and cyber threats.
  • RTOS (Real-Time Operating System) Developer
    For systems requiring real-time responses, RTOS developers work on adapting and configuring real-time operating systems to meet the timing requirements of the application.
  • Firmware Engineer
    Firmware engineers focus on low-level software that interacts with hardware components directly. They ensure that devices function as intended and handle tasks like boot-up processes, power management, and hardware communication.
  • Systems Engineer
    Systems engineers work on the holistic design and integration of complex embedded systems. They ensure that all components work together smoothly, from hardware to software and even network connectivity.


Main hard skills you use on daily basis in your current job

  • C/C++ Programming Languages
    Proficiency in programming languages relevant to embedded systems is crucial. C and C++ are widely used due to their efficiency, close-to-hardware capabilities, and prevalence in embedded software development. Embedded C knowledge is necessary to write software that needs to work in resource constrained environments with precise real-time control. In industries like automotive and aerospace, where safety is paramount, Embedded C knowledge is crucial for writing reliable and robust code. I learnt C/C++ programming skills through Computer science courses in high school and college. I also practiced programming by solving challenges given in ‘Hackerrank’ and ‘GeeksForGeeks’. There was also a 1 month training on embedded systems provided to new joinees in Delphi Automotive Systems that helped me learn in-depth about the differences between Embedded C and general purpose C.
  • Model-Based Development Tools
    Mastery of model-based development tools such as MATLAB and Simulink is vital. These tools allow you to create and simulate models of systems and algorithms, enabling efficient design, visualization, and testing before actual implementation. They also allow auto generating embedded C/C++ code from the models, to be programmed onto the controller. Model testing allows to find issues well in advance of code generation and implementation leading to reduced time required for addressing potential problems. I learnt MATLAB and Simulink by taking the self-paced On-Ramp courses offered by Mathworks. Working on several modeling exercises and projects during my college laid the groundwork for my modeling expertise. I honed my modeling skills through independent-exploration of the tools, Simulink libraries and Mathwork’s excellent help documentation. I developed advanced modeling, code generation and knowledge of good modeling practices through the project work for VOLVO truck body control module.
  • Embedded Systems Knowledge
    A deep understanding of embedded systems architecture, microcontrollers/microprocessors, memory management, real-time operating systems (RTOS), and hardware-software interaction is essential for designing efficient and reliable embedded software. This foundational knowledge empowers engineers to navigate the intricacies of hardware-software interplay, optimize resource utilization, and create software solutions that meet the stringent demands of the embedded world. Microprocessors, Microcontrollers and Embedded Systems courses during my undergraduate studies helped me to establish a foundational knowledge of embedded systems. Delphi’s embedded systems training and on the job experience working on actual controllers for different features in vehicles were instrumental to build practical expertise in the field. Subsequently, during my graduate studies, I continued to expand my theoretical knowledge by enrolling in courses like Dependable Embedded Systems, Cyber-Physical Systems and Advanced Industrial Automation. To stay current with the latest advancements in embedded systems, I actively engaged in reading research papers and articles related to safety and security improvements within this domain.
  • Software Testing and Debugging
    Embedded systems often operate in critical environments like medical devices, automotive systems, and industrial machinery. Testing ensures that software functions correctly and reliably, preventing potential safety hazards.Strong skills in testing embedded software, including unit testing, integration testing, and debugging, are vital to ensure software quality and functionality. Software testing guarantees the quality of embedded software, helping identify and rectify defects early in the development process. Much of my expertise in software testing was acquired through practical experience testing the actual embedded software that went into controllers for Volvo and Ford vehicles. The Software Testing and Analysis course that I took during my masters helped me gain in-depth knowledge on the different methods of software testing and coverage analysis. During my work as Research Assistant in Virginia Commonwealth University, I also performed research on developing a combinatorial testing approach for safety-critical software using a software testing tool called TESSY.
  • Communication Protocols
    Depending on the application, knowledge of communication protocols like CAN (Controller Area Network), SPI (Serial Peripheral Interface), I2C (Inter-Integrated Circuit), and Ethernet is valuable for data exchange between embedded systems and peripherals. Basic knowledge of CAN, SPI and I2C communication protocols were built during Delphi’s initial training for new joinees. In-depth knowledge on CAN, SPI and I2C were built by writing SPI, I2C and CAN channel configuration software, by testing CAN communication using Vector CANoe software and troubleshooting CAN related testing issues.

Soft skills you use on daily basis in your current job

  • Problem-Solving
    Identifying and resolving issues in embedded systems can be challenging due to the complex interactions between hardware and software. Problem-solving skills are crucial for effective debugging and troubleshooting. With embedded systems, there are always a lot of software testing issues to troubleshooted and device faults to be diagnosed that requires a problem solving mind. Problem solving skills are also needed to work with a variety modeling, software development and testing tools and to resolve errors encountered in them.
  • Critical Thinking
    The ability to think critically enables you to evaluate different approaches, identify potential issues, and make informed decisions about software design and optimization. Critical thinking helps developers analyze and understand the root causes of problems or system malfunctions. This skill is crucial for efficiently addressing issues in complex embedded systems. Developing efficient and effective algorithms and system models requires critical thinking to evaluate different approaches, predict their outcomes, and choose the most suitable solution.
  • Attention to Detail
    Embedded software requires precision. A keen attention to detail helps ensure that every aspect of the code and design is accurate and well-executed. Attention to detail aids in identifying inconsistencies, errors, and mismatches between models and specifications when validating and verifying models against requirements.
  • Teamwork
    Teamwork enables collaboration between hardware engineers and software developers to create integrated and optimized solutions. Embedded software/model-based engineers often work within cross-functional teams that include hardware engineers, testers, and domain experts. Collaborating effectively and valuing diverse perspectives is essential for designing and building a correct system. Collaborating with diverse team members encourages creative thinking and innovation. Teamwork helps distribute the modeling workload and ensures that models remain manageable and coherent.

Your personal path

After graduating master's degree in May 2020 and being one of the unfortunate graduates to pass out without a graduation ceremony (due to COVID), I decided to continue working in the Research lab at VCU as a part-time research assistant. Later, when I started searching for an embedded software job, preferably in automotive industry that helps me apply embedded systems knowledge, and critical thinking skills, there were very less openings in the market due to the COVID situation in the world. My job search was further made hard due to the fact that I needed visa sponsorship, and I was not open to relocating, forcing me to look for fully remote positions. Embedded software engineers usually are expected to be at least in close proximity to the office due to the need to go to the lab and access hardware for system testing. My relocation restriction was not helping me in this regard and additionally, there were very limited embedded software openings in the 50-mile radius from my residence. I had to apply to around 10 companies to get one interview invite. Most of the companies have several rounds of interviews in their recruitment process. The first round is usually a screening call by HR to get to know us in brief, our job and work authorization requirements and for us to learn about the company. This is usually followed by one or two rounds of technical interviews which would involve coding exercises and technical questions in your subject area of expertise (embedded controllers, electronics, software, system architecture). This is mostly followed by a round of interview with the hiring manager, which is usually a resume-based interview, to see if we are a good fit for the company, team, and the company’s culture and core values.

I had several bitter experiences during my job search. One time, due to the relocation restriction I had, a manager at an Embedded Software company asked me to give up the hope of looking for a job opening in Embedded Software field and instead switch to IT Jobs like web application development. After all these years of gaining work experience in embedded software engineering and successfully obtaining a master's degree in computer engineering, it was extremely dejecting to hear that comment. I also had another instance where after clearing five rounds of interview, I was informed that the company expects me to go to the office at least 3 days a week, for the position that was originally advertised as fully remote. After long waits and similar dejecting incidents, at some point, I lost hope that I would end up in my dream position at an embedded software company.  But I did not give up!! I kept applying and attending interviews for months. Eventually after 6 months of job hunting, I got an exciting offer from DISTek Integration which offered me the perfect job I was dreaming for, Embedded Software development using model-based software development. Patience and perseverance finally proved to be fruitful.

What would you tell your younger you regarding building your current career?

Find out what gets your mind going, and then go for it. Not only should your head be present at work, but so should your heart; only then will you enjoy and excel at your profession. If you love to design systems, to write algorithms to get it working correctly, to see a system/device react based on control code you have designed, embedded software engineering  and model-based engineering would be the right platform for you. 

Be patient, keep learning and keep trying, the right job opportunity is waiting for you somewhere. If you are determined to stick on to your passion and put sincere efforts to keep learning from failures, you will definitely succeed at some point. 

Understand that each interview you face is a learning experience for you. Understand that even though 99 jobs rejects you there will be a 100th that is waiting for you.


Final tips and insights

Hoping that all of you reading this article achieve their aspirations in their chosen careers. May your efforts, dedication, and determination lead you to the fulfilling and successful professional journey you envision.

  • Each company’s interview process takes 1.5-2 months in total. Hence, it is always better to continue application process even while another company’s interview process is ongoing. 
  • Ensure to clarify the conditions for work via email and ensure it matches yours, so that you will not end up with surprises at the end of the interview process.

Back to Career Book
Arrow right
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon
OPEN AVENUES
Arrow icon
WORK WITH US!
Arrow icon