How To Make A Living With Embedded Systems

One of the biggest dreams anyone has is to make a living doing what they love. For all hackers, makers, and DIYers with a passion for embedded systems, it may make sense initially to pursue embedded systems design as a possible career, but without so much information on the types of qualifications or steps needed to actually secure a job offer, it may seem daunting to try and break into the field.

YouTuber [iAyan Pahwa] currently works as an embedded software engineer, having been in the field for two years, with prior experience as a hobbyist working with microcontrollers, motors, and programming in the embedded domain. In this video, embedded below, he provides his take on what you need to know to get yourself that first job.

Benefits

Embedded systems jobs tend to pay well and have plenty of opportunities to work on interesting projects. Since consumer electronics exist in all industries, you won’t have any lack of companies looking to hire someone with embedded systems knowledge.

Embedded Hardware

These roles typically deal with schematic layout, embedded board design, power electronics, PCB design, and tasks that rely on the analog domain. You’ll need to be able to use some CAD and EDA software and have experience with analog debugging.

While there are tons of opportunities in embedded hardware, [Pahwa] mostly sticks to talking about breaking into embedded software.

Embedded Software

Most software engineers work in C, working on boot loaders, middleware, or kernel development. Classes to look for include CS50 (for basic C), learning to program device drivers, and systems programming.

In addition, learning to program microcontrollers is essential. Even if you end up going into VLSI or electronic control automation, at least learning to program an Arduino is a very helpful step to digging deeper into the hardware aspects of embedded systems. While Arduino is programmed in a C++ based language, programmers familiar with C shouldn’t have any issue with the syntax.

Learning to program microcontrollers in C or Assembly is necessary to be able to optimize your code. Being able to understand computer architecture and registers increases your knowledge of the internal design of microcontrollers and how they are used in production. Common questions you will encounter include stack pointers, left and right shifting, moving registers, and how to control memory.

Beyond understanding the different processors used in industry, understanding operating systems is also helpful, especially learning the ins and outs of Linux. You’ll probably be asked about system calls, filesystems, and command line during interviews to test your comfort within the Linux environment. Hardware descriptor languages (HDLs) like Verilog or VHDL are also common skills required for embedded software engineers.

Takeaways

[Pahwa] goes a lot more into detail about specific tips for students studying embedded systems looking to ace their interviews for embedded systems roles, as well as for anyone uncertain about whether they’re truly passionate about this industry.

A lot of the skills that embedded systems engineers have are picked up, and chances are if you’re already a hobbyist, you may already be familiar with many of the tools and processes necessary for embedded systems. Skills like debugging Assembly and working with data sheets for unfamiliar microcontrollers can only come with practice and time, so spending time working on projects and familiarizing yourself with existing environments is crucial for success in the field.

Most of all, staying motivated and seeking the expertise of others already in the field is a huge asset. Since the field is so broad, there is no limit to the opportunities you’ll find and the resources available for an aspiring embedded systems engineer.

