In an unfortunate turn of events I was recently fired from my most recent position. While it’s cliche to say this I did learn a ton in the five years I was at that position. While I am scared and worried about my near term future I plan for this post to work through what happened, what I learned, and what is next.
Why Did I Get Fired?
This is the question that will always get asked by friends, family, and future hiring managers. As always the answer is not simple but I will be as simple as possible while owning as much of my own actions as possible: I was not performing up to snuff in the last several years. There are many reasons for this but I will not lean on them because doing so will effectively be excuses. I was able to bring up my level of effort in recent months and that effort was recognized by the company. Even so there were some factors outside of my control that made continued employment untenable in combination with my overall performance.
Yes this answer is vague and no I will not lay blame with the company, any of its employees, or any events that happened. All I can do is take responsibility for my own actions and seek to correct them for the future. From here I will move on and seek to make the next chapter of my career more successful than the last.
Side Note: Please make sure not to burn any bridges as you exit a company no matter the circumstances of that exit. You may find that you still have friends after an exit from a company. Yes I am walking through the stages of grief right now and yes that has involved anger. I have talked through that anger with some close friends whom I trust to keep it in confidence. In talking it through I’ve come to peace with it and feel no need to bear my former employer or anyone that works there any ill will.
What Did I Work On During My Recent Employment
Much of my work at my recent employer involved updating, maintaining, and testing a C++ code base run on computers with limited processing power. I also worked on a test bench for these computers that involved a Matlab simulation, a National Instruments PXI chassis, and the I/O hardware to shuttle data between the target computers and the simulation (including the hardware in the physical product which we chose to emulate).
I wrote and debugged lots of what we considered “drivers”. I put that in quotes because these were really interfaces between the APIs for the I/O hardware and the C++ emulators that were running in the Matlab simulation. These APIs are provided by the companies that provided the I/O hardware (e.g. National Instruments, Keysight, and Astronics-Ballard). Our drivers weren’t drivers from the perspective that they interacted directly with the hardware. They did, however, need to have detailed knowledge of the I/O hardware, how to read information from them, and how to write information to them.
Additionally I was able to work on both the code running on the target computers and the simulation. These were similar in the sense that both followed a time bound control loop of 3 major steps:
- Read information from each piece of input hardware
- Decide what to do with that information based on current state
- Write information out to each piece of output hardware
Given that these three steps were time bound (i.e. they had to be done within a specified number of milliseconds) I had to keep an eye on the performance of the code. The biggest area that performance was an issue was in talking to the hardware and not in any particularly interesting algorithm. As an example: How long does it take to write a serial message out? If your answer was “when the system call returns” that is not completely correct. In most operating systems the call to write a serial message to hardware will return immediately after the OS has the bytes in it’s memory and NOT when the bytes have actually been written to the wire (let alone received by the listener). As such I spent a lot of time trying to figure out how to read or write bytes/statuses from hardware as quickly as possible.
Lastly I got to dip my toe into the deep waters of electrical engineering. There were many cases where the software on both sides of the test bench (simulation and target) were correct but there was an issue with the wiring. One of my favorites was an issue with a discrete (on/off) signal coming from the target computer through a National Instruments PXIe-6528 discrete card. The circuit on the target was a ground (off) / open (on) circuit. This meant that there were 0 volts when off was indicated and not very much voltage when on was indicated (so long as it was not 0 / ground). The NI card, however, requires there to be 3.2V+ to consider a signal as on. I got a chance to work with our electrical engineers to solve things like this that were simple to them but interesting to me as a software guy. (The answer was to use a resistor to a voltage source that was greater than 3.2V)
What Is Next?
There are three main things I am focusing on in the near term. While they’re vague and obvious I will still state them out loud:
- Searching for work based on my recently used skills
- Working on projects that will expand my skills as a software engineer
- Focusing on my family and home.
What Kind Of Work Am I Looking For Presently?
BLUF – Presently I’m looking for work in the embedded software space because it matches my recent experience.
My most recent experience is in the embedded software space in the defense sector. That is obviously the experience that will be most relevant experience to my next employer. That being said I have described my last job as “really cool toys; morally ambiguous mission.” Why morally ambiguous? While we didn’t directly make weapons the product went to the military. Additionally the tech would have been created whether I like it or not, and I’d rather have been on the team developing it than eventually be the target of its use. Because of this I would prefer to work in a sector that isn’t the defense sector going forward but wouldn’t say no to a company that reaches out.
What Kind Of Projects / Learning Will I Be Doing?
My initial plan to a two pronged approach:
- Play with embedded programming by working on the Bitaxe ESP-Miner project along with the Bitaxe Gamma that I recently picked up. As part of this I’ll also be playing with Umbrel and hosting my own mining pool for solo mining.
- Play with Large Language Models and Agents at home using Ollama and OpenWebUI.
Will the knowledge I gain from these be marketable? I hope so
The Bitaxe Gamma uses an ESP32-S3 microcontroller. It is my hope that helping with the ESP-Miner project will help me to learn how this particular microcontroller works and practice making code more performant. With regard to LLMs – the use of AI and agentic programming has been exploding. While I don’t completely trust LLMs to generate good code I know that I will get left behind if I don’t learn more.
Conclusion
I’m now in the “Great In Between” in my career. I am scared, nervous, and excited. I am still walking through the stages of grief over the loss of the job, the security that comes with it, and the friendships made along the way. I have contacted friends whom I know work at places where I might be able to get work and I’ve started sending out resumes. If you’ve got a position that you think I would be interested in please feel free to reach out to me in any of the following ways:
