From MBA to software developmentNov 2023
In April 2015, I graduated as an MBA from one of India's leading business schools. I landed a well-paying job with excellent 'growth prospects', and I did so by drafting MBA responses to standard interview questions such as 'where do you see yourself 5 years from now'. I found myself on a career path that most Indians can only dream of.
Fast-forward 5 years. In 2021, I switched career to software development with no background in IT. During my MBA, I had learnt of the sunk-cost fallacy. At this point, it seemed like my entire degree and career up until this point was sunk-cost. I was excited about the change, but at times, I felt like I was gambling away all my gains and starting from scratch. I feared that I would regret this decision. Also, those 5-year career visions, about which I had waxed eloquent in my interviews, seemed like blatant lies.
However, the last two years (from 2021 to 2023) have been my happiest from a job perspective. I look forward to my Monday mornings and I haven't felt any regret (yet) for having taken the road less taken. Further, I had realized that some of my fears were unfounded. I wasn't starting over, and I continue to use a bunch of skills I have built from my previous careers.
Occasionally, people reach out to me to ask about how I made the transition. That is my motivation for writing this post.
In Feb 2017, I moved to Germany. I joined the technology consulting practice in Deloitte Germany and was looking for a project. While I had some basic German skills, my German wasn't good enough for me to work effectively as a strategy consultant. I spent about 4 months on the bench, unable to secure a new project.
I then overheard somebody in the office talking about a new Robotics Process Automation (RPA) practice within the firm. I was familiar with RPA, which is fancy jargon for writing simple UI based automation scripts to automate routine tasks that white-collar workers perform. Think of an excel macro on steroids - one that can read excel sheets, but also send emails or browse the web.
The RPA hype train was just beginning in 2017 and the technology was in high demand. The RPA practice was desperate to hire consultants - all that they needed was an openness to getting one's fingers dirty with some programming. Given that the only thing I was doing with my fingers was twiddling them (especially the thumbs), I jumped at the opportunity. I received about a month's training on the job and learnt how to automate simple processes by using an RPA software - UiPath. This was my first foray into computer programming.
I worked as an RPA programmer for a total of 4 years. Along the way, I noticed how I preferred programming to Powerpoint. I loved the excitement of writing scripts and seeing them come alive to automate routine tasks. I learnt to love the frustration of my programs not working as I expected. I loved debugging too - I felt like a detective who retraced his steps to detect the root cause of a bug. At some point, I realized that I couldn't go back to having my workdays filled with meetings where we nitpicked PowerPoints for punctuation and formatting.
In 2020, I became a UiPath MVP. I was one among 62 MVPs for the year, from a community of more than 500,000 users. I also switched employers to a small IT company that was setting up its own RPA practice. This sounded like an exciting opportunity - I was on the top of the RPA field and I now had the opportunity to establish a new practice from ground up. With renewed zeal, I set upon this task.
But all of my lofty dreams were to come crashing down. Merely 6 weeks after I started, my employer decided to shut down the fledgling RPA practice. This was a sound decision from a business perspective, but it was a devastating blow to my own plans. Nevertheless, I decided to make the best of it. I had already realized that RPA and low-code automation had served as a great entry for me into the world of software development. However, I found them to now be a limitation - I wrote about this here. The next step in my evolution was to embrace a career in good old software development, without the 'low-code' baggage. I offered to stay on at my employer, by switching to QA and test automation. I then joined one of the software development teams within the firm.
That switch was 2 years ago. I now feel well established in my position as a software developer with a focus on test automation. In this time, I was able to catalyse my team towards making our automated test pipeline 18x faster (from 3 hours to 10 min), set up two new test frameworks and speak about our work at a conference on two occasions. I wouldn't have been able to pull any of this off without my background in MBA and management consulting.
Insights on my journey
Reflecting on my experience, it becomes clear that none of this was planned. I moved organically from a career in strategy consulting to software development in several small steps. I am incredibly lucky to have had several turning points that helped me steer this transition. Nevertheless, when these opportunities came along, I had primed myself to exploit them.
But it is worth pointing out that my move to Germany made this transition a lot easier. My life in Germany was a fresh start, where my prestigious MBA degree didn't mean anything. I was also liberated from the 'peer-pressure' of keeping up with my Indian batchmates, or from confirming to expectations that Indian society imposed on me. Most importantly, German work culture gave me plenty of slack to work on side-projects and upskill myself. When new opportunities did come along, I was ready to grab them.
When I started my career as a software engineer, I had grossly underestimated the value of my MBA and consulting background. When I entered my team, I setup 1-on-1 meetings with various members to get an idea of the big picture. Almost instantly, I was able to recognize pain-points and bottlenecks. I then led efforts towards addressing a bottleneck - mainly by recruiting my colleagues to help me. I would then observe how they solved the problem and learn rapidly. I would start all over with the next bottleneck. All of this coordination stuff is second nature to an MBA. But these skills are rare (and sorely lacking) in software development teams. An MBA who joins the right development team can turn into a formidable force multiplier.
But having presented the advantages, here are a couple of caveats. Several people are attracted to a career in software development because they enjoy programming. It is important to draw a distinction here. Programming is a creative activity with lots of freedom. A hobbyist who creates a musical fountain in her garden is a programmer. Software engineering, on the other hand, is no hobby. It is a serious discipline with rules and standards. Software engineering is also a social activity. Developers read 10x more code written by other developers than code that they write themselves. A day in the life of a software developer is very different from that of a hobby programmer. Before you embark on a career in software development, make sure you understand this difference.
Finally, such a career transition is bound to be fraught with insecurity. There are times when I have struggled with a problem for hours, only to see my more experienced colleagues solve it in a jiffy. The side-projects that I am so proud of shipping will seem like the scribbles of a toddler to seasoned developers. There are days when I question whether I will ever stop feeling like an imposter in this profession. Part of this journey is to take such moments in your stride.
First and foremost, think of why you want to transition to a career in software development. If you are dissatisfied with your current job, or want to pursue software development for better pay, better work-life balance or some other extrinsic benefit, I would warn you against making the transition. Making this career transition is hard work and involves getting through the Dip. The motivation for pursuing it needs to be intrinsic. You must be willing to do it for its own sake. Would you be willing to go through this transition even if you knew that it would fail? To put this motivation to the litmus test, set aside some time to work on programming projects on the side. These projects could be as simple as doing exercises while reading a programming textbook and committing them to a git repository. Or coding a simple game (tic-tac-toe is a popular choice). See if you stick to these projects and are motivated to pursue them despite your current schedule. I see this as being the bare minimum for making the transition.
Approach this transition from a position of security, while taking a long-term view of your career. Part of what made this transition so much easier for me was that I undertook it at a point where I was secure as an individual. I had stepped away from the corporate world by choice. I had carefully examined where my MBA career was leading and had decided that it wasn't for me. I didn't feel the need to prove anything to anybody. This automatically made failure less frightful. I also took a long-term view. I still have several decades of my career left. If this transition succeeded, I would have that much time to master my software development chops. If I failed in a year, it wouldn't matter much in the decades that followed. Taking a long-term view of my career also helped make the transition organic. I moved from strategy consulting to low code scripting to QA to automated testing. All these changes happened over several years, much like the evolution of an organism.
Seek out intersections between your current role and programming. If you find yourself enjoying programming, see how you can combine it from within your current role. The easiest means to do this is to automate routine tasks that you or your team perform. Given that we live in the era of generative AI, writing such a script has never been easier. You can directly describe a task in human language and have it translated into a piece of code that you can play with and learn from. In several cases, finding and thriving in such an intersection is just the career pivot you may need, as opposed to a complete career switch. In any case, most programming jobs are not going to fit your profile. Therefore, reach out to your network and seek out situations where your intersection is in demand. Going through this transition would also mean carving out your own role.
Approach the transition from a position of strength. When you think about this career transition, it is natural to approach it from a position of weakness. It is easy to mull over how most software developers are better than you, and how you don't stand a chance in holding your own in their presence. It is easy to fixate on the key skills that you lack and sink into despondency. Initially, this is what I had feared, but this fear turned out to be unfounded. True - there are things my colleagues can do that I cannot, but the opposite is also true. And while making this career transition, it is more helpful to double down on the latter. Given your background, write down where you have an edge over the average developer. Direct your efforts towards honing that edge, during your networking, interview preparations and while creating your professional brand. To sum it up, approach the transition from a position of strength. What you are going to bring to a software development team is likely to be much more than a fresher in the same job. Your strength as an MBA lies in cultivating your brand and telling that story well enough to land a job on good terms.
Make the switch from within the same company. I made this role transition from within the same company - from being an RPA developer to a regular software developer. It is easier to make this shift within the same company because you already have a high degree of trust and social capital within that company. However, given that most professionals don't have this possibility, this isn't a deal breaker.
Non-negotiable skillsThere are a key set of basic skills a software developer needs in order to be employable. These skills include:
- Fluency in at least 1 programming language
- Working with git / version control software
- Ability to pass a standard coding challenge in your chosen domain
- Repositories of coding projects pursued
- Fundamentals of computer science: data structures, algorithms and operating systems
- Database - writing basic SQL queries
- Software development methodologies - Agile, Scrum
- Automated testing
- Fundamentals of REST APIs - HTTP protocol
- IDEs - familiarity with at least one modern IDE like Visual Studio Code
- Build tools - Knowledge of build tools such as Maven, Gradle or npm
I wish you adventure and success on your transition. If you have any fears or want to brainstorm decisions along your journey, feel free to reach out.