On Leaving Software Engineering Jobs
In my previous post I talked about software engineering interviews. Today I'm going to let you know why I left my job. Hopefully this is going to be an interesting read since I don't really come across many posts that talk about changing jobs.
I'm a software engineer by profession. I've been building things since I was very young and received my computer science degree from Stevens Tech after moving to US in my early twenties. As my first real job after college I joined Chartbeat's engineering team. It was the best decision I made at that time even though I had couple other larger offers. Here's a few reasons why it was the best decision.
- The company was pretty small, close to 12 people, when I joined. This means you get to work on many different things and there's not much internal politics.
- I spent close to 3 and a half years with Chartbeat. I started as a junior engineer moved into senior role and into infrastructure after that.
- I was given a chance to launch a few products from scratch, and work on large scale infrastructure.
- The company was close to 100 people when I left.
After 3 years I left. I left because I was feeling lonely (I was the only one working on moving Chartbeat to a new log centric infrastructure), and I was still young I thought I should explore some other areas. However, I don't have any regrets. Moving fast, seeing company grow, seeing people leave, building new things and shipping them to customers I consider indispensable. I believe that my stay at Chartbeat provided me with a very solid foundation for all my future endeavors.
I joined Astro. The company was very young and I was engineer #2. The product was a smart light bulb with hardware and software being built in-house. It was very exciting time for me. I never worked with hardware before, everything was very different from what I've seen before:
- Slow, VERY slow, development process. Firmware code is very low level and you must read hardware specs and look for answers in very odd places (Chinese forums) with google translate.
- Debugging is difficult. First, the tools are really old and very basic. Sometimes you can't have logging due to hardware limitations. There's no operating system and if you have stack overflow, you won't get a crash but start executing some random memory after return from a call.
- It can take months, literally months to move forward, but it is definitely rewarding once you get there.
These are the highlights of the technical side when working at an early stage hardware company. It can be exciting, but it can also be brutal when you're hitting your head against a wall for a long time.
I never worked at a company this young before. I joined as an employee #4. Obviously at that stage there were no processes in place, very flat organization. At moments it felt as if there's no plan, no strategy, but all our energy was concentrated towards R&D. At one point we were working on couple different products while at the same time trying to choose the right hardware based on arbitrary constraints. We definitely had productive outcomes, after all we launched our product, only one year later after the company was launched. It's good to see things come to life. After a few months working on our wireless mesh technology I started to realize that this is not what I want to do. I like low level things, there's something satisfying about writing software in C, but not firmware. I started thinking that what I'm doing right now is almost a step backwards. I was learning new things, but at the same time I was placing myself into a little box and missing out on all new web technology out there. On top of that, I was starting to feel down for placing myself in that little box, for not being able to ship anything fast, for not being able to get feedback from people using our product. I started doing more web work at Astro, building out some APIs and doing some work on our eCommerce site. It was better, but after a while there's was not much for me to do. I basically had two options left: move back and do firmware or spend my time doing almost nothing. So, I left. Joining Astro was not a bad decision, it was an experience. I think the biggest takeaway for me is not to rush when choosing jobs.
I think you can see some pattern here---some sort of lack of intrinsic drive or misalignment of my goals. Leaving your job is interesting. It brings so many emotions. You feel unease, because you have no idea what's going to happen next, but you also feel this great sense of freedom. You get time to slow down and reflect on things.