When I first taught myself to code, I noticed a gap. Even though I’d been teaching myself to code for five years, I didn’t have the skills necessary to reach the next level. I was technical… but not technical enough.

It wasn’t just me who noticed this skill gap either. After years working to become a Product Manager at Google, I finally had the opportunity to interview for the role. However, after passing five internal interviews, I was told by the hiring manager that I would never pass the technical ladder transfer interviews. The job was given to someone else.

After all my hard work, I felt defeated. My insecurity– that I wasn’t technical enough– was staring at me in the face. Despite all the hours I’d spent building mobile apps and learning how to develop in Java, Javascript, and Python, I wasn’t skilled enough to snag my dream job.

I wanted to be a better software engineer and product manager, so I got a (second) bachelor’s degree, this time in Computer Science. Because I’d been in the job market before this degree, I gained unique insight into how Computer Science is taught, as well as how those lessons directly translate into our roles as engineers.

Now that I have a Computer Science degree, have put in the hours as a technical product management executive, and have founded my own tool for developers, I understand what was preventing me from exceling. Although I’m happy about where I’ve landed, this knowledge shouldn’t be locked in a Computer Science degree.

Today, I’m sharing how you can learn to code smarter so that you can become a senior software engineer quickly. Even if you have a ways to go, this knowledge will help you become better than you were yesterday.

Why become a senior software engineer?

First off, what’s so great about becoming a senior software engineer? Why go through the trouble? In my experience, senior software engineers are trusted to solve harder problems and handle more complexity. Although this can be challenging, it also gives you the opportunity to build something that’s rewarding and impactful. It gives you a seat at the table.

Not only that, but being a senior software engineer gives you the chance to mentor and provide insights to others. Often, it may lead to managing your own group. And, let’s not forget about the senior software engineer salary. On average, senior software engineers make 92% more than junior ones, according to PayScale.

For me, becoming a senior leader changed the trajectory of my career. While I was completing my degree, I landed a senior role at eBay. Not only did I get the role I wanted, but I was also able to skip the junior level. In doing so, I instantly tripled my salary. In that first year, I took seven separate products from ideation to launch, giving me enough experience to get into even higher level roles.

How to become a senior software engineer quickly

If you want to advance in your engineering career, you shouldn’t have to go get a second degree. That’s a big (and expensive) commitment that requires years of your time. Becoming a senior software engineer quickly requires you to read, understand, and have a big picture understanding of programming languages.

How can you ensure you have an in-depth understanding of code? You’ll need to read a lot of code, get a lot of code reviews, and give a lot of code reviews. Spending time with code and gaining feedback from others will help you gain the depth of knowledge you need to move forward.

But giving and receiving code reviews isn’t enough to put you on the right track. Ultimately, you need to gain the ability to build large mental models. This all boils down to loading up more complex systems in your head.

Engineering requires us to hold abstract systems and concepts in our heads via a skill called spatial reasoning. Spatial reasoning is the ability to “generate, retain, retrieve, and transform well-structured visual images” (Lohman 1996). It’s what we do when we visualize shapes in our “mind’s eye.”

In engineering, we use spatial reasoning to create a mental picture or a mental model of how our systems should look. We hold it in our heads. You follow a function call from one file to another. You imagine how data at runtime flows through that picture you created. You transform that picture by flipping it and manipulating it daily.

To get to senior engineer, you need to hold larger and larger systems in your head. You need to add more and more to your mental model. You need to build up a database of things you have seen before.

This is what takes so much time, and it’s what you need to conquer to go from junior to senior engineer.

A few tips for building these models

Turns out, I have terrible spatial reasoning skills. This challenge is so visceral to me that I’ve built an entire company around it. CodeSee’s mission is to help developers and development teams master and maintain their understanding of large scale codebases.

Codesee.io helps dev teams all speak the same language. It takes these large scale systems that engineers have traditionally held in their heads, and it creates a visual map along with all of the data that PMs can understand and that shows how all the pieces fit together. This map shows everything from the line of code that gets run to the higher level system architecture.

Here are a few recommended tips for building mental models, all of which are built into the CodeSee platform.

  1. Write things down. Some say that good writing is good thinking, and I agree. Being able to write down what’s going on in your code will clarify your thoughts, help you see the big picture, and ensure that you’re able to communicate your ideas to others. Make sure you write things down in a scalable way that you can search from, build onto, and is available when you need it.
  2. Practice spatial reasoning skills. Spatial reasoning does not come naturally to me, but I’ve practiced these skills to become an expert. Every time I write a bit of code, I work to build a mental model in my head.
  3. Draw a picture instead of holding something in your head. Drawing a simple picture or diagram can help you plot out your ideas and situate them contextually. Similar to writing things down, drawing a picture helps you solidify your thoughts and share them with others.
  4. Reason about the data. Every system is made up of code and data. If you are only looking at the code, you’re missing half of the picture. Ask yourself: Where is the data stored? What does it look like? Where does the data start, go and end up? How is the data transformed along the way?
  5. Read a lot of code. This is what most people advise, but it’s really important. I put reading of code into my calendar, and I go to Stack Overflow and other open source codebases. The best advice I’ve heard here was from a language teacher: Read it once, ignoring the things you don’t know. Read it again, noting the things you don’t know. Then, look up everything you don’t know. Finally, read it again.

No matter your background or experience, it’s possible to go from a junior to senior software engineer– just as long as you have a solid, big picture understanding of programming languages.