My Path from Finance Intern to Senior Software Engineer at Microsoft

How I transitioned into a technical engineering role with zero coding knowledge
life
finance
career
Author

Mike Tokic

Published

September 4, 2024

I write code every day as a senior software engineer at Microsoft. But I didn’t use to. When I came to Microsoft as an intern in summer 2015, I was just your ordinary finance intern. The only code I knew was excel formulas. During the summer I realized the power of data+code and made it my mission to figure it out.

I have previously written about my journey in Microsoft’s Finance Rotation Program (FRP). That details the first half of my career and how I got my first engineering job, but not what I do today as a senior software engineer. Most of my time is spent on building and operating machine learning systems used by others across the finance organization. It’s been a hard journey, but also a fun one. If you’re like me and are interested in making the switch, here are some pieces of advice that might help you. Like all advice, take it with a grain of salt. Advice is like getting last years winning lottery numbers. They might have worked for that person in the past, but it may not work for you. Anyways I hope you find it helpful.

Focus on Slope over Intercept

When I came back as a full time employee after my internship, I kept seeing these new signs everywhere talking about something called a “growth mindset”. During my internship these words were never mentioned. Now they are taped to every blank wall on campus. What’s going on? Microsoft’s CEO, Satya Nadella, was in the midst of working on a culture shift at the company. Trying to go from employees that were “know it alls” to a more improved “learn it all”. This new attitude was perfect for me because I knew jack squat about coding, and I wanted to learn.

If you want to pivot your career into software engineering, there are two ways to go about it. The first and most common is to go to school and get a degree. The second is to figure it out on your own, aka the learn it yourself path. Both paths have their pros and cons. Going to school is the more direct path, but self-learning may have a different kind of benefit. If you’ve only ever learned how to code on your own, then you are setting yourself up for lifelong learning. As opposed to someone who went to school, who is used to classroom learning. The learning never stops once you start coding for money, so having the skill to learn proactively and not on a predetermined schedule is a super power.

Having technical knowledge from school puts you ahead of someone else who is just starting to learn on their own. But if that self-taught person is learning at a pace higher than the school smart person, eventually their trajectories will cross and the self-taught coder will surpass them. Think of it like a graph. Where school knowledge gives you a high Y intercept, a good starting point, but the rate of your learning every day after is the slope. The most important thing is to focus on the slope over the intercept.

The learning never stops. In fact it only get’s harder. Not the learning itself (maybe it does), but taking the time to learn. Build the habit now, stay curious. The biggest trap is getting into the mindset of “I’ll start learning new things again once current xyz thing cools down”. That thing might be a new job, getting married, having a kid. As your responsibilities grow in life, your free time shrinks in proportion. Make sure learning stays a priority.

A good way to learn on your own while having an existing job is to make the learning part of your job. If you want to learn more about AI technology, go tell your boss that you want to work on a project with AI that could help the team. I’m 100% positive you’re boss will say yes. Getting free engineering help is usually not turned down by anyone. We all need better software in our lives. Once your boss expects you to deliver on something, with a deadline, then that’s the healthy pressure needed to go out and learn the damn thing. In addition to signing up for project work you can also do the same for traditional learning through books, courses, and certifications. For me back in the day I told my boss I was going to finish a Microsoft sponsored course in data science by xyz date. Each month I would provide her updates on my progress. Finishing that course become one of my deliverables in my job. That allowed me to spend some time each day at work on learning, without feeling guilty because it was actually part of my job to learn. Make it part of your job and things become a lot easier. Compared to squeezing in a few minutes before or after work without telling anyone. If your upcoming performance review is tied to reading a few books and building a new thing for your team, you will have all the motivation you need to get it done.

If you can’t find any good projects on your team, look elsewhere. You could go help another team at your company that might need some coding help, or a local charity or organization you care about. Towards the end of my time in the FRP, I stumbled across a team at Microsoft called the Airband Initiative. This team is focused on growing internet access to communities all around the world. They needed some help crunching data from policy documents and with zero experience I was able to come join the team as a temporary resource to help them with this analytics project. I was free labor so they didn’t have anything to lose, but I had everything to gain. I got good experience with natural language processing and working with unstructured data. Eventually the project grew. I ended up presenting the whole thing to Microsoft’s chief data scientist and even got to showcase the work at the 2019 Internet Governance Forum in Berlin. Where all my expenses were paid. All because I spoke up and offered to help. The Airband team got help, I learned a ton, and become an international data traveler. Talk about a win-win-win.

Maybe you’re still in school, but want to pick up some coding skills. Go see if any student organizations need help analyzing data or updating their website. Maybe the Football team could use another hand at analyzing what plays work best on third down, or if the basketball team needs to play a smaller lineup to score more points. The coffee shop in your business school might need some help on seeing what kind of sales promotions bring in the most revenue. The opportunities are endless. And because you’re offering your services for free they will not turn you down.

Last thing I’ll say about learning is that I’ve seen too many people get a masters in data analytics, AI, computer science, etc. only to get a job post-school that does none of that. It’s a shame. Don’t settle. Don’t give up. Keep learning.

Real Coders Ship

Real coders don’t just take classes and read books. They ship, meaning they build stuff and put it out into the universe. My learning only started when I put the books down and started pulling real data and training real machine learning models. Projects that actually helped my team in my current job, even if that job wasn’t software engineering. Shipping 10 projects is more impressive than acing 10 classes.

Some people create a “portfolio” of projects and have it live on their GitHub. I don’t think that’s a good idea. Real work is messy, and is the best indicator of future performance to an employer. Projects in a portfolio allow you to control all the variables, which is not how the real world works.