49 thoughts on “How To Make A Living With Embedded Systems

  1. I often rail about that myself on many Youtube-videos. It seems to be a surprisingly difficult concept for people to grasp that…your speech is easier to listen to the less background-noise there is!

    1. I think you’re in the wrong city. I’m not even an embedded developer, and can think of many places in New England.

      It’s true that most of the consumer router development happens in Taiwan or China. Which is why many repeatedly share same bugs, exploits, etc. There’s a market opportunity to unseat them as they’re generally not interested in fully partnering with manufacturers, if they’re told to implement something and they know it won’t work, they’ll do it since they’ll get paid a second time to fix it.

    2. Embedded hardware engineer here in rural Iowa in an office with 3 other embedded hardware engineers and 3 embedded software engineers.

      Room next to mine contains at least 2 other embedded software guys. There’s more elsewhere in my company too.

      Smallish town of 10-15k, and there’s at least 2 other companies in town (that I know of) that have embedded hardware and software guys.

      Other big companies in Iowa and the Midwest that hire many embedded guys are Rockwell and John Deere.

      Actually, if moved to a new region and I wanted to get a handle on who hires for these type of jobs, I would:
      *email an electronics distributor (arrow, avnet, future, NOT digikey since they don’t have traveling reps to my knowledge)
      *ask who my local rep is
      *ask the local reps if they know of anyone hiring, or what local businesses might be worth asking around.

      These reps usually try and build relationships with people in the companies, and if they are smart, they will be happy to start building that relationship with you before you even start working in the area.

    3. Most embedded positions are taken in U.S. by H1B visas. They will elliminate U.S. candidates for slightest lack on he laundry list of qualifications so they can forward to LCA and H1B process. Almost impossible at some firms.

  2. The embittered cynic in me who has spent 30 years in embedded systems says that pretty much anyone can get a job in embedded systems now. Any interest in doing things well is pointless, as the modern way is ‘just ship it, we can do field upgrades later’. Connectivity really has killed quality :-(

    1. Completely agree with @OldCynic after spending the past few salaried years trawling hundreds of accumulated man years of dross in critical industrial controllers. It seems it doesn’t take much to be able to call yourself an embedded programmer; there’s a real shortage of good ones due to the never ending pressure to produce “smarter” to the detriment of “reliable” things, and it is a constant source of consternation how fundamentally broken code can be dressed up to appear functional.

      On the positive side, the checklist in the article is about right to land a job. The glaring omission is knowing how to prove your spaghetti is correct. That’s a talent that often isn’t highly prized in industry.

      As for me, I’m getting out before someone gets hurt.

  3. No, you don’t get to make good money. I’m a former embedded software engineer with experience in automotive, semiconductors and consumer electronics in Europe and the people doing web development make 50% than me on current market conditions.

    It’s pretty sad when from end kiddies who never went to University make more than you. Being a good embedded developer requires lots of studies and experience debugging the whole system from hardware to software but the demand for such positions is diminishing in the West as most companies are outsourcing this kind of work to Asia since the huge demand for simple web or phone apps will get you more lucrative gigs.

    Maybe you can make good money if you work for a monopoly like Apple or Qualcomm but that’s only for US folk.

    I love embedded development as a hobby but I have to think about buying a house soon and the salaries of this industry aren’t with the hassel.

    1. This! I was a software architect, lead engineer, and team lead for a major semiconductor vendor in the UK. Despite doing pretty well in the field, I still managed to walk into a platform engineering job, paying half as much again, just by marketing the side-skills in build systems and scripting well.

  4. Doing Embedded Systems properly can be difficult, tedious, and relatively low paid. Also, the work often has nothing to do with Arduino if done correctly. Admittedly in the age of $5 SoCs, an understanding of ASM and linker level skills are no longer a requirement.

    That being said, I sometimes end up cleaning up the legal and engineering mess people like the guy in the video leaves behind… usually involves jettisoning the entire team along with their egos.

    @Sharon Lin
    See link for why this kind of STEM initiative themed article often fails, and perhaps you will understand why it is cruel to motivate the naive.

  5. As you say, if you are already an ex-s/w now tinkerer (like me) you will have come across many of the terms he mentions (at incredible speed). What was most useful to me was his recommendations of what you should learn and at what stage, and why that would be important.

    This was very timely in my case as I am gyrating away Arduinos, wanting to know more but unsure of which path to take.

    This was a good find, thank you.

  6. I’ve been in the embedded industry for over 26 years! For me, it was clear to me that I wanted to work with microcontrollers and microprocessors since I was 17. Started out as an avid hobbyist (micros were cost challenged back then!), then worked as an electronic technician, became a custom test engineer (multiple embedded opportunities), worked my way up as an embedded SW engineer (thru SR level), and finally into project management (ugh). Now I’m back to embedded SW as a hobbyist, but occasionally get to dabble at work.

    Embedded SW is quite hardware intensive. Be prepared to be the one who gets to fire up and test the 1st run boards and prototypes (I personally love that part).

    My suggestion to the younger crowd is to get a computer engineering degree (not science nor IT). Take every embedded course offered, and make sure to take as many EE courses as possible. If there are FPGA courses, then take them!!!

    1. Thanks for your post, I am a fresh graduate with bachelor degree in Eletrical and eletronic engineering.

      I have 2 years working experience on project building using raspberry pi with C/Python programming language.
      I also have some basic knowlegde of PLC with S7 300 siemens. I love embedded system.

      I would like to learn SW embedded system.

    2. Also be prepared to write small programs to prove to the hardware folks the signal that is supposed to go high actually goes low. Then you’re told to work with it the way it is. But then the next revision they fix it so you have to change the software again. If you’re lucky you can get something on the hardware that tells you which verion of the hardware you’re running. on.

    3. While I agree with a lot that you say, I notice a lot of ee’s doing software, that simply don’t know how to write descent software. With modern embedded (not the write once and forget about it) software, which tends to be ‘iot’ so much more is needed, rather just blinking the led and your done. Even scaffolding work, such as getting a proper ci setup working should be part of the engineering team, but aot of these youngsters these days don’t know note than writing some (sometimes even descent) C code, and then hit the ide play button, without any idea what’s going on or happening…

      My tip would be, also invest time into other knowledge the just writing code. Scaffolding, automated testing/test driven, build systems, debugging! and a good sense of architecture are just as important to know.

      Finally, Linux is key. Yes theres still lots of real time microcontroller work done, but more often those are controlled via Linux.

  7. 25 years ago I left university with a degree in electrical engineering and almost 20 years experience growing up with electronics, computing etc and had job as an R+D engineer with one of the few places doing embedded in our city.

    My father was a radio amateur that built everything from scratch and he taught at the local uni and I got to play with PDP8s etc when most people only got to submit punch cards. I learned a lot about RF, semi lethal voltages and various tricks and techniques that are still handy today.

    After about two years in the embedded company I left to go work in industrial and doubled my income. Then a few years later migrated to serious industrial electrical and control systems and doubled my income again. Plus still very rewarding design and commissioning type work, just more integration rather than component level.

    I look back and think that I have no regrets, now if I want to do a few things with ESP8266 or 32 I buy them from aliexpress and do it in my spare time as a hobby.

  8. I wish people would stop calling hackers/tinkerers/hobbyists/coders/developers software engineers. Unless they went to school and earned degrees, they are not engineers.

    I have two degrees, in electrical and software engineering, from 36 years ago. I continue my education in both fields, keeping relevant, and don’t want to be grouped with the same people that just sit at their desk one day and start hacking away.

    1. Having built CPUs from discreet components means I also understand computers a bit.

      However, inferring your history from decades ago makes you more “competent” rather than more “entitled” is a fallacious argument. We meet people in our field all the time that cling to academic or union positions like warts on a toad… killing time waiting for retirement.

      I used to get frustrated by idiots embracing self-inflicted ignorance, but eventually I realized the industry known as “Engineering” was always based on parasitism. Senior people have always taken advantage of young gullible sycophants… we currently call it a university “education”.

      Modern software work has gone the way of web designers in the 90’s. It is no longer lucrative… mostly due to a sea of con-artists from backwater dumps, communist policies, and domestic hiring biases targeting the naive.

    2. I beg to differ sir. I started my career in 1976 by building a z80 s100 bus machine. I never set foot in a university. I have been principally involved with designing many products you would know that shipped millions of units. If someone designs and builds successful systems they are by definition engineers.

      1. 100% agree with this. Having a degree doesn’t guarantee you know what you are doing or are any good at it and at the same time not having one doesn’t mean that you have no experience or skill. Sure a higher education can potentially provide those who are motivated with resources to further their skills, but paying for a piece of paper isn’t the only path to that goal. I say this as someone with two degrees in EE but was self taught up through high school as my school barely had any courses related to electronics.

  9. This article sums up perfectly the issues with embedded development: There is no mention of learning testing methods. Embedded SW has been around for decades and still it is not surprising that even functionally critical SW is not unit tested. The old developers say that you can’t unit test embedded code “because of electronics” (note: really it’s “because of lack of interfaces and bad code in general”, but they usually don’t want to hear it) and they try to make sure all the newcomers learn that “fact” the first thing they walk in the lab. This means that most of the time is spent debugging crappy code on the lab bench and hoping the unit will not catch fire this time, because, hey, this is how thing were done in 1991 and that’s how it should be done today!

    So my additional tips are: Learn unit testing, learn good coding practices, learn proper architecture design principles, and don’t listen to the old debug guys. You’ll have to fight against the old culture for sure, but it pays off in better SW and increased quality of life when you can actually spend time on developing the SW than debugging senseless spaghetti mess.

    Also a bonus tip: Stay away from Arduino if you want to learn. With Arduino you can get things working quickly for sure, but it teaches you nothing. Get a cheap STM32 Nucleo board and learn bare metal instead. Try to make your own HAL and figure out how to work with peripherals. Learning curve can be a bit steep, but it’s rewarding.

      1. As Test Engineer, its not that testing isnt important, its just that companies very rarely allow for robust test and validation in their budget and schedules. I am constantly asked by firms to provide a comprehensive ATE for products that already have a scheduled release date.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.