From a self-taught programmer to software engineering manager — My journey (Part I/II)
We have all felt like an imposter at some point in our lives. Whether it was our time public speaking, or when a passionate, young stranger reached out to LinkedIn asking for your advice. You start asking yourself:
Am I really qualified to be doing this? How long will it take for someone to realize that I have no idea what I am doing?
As a self-taught programmer turned software engineering manager in a large company, I face that problem daily. I mean, it was only five years ago when I was learning how to code in an underground coffee shop near a train station between my restaurant shifts where I was cleaning tables and washing dishes.
I wrote about the transition into software development in this two-part article here. Today, I want to share the mindset I set for myself AFTER entering the industry and share the few successes and many, many failures I’ve had along the way to stand out and grow within this competitive field. I will also briefly address some mistakes and regrets, and my plan forward.
If you are currently in the early stages of your career where you feel the drive to stand out but the pressure to fit in, I hope my experience will be helpful to you.
Chapters
- How to swim, underwater edition
- Captain of (a sinking) ship
- 🎶 Saaan Fraaanciscoo 🎶
- Hey Siri, what is grit?
- “Please, sir, may I have some more projects to lead?”
- “I have a very specific set of skills. Skills that make me a great manager for people like you.”
- Retrospective and planning for the next phase
1. How to swim, underwater edition
After transitioning from chemical engineering to software, my first job was at a 4-people tech agency. There, I was hired as an office manager/social media manager/web designer. Of course, none of these roles were what I wanted, but I decided to take the job anyway. I knew that, given the nature and size of the company, I will be working closely with the developers.
The first month I had to do my assigned tasks. I designed logos, managed the Instagram accounts of the company and our clients, and arrived early at the office to turn on the lights. I tried to finish my work as quickly as possible.
When I had spare time, I would chat up with the Full-Stack developers. I would ask them why they build things a certain way. From the logic around database structure, picking frontend frameworks, and writing responsive CSS, those guys showed me a lot of things that would’ve taken me longer to learn on my own.
They also showed me things that I realize I can do better than them. I began to ask them if I could write basic CSS when they went on lunch (or smoke) breaks. Within a couple of months, I was better than all of them in styling web pages. I then proposed we hire a new designer and I moved into the dev team.
I maintained my eager attitude throughout my career there. I started getting slightly better pay, but a lot more responsibility. I became the frontend lead, and then started learning Ruby on Rails, the backend framework that we use for most projects, and began to start leading projects from both ends. By the end of my 12 months at this first company, I had transformed myself from someone who just kinda knew some HTML and Javascript to a full-stack developer with experience designing, developing, and leading multiple real projects. The company was small, and I felt I had reached my ceiling here. I decided to leave after a year here.
2. Captain of (a sinking) ship
This section covers the next job after I left my job at the agency. By then, I had design experience. Full-stack web development experience. Leadership and client-facing communication experience. Nothing could stop me. Or so I thought.
Through my year at the web agency, I had developed an ownership mentality and with it, some naive pride and dilutional confidence that I could build and scale a software platform on my own.
I had an option to join a well-funded startup, where I would play a very small role as a WordPress programmer. Or I could join a friend of a friend’s bootstrapped company as the lead developer and take full responsibility for the application as the founders tried to raise funds and chase early customers.
Guess which option I chose? You are right, the second.
The first company was Littlefleets, fleet management software. I owned the design, development of the frontend and backend infrastructure of the web app, and hired and oversaw a mobile developer for the fleet drivers’ mobile apps. We took over previous developers’ code, dealt with complex engineering logic around fleet management, distribution, geo-tracking, and optimizing routes — in short, it was a large undertaking.
I spent the first few months optimistic about this exciting, high-risk high-reward opportunity. I worked hard to play the part of the product/technology lead. I designed, built features quickly, participated in the sales calls, helped onboard companies to test our products, woke up at 5 AM to help fix bugs, and tried to learn on the job.
Unfortunately, it was overwhelming. The app was buggy, something I, at the time, largely blamed the previous legacy codebase that we acquired. The funds were drying out, with customers leaving us. We had to shut down.
Still, the founder had faith in me, and I in him. He was an aspiring entrepreneur, and I an aspiring developer, optimistically working towards our dreams the best way we knew how.
He found a new investor for a new business, Mewzy — a real-estate bidding platform for pre-sale homes in Canada and asked if I would come on board doing the same role. The business has enough funds for a year and a few prospective investors.
I decided to take it on, thinking it would be different, but it was another year of the same. A year of building prototypes, MVPs, joining sales meetings, pivoting, redesigning, rebuilding, and repeat. We realized that the real estate industry was slow to adopt new changes, particularly those that were disruptive to many stakeholders in the industry. With real-time bidding infrastructure, security around large money transfers, and no track record of building these products, we had little chance of success. After 11 months of trying our hardest, we decided to shut down the company and go our separate ways.
I was 3 years into my software development career, with a trail of failed companies behind me. While I knew that I was not the only person responsible for their outcomes, I had to accept the reality about my true ability and come to a realization that I need to learn from others better than me. I had to join a bigger company.
The story continues in part II, publishing soon! If you like my writing and want to learn more, please follow or reach out to me to connect!