You can have public GitHub repos that show as samples of your work. But they should not be sample projects. They should either be pieces of work that you applied in your real job made open source and accessible to others. Or side projects where you wanted to build something cool to help you in your personal life or another organization. For example if you built your own website for your wedding, and had the code in a GitHub repo for hiring managers to see your coding chops. Or you built a bot that constantly analyzes your fantasy football league’s waiver wire and automatically picks up the best players for you based on AI powered analysis. There are endless ideas. Get building. Go out and ship.

AI is Your Friend

In this post ChatGPT era, all technical work becomes 100x easier to learn. You don’t need school, or even books. You can, for free, start using a large language model (LLM) to learn coding concepts and even have it ask you technical questions to test your learning.

ChatGPT and other tools like GitHub Copilot now become your coding buddy, always there to help you when you get stuck or don’t know how to do something. Any new kid on the coding block can now get up to speed on languages like Python quickly because they have a personal AI tutor available 24/7. Go pay for a few of these AI services, and use them every day.

Use Your Competitive Advantage

Some people feel like coming into software engineering from a nontechnical discipline is a major handicap. I actually think it’s a superpower. If you come from a business background you actually have something other engineers do not. Business domain knowledge combined with technical knowledge is a deadly combination. You now understand both sides of the coin. You know how to make decisions about the business (through the lens of marketing, finance, sales) and can now go and build things that improve how the business serves customers.

For me having a finance background first, then learning coding second was a good combination. It created a lot of skills that are now invaluable. For example the skill of communicating things in simple terms. When I was building machine learning solutions for finance users, no one cared about the sophistication about my model or how much feature engineering I applied to the data. They just wanted to know how the solution ran at a high level and if it actually worked by showing improvements in a certain metric. For example, creating a more accurate revenue forecast for a Microsoft product. I’ve seen traditional data scientists/engineers try to explain their work to regular people and it can sometimes be like nails on a chalkboard. It’s painful to watch because they cannot explain themselves in plain english. And if the end user can’t understand how something works, then they won’t trust it, which means they won’t use it.

Usually being 80% competent at two skills can create more impact than being 99% competent in a single skill. Focus on combining skills. If you can build and you can sell, you will be unstoppable.

Baby Steps, Not One Giant Leap

Don’t go and build the next social networking app on your first coding project. Crawl, walk, then run with new technology. Here is a good workflow for learning progression.

  1. Crawl: Get some code working on your computer.
  2. Walk: Move that code up into the cloud and have it run on a different machine that’s not yours.
  3. Run: Build a production ready system with proper CI/CD, unit testing, version control, etc.

Those steps can take years, and that’s ok. You might even get a software engineering job with just knowledge of #1. But as you progress you will eventually figure out #2 and #3. The same can be said for the actual job progression.

  1. Business Partner: You are the business person who works with the engineers.
  2. Program Manager: Now you are the person in the middle between the business partner and the software engineer. This is an engineering role, and in some companies like Microsoft your compensation will be the same as a software engineer.
  3. Software Engineer: You now build things, in collaboration with the program manager who tells you what the business partner needs.

Going from business partner, to program manager, to software engineer is a lot easier than skipping directly to software engineer. When I graduated the FRP my first role title was “IT Solution Manager”. I still don’t know what that means. Overall I was basically a program manager that coded on the side when no one was looking. Eventually that side coding turned into real solutions I pitched to my manager and got into production. Which eventually led me to working solely on building things. Then I finally got the title of software engineer. It didn’t happen overnight, but it was possible.

Getting Promoted

Ok so maybe you now have a sweet engineering gig. Now what? How do you grow your career? Let’s talk about getting promoted.

You get promoted when what you build has impact. Not just for building cool or complex things. Most impact with technology can boil down to a few things.

  1. Time savings
  2. Money savings
  3. Increasing revenue

You work needs to boil down to numbers. Not what you shipped but what happened after you shipped it. Most impact is money and time. Either saving it or getting more of it. What gets measured gets managed. What gets measured gets promoted. Training a deep learning model is cool but shipping a simple linear regression in half the time might get you promoted twice as fast. Everyone is in sales. Once you build it, you have to sell it. If you can build and sell, you will be unstoppable. Ask your boss what you need to do this year to get promoted, then do those things. Ruthlessly prioritize and execute. Ignore everything else.

Final Thoughts

Learning to code is important. Life is all about leverage. The best types of leverage in the world are permissionless leverage. They have no marginal costs of replication. These are things like code and content (podcasts, blog posts, etc.). Why do you think I wrote this? Because this kind of content has leverage, meaning it can scale. It’s easier to write this once then to give the same advice to 100 people who ask for it. Save your keystrokes folks. That’s why this personal blog exists. Hopefully it’s helpful to you my dear reader 😊.

Pretty soon everyone will be a manager, just not managing people. You will manage AI people, or bots/agents, who will do your work for you. Knowing how technology works will help you grow your leverage, whether you’re a software engineer or not. Most things 50 years from now will boil down to AI doing the thinking plus executing digital tasks, and robots executing physical tasks. What do you think those run on? You guessed it, code. Software will eat the entire world, it’s just a matter of time. I’d rather be giving our robot overlords instructions then taking instructions from them. Everyone will have a choice. Take the red pill. Go all the way down the rabbit hole. Learn some code.

Last thing I’ll say is that it takes guts to move to a new field. People who only do what their boss tells them to do will never have the guts to do it. It takes a certain amount of high agency to do it. If you’re considering or are already in the process of doing it, I salute you. The world needs more people like you. Good luck!