Junior Engineers focus on code while senior engineers care about building systems, this is a good read
Junior engineers don’t know how to do anything useful. They may be great at theoretical things or writing programs based on their schooling, and they may even have some contributions to open source under their belts, but they have no idea how to actually engineer a product. This is perfectly OK! We all started here!
One big problem I’ve seen with more senior engineers is they have forgotten how useless they themselves were when first starting out. New college graduates don’t know how to do ANYTHING, even the really smart ones. One of the keys to being a good senior engineer is being able to take all your engineering know-how and then teaching it to the junior engineers. This is what truly makes a senior engineer, being able to impart knowledge to less skilled engineers.
Lots of times this just involves having a junior engineer watch senior engineers do their job, especially when interacting with others. Then, once they’ve been shown once or twice, throw them in the deep end and make them take control of something, put them in charge of a small but important task or project. Be there, ready to help even when they don’t ask, as they are going to make mistakes (because again, they don’t know anything!) and offer good advice. Also, don’t be afraid to overrule the junior engineer, sometimes junior engineers are much too confident when they’re doing something very wrong, a senior engineer needs to be able to see this happening and step in to correct things. A junior engineer who gets offended by this, instead of seeing it as a learning opportunity, either is not having things explained clearly to them or has much too big an ego and is unlikely to last long in engineering.
Good thoughts – you’ve shared some key attributes here for success – humility, generosity, etc. I got an excellent start early in my career because I worked with some top-notch engineers who were very willing to share.
Being a life-long learner is also important. Those who don’t do this typically move into management or become stuck in outdated technologies.
I like to do mentoring and I also ask them to mentor others inturn. I also do screencasts. Which people can watch me code or debug a problem (this was way before twitch and youtube live became a thing LOL), I also maintain a living FAQ that common issues can be documented and how someone solved it.
The real key to solving system problems is to be able to put yourself into other people’s shoes. What things are others which you need to work with optimizing for?
Often, in embedded systems, you have to work with mechanical engineers, electrical engineers, project managers, product safety engineers, various types of compliance teams, manufacturing, service personnel, spare parts teams, etc. As a software or firmware person, you can’t just change how your code works with disregard for all these other people you work with. A senior engineer will understand how their change might impact many other people’s tasks and at the very least be able to justify it to those other people as to why it’s the right change.