Achieving Excellence Through Abstraction

For the past eight or nine months, I’ve been spending my weekends in a local coffee shop learning the ins and outs of coding. Object oriented programming, functional programming, unit testing, various frameworks, database management and more. Self teaching is no easy task, but it provides flexibility and a sense of accomplishment that taking classes often can’t provide.

While a lot of theory behind programming is very specific to the field of computer science, there are certain theories that go much deeper than that specific field. The one I found most interesting was that of abstractions.

 

Abstracting Away ‘The How’

In the coding world, abstractions help make things easier.

Does your code need to run through a long list of names and modify them somehow? In native JavaScript, the code to do that usually looks something like this:

for (var i = 0; i < namesList.length; i++) {
    //do whatever
}

Abstractions allow you to spend less time on how to do something (note how nitty gritty that code above looks), and allows you to simply specify what you want to do, rather than focusing so much on how to get it done.

jQuery (a very popular JavaScript library) helps you do this by abstracting away the messy details of the code above. If you want to go through each value on a list, and run some code on it, you simply write:

$.each(namesList, function(){
    //do whatever
});

You simply tell jQuery that you want to do something to each name in the list (intuitively written as $.each). The first code example requires you to specify additional variables, calculate the length of the list as an indicator to stop the loop, and increment the iterator. jQuery allows you to stop worrying about the logistics, and focus on telling your code to simply do something to each element.

This is a very basic example of a concept that saves substantial amounts of coding time. However, computer programming is not the only place I noticed this concept in play.

 

This Idea Applies Everywhere (Seriously)

As I pondered this idea of abstracting away complexity (i.e. simply specifying what you want done, rather than exactly how it needs to be done), I realized it applies to more than just code.

I thought back to the takeout food I ate earlier that night. I’m sure there were mind-bogglingly complicated logistics that went into growing the food on a farm, transporting the food across the country (while keeping it fresh, of course), and then preparing it to my exact specifications.

Yet, I had NO idea how those logistics happened. The specifics of how the food was created and made available to me were abstracted away. I simply specified what I wanted (pad thai), and the logistics were done for me, unbeknownst to me.

Eventually, I realized that this also applies to achievement. We often pay people (personal trainers, for example) to abstract away the messy how-to for us. We simply show up to the gym, and let the personal trainer do the planning and managing of the workout. You just tell the personal trainer what you want to achieve, and he/she manages the how.

The personal development system I developed also abstracts away complexity behind goal tracking. I simply tell it what I did in very general terms, and it manages all of the calculations to tell me how I’ve been doing based on an achievement model I’ve worked out for myself.

 

Abstractions Sometimes Break

Eventually though, the abstraction fails to properly manage the underlying logistics, and you’re forced to investigate what’s going on underneath.

For example, let’s say, hypothetically, jQuery is not well suited for a particular data type, and the $.each() code from earlier in the post suddenly generates an error in my script.

If I had been relying on that $.each() code for years, and suddenly it stops working, I wouldn’t have the slightest clue as to how to begin troubleshooting, since I never bothered to learn the underlying logistics of how $.each() handles all of the messy details for me.

The abstraction ‘leaked’, and the lower-level code bubbled up to my attention. And since I wasn’t ready to handle the lower-level code, my ability to make progress on my project screeched to a halt until further notice. I’d either need to learn the lower-level code, or seek out another abstraction (i.e. another JavaScript library) that can handle my code correctly.

This idea of ‘leaky abstractions’ was proposed by Joel Spolsky, a well known programmer, in a post called The Law of Leaky Abstractions. Joel writes:

The law of leaky abstractions means that whenever somebody comes up with a wizzy new code-generation tool that is supposed to make us all ever-so-efficient, you hear a lot of people saying “learn how to do it manually first, then use the wizzy tool to save time.” Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting. So the abstractions save us time working, but they don’t save us time learning.

And all this means that paradoxically, even as we have higher and higher level programming tools with better and better abstractions, becoming a proficient programmer is getting harder and harder.

 

Leaky Abstractions Are Also Everywhere

Since abstractions are everywhere, I’d venture to say that leaky abstractions are everywhere as well. Therefore, I’d argue that Joel’s quote above extends to achievement and behavior design.

What happens when the takeout food you eat is causing you to get sick and overweight? You need to investigate how it’s prepared (does it contain allergens, low quality ingredients, lots of added sugar?), or go eat somewhere else.

And with every innovation in food processing technology, it gets harder and harder to tell if that processed food is still good for us. (Do added antioxidants count as ‘healthy’? Is palm oil healthier than canola oil? And so on.)

What happens when you’ve been following your personal trainer’s advice to a tee, yet see no results? It forces you to either dive into the specifics of the nutrition and exercise plan you’re on to diagnose the issue, or move on to another personal trainer and hope that their abstraction (i.e. their managing of the how) is a more effective one.

What happens when the gamification system you’re using to motivate yourself suddenly stops working for a particular goal? You’d either have to each dive into the psychology behind the gamified system, or move on to another system in the hopes that their abstraction of motivation is more effective. (This particular example has happened to me numerous times, which is why I decided to learn to gamify my own goals.)

The conclusion is as follows: Abstractions lessen your day-to-day workload, but not your learning requirements.

In other words, abstractions are prone to leaking, so you’ll still need familiarity with the underlying logistics, to a certain extent, to be prepared for when they do break. Otherwise, each time an abstraction leaks, you’ll be faced with a challenge you can’t handle. And challenges you can’t handle can quickly bring you to a screeching halt.

For a high achiever like you, you shouldn’t tolerate constant impasses like this. Every screeching halt makes it exponentially harder to get back on the bandwagon (especially for your toughest goals). And constantly jumping around from solution to solution isn’t viable either.

 

Embrace Abstractions… But Only After You Learn

The message here is clear: embrace abstractions, but only after you’ve learned the fundamentals of the system you’re abstracting.

  • Learn the basics of how food is prepared and processed before grabbing anything that looks good off of the shelf.
  • Learn the basics of human motivation before jumping from app to app, product to product, that claims to help you achieve your goals.
  • Learn the fundamentals of online advertising before you spend a lot of money to pay an agency to manage your advertising for you.

Let’s be real: you can’t learn the fundamentals of everything. But with the almighty Google search, you can learn the fundamentals of something important to you within a matter of hours. So pick the three things that are most important to you, and learn those fundamentals.

When shit hits the fan, you’ll be ready. And by being the individual who can sidestep the roadblocks and handle leaky abstractions, you’ll be the one who goes harder, better, faster, stronger than everyone else.

Gamifying the Job Search @ GSummit 2013

 

As many of you know, one of the most popular blog posts I’ve written on this site discusses how I used gamification principles to help me get a job at Google.

This blog post quickly spread to Hacker News, Business Insider, and gave me another opportunity to speak about gamification at GSummit!

(Note: None of my other blog posts haven’t been remotely close to this level of success. This was definitely a black swan event!)

Check out the video above if you’d be interested in seeing the talk, which discusses the gamified framework I used to prepare for my interview.

Would love to hear what you think!

Get Rejected. Get Rejected Again. Repeat

“A rejection is nothing more than a necessary step in the pursuit of success.”

-Bo Bennett

Learning to handle rejection (and fail gracefully) is one of the most valuable skills for succeeding in almost every endeavor in life. Why? Because the only thing worse than a half-assed attempt at success is not even trying at all. And someone who cannot tolerate rejection will likely give up before he even tries.

I’m not the only one to recognize the importance of embracing rejection. Jason Shen started Rejection Therapy as a means to push his limits and step outside of his comfort zone. The more you step out of your comfort zone, the thinking goes, the better you will be in uncomfortable situations that really matter (think job interview, first date, approaching an influential individual, and so on).

The more I pay attention to this topic as plays out in everyday life, the more obvious it becomes that there is a significant correlation between your ability to handle rejection and your ability to get what you want in life.

 

My New Approach to Rejection

I’ve written about embracing rejection and failure before, but I never really lived true to it. Like many, I feel the sting of rejection quite strongly, and a particularly harsh rejection can impact my mood for weeks. So in typical Jon format, I’ve decided to start tracking rejections (on post-it notes, of course), and rewarding myself for reaching my rejection goal. Ultimately, I want to gamify the receipt of rejections so that I welcome them, rather than deplore them.

A few examples:

  • If I put my all into applying for a spot on a project at work, and am turned down, that counts as a rejection.
  • If I go on a date, and I’m interested in a second date and she isn’t – that’s a rejection.
  • If I put myself out on a limb, and am turned down in any way that leaves an emotional sting, +1 rejection.

The way I see it, if I receive a particularly brutal rejection, perfect! I took a calculated risk that gave me an opportunity to move a step forward in life. Although it didn’t work out this time, it still brought me one step closer to reaching my rejection goal.

 

Adding In Some Gamification (Just For Fun)

As I started paying more attention to rejection, and how consistently I had been avoiding it to my own detriment, I started gamifying certain elements of it, to see if it would allow me to better handle rejection.

Gamifying Rejection - Part 2

If you want to see how the system came into being, I recently guest-posted on Jason Shen’s blog, describing the system.

So has the gamification and tracking helped turn me into a fearless rejection machine? So far, the answer is a resounding “sort of.” Like most gamification efforts, it doesn’t completely change behavior. It simply guides in the right direction. So, while this system hasn’t given me fearless super powers, it has given me the incentive to take on additional actions with a risk of rejection, simply for the sense of progress and rewards it provides for doing so.

It will be a long time before the fear of rejection no longer impacts me as much as it does now, but this system is helping me take baby steps towards progress on something that has been holding me back for as long as I can remember. Cheers to progress.

 

Conclusion: It’s A Numbers Game

Numbers Game

The reason I’m embracing this system is because many things in life are a numbers game, based on probability and randomness. Focusing on the actual probability of success can be healthy in moderation, but unhealthy when obsessed about (as I’ve written about here). Nevertheless, randomness and probability play a large role in success in life, so it’s important to be aware of them.

An example: The average Joe, who spends plenty of time out and about meeting new people, is more likely to meet his special someone versus, for example, the award-winning musician/novelist who spends his weeknights and weekends at home, never leaving the couch. (I’m not sure why I used award-winning musician / novelist as an example, but doesn’t that person sound interesting?)

Even though an award-winning musician/novelist is likely a very interesting, intelligent person, if he never leaves the couch (an inferior strategy for meeting people), his odds of success plummet compared to the average Joe who’s out and about talking to people.

Another example: If you apply to enough jobs, and your resume is solid, you’ll eventually find an opportunity worth pursuing. For example, as a senior in college, I spent a lot of time sending out applications (dozens of them), only to hear nothing in return. What’s more, I had to apply to Google 3 times before I finally received an offer from them. Despite being a qualified candidate, I still had to play the numbers game and face a series of rejections.

A final example: If you write enough blog posts, and you’re a decent writer, you’re very likely to eventually write something people resonate with – but you’ll likely have to write in obscurity for years before that happens. In my case, this blog had a very, very small readership until I started writing about goal gamification.

This is why handling rejection (and any sort of failure) like a champ is so important. People who quit too early into the numbers game don’t get to reap the benefits. Any numbers game requires a certain amount of attempts before the odds begin to make themselves obvious (in statistics, this is the statistically significant sample size). When you’re playing the odds, you have to keep trying as often as you reasonably can.

It’s one thing for me to sit here and write about how you should embrace your failures and learn to handle rejection. At this point, I’m sure many of you already know that. I’m writing this post as a call to action to find your own unique way of handling rejection. Being the gamification nerd that I am, started tracking my rejections and attaching rewards for hitting certain rejection milestones. Would that work for you? Maybe, maybe not.

Maybe you’ll resonate with the idea of a group of friends who are willing to take on rejection challenges with you. Maybe you’ll enjoy starting a blog to track your adventures as you push yourself outside of your comfort zone. Maybe you’ll resonate most with the idea of taking one small action with a risk of rejection each day, and ramping up the difficulty as you feel ready.

There’s a way out there for everybody; find yours.

Jon’s 30 Minute Live Discussion on Goals and Gamification

Hey everyone! As you may (or may not) know, I had a fantastic opportunity to speak about goals and gamification last year at GSummit 2012. It was a great experience, and they’ve even invited me to do a quick follow-up talk this year.

As GSummit 2013 rapidly approaches, I was asked if I’d want to speak about gamifying your goals on Gamification.co’s live webshow. I said yes, and you can see the result below!

If you’ve resonated with anything I’ve written about goals and gamification, it’s definitely worth your time to check it out! If the embedded video below doesn’t work for you, check it out on Gamification.co here.

Some of the things I talk about include:

  • Why I started  to gamify my goals
  • How to properly choose motivating rewards for your goals
  • How to avoid temptation to cheat your own system
  • What kind of people this system is appropriate for
  • And more!

Hope you enjoy!
-Jon