Being able to learn a new software language, framework, pattern, or platform has been one of the cornerstones of my career. I’m generally pretty quick to pick something new up, and I get distracted easily so I end up doing this a lot.

I bring this up because at the beginning of this year I moved into iOS development, a whole new ecosystem1 where I didn’t know the language (Swift), framework (UIKit), or any of the tooling (Xcode), and in the last week I reached one of my favorite milestones of learning a new skill: thinking with portals.

In Valve’s 2007 game Portal, you have to solve a series of puzzle’s using a unique “Portal” gun that allows you to arbitrarily place portals on the walls, and you can jump through them. While simple on the surface, it’s deceptively complicated, and at first you sort of fumble your way through the mechanic to make it through the challenges.

Eventually you will suddenly realize you’re brain automatically looks at a puzzle and starts calculating portal placements and jump trajectories, and the game’s robot narrator praises you with the phrase “Now you’re thinking with portals”.

This same phenomenon occurs every time I learn a new software development skill. I’m not talking about the part where you know you can fumble your way through any problem with enough time, though that is exciting as well. This is the part where your brain automatically thinks within the framework or pattern you’re using in the background, and instead you’re free to focus on the actual design or engineering problem at hand.

This over the last week, I’ve stopped spending my time figuring out how to do something on my iOS projects, but instead figuring out the best design that I should do. It’s a subtle difference, but it’s deeply satisfying to finally cross that threshold.

The beginning of learning a new skill is always daunting, but I know that, if I stick with it, eventually I’ll reach the Thinking With Portals moment and that’s one of the greatest feelings in the world.

  1. I actually have done a bit of mobile development back in the day with Windows Phone 😂, but for the most part I’ve been up and down the web stack for my career.