Giving Up What You Love: A Guide to Breaking Through Plateaus


It is a rough road that leads to the heights of greatness.

My friends like to joke that I have a second home at Philz Coffee in San Francisco. Three or four days a week, they would see an automated social media check-in at Philz as a result of me connecting to their wi-fi.

There’s a reason I go there so often: I’m happiest when lounging in coffee shops. A quote from my post on tracking my happiness for 30 days says it all:

The top three activities that make me happy: conversation, listening to music, and working on passion projects … considering that people typically do these activities in coffee shops, this may help explain [why I’m at my happiest there].

As you can see, coffee shops are a winner in my book.

Unfortunately, drinking coffee was also sabotaging me. I’ve been struggling with certain health-related goals for years, and deep down I knew coffee was to blame (more on this shortly). But like so many others, the thought of giving up coffee horrified me.

How I thought every morning would be if I gave up coffee.

Three months ago, I put my foot down and finally took coffee out of my life. It sucked, big time, but it was absolutely worth it. And that’s what this post is about: giving up things you really enjoy because they’re holding you back.

Is it painful to give up things you love? Yes. Is it worth the struggle in order to continue growing as a person? Hell yes. And the rest of this post explains why. Continue Reading…

Dieting Sucks. Here’s One Way to Make It Suck Less.

Diet Dashboard

Dieting sucks. Can we all agree on that?

I don’t think anybody in the world enjoys sacrificing his or her favorite foods, but sometimes, it just needs to be done. Whether you’re overweight, hunting down subtle, yet chronic, food allergies, or trying to gain muscle without excess fat gain, dietary modifications are inevitable for maintaining and improving health.

I’m in the process of a drastic – and thankfully, temporary – dietary overhaul. Pretty much all of my favorite foods are disappearing during a three month period in which I remove all potential food allergens and irritants from my diet. Take a look at the image above; the items shaded in red are the ones I’ll miss most during this three month trial:

  • Eggs (!)
  • Beans / lentils
  • Coffee and chocolate
  • Tomatoes (!)
  • “Healthy” sweeteners (stevia, xylitol, erythritol, etc.)

Although these 12 weeks will be challenging, I’m no stranger to behavior change. If there’s one thing I’ve learned about making difficult lifestyle changes, it’s this: Identify all of your failure points, and plan out exactly how you’ll handle each one. 

Popular lifehacker and author Tim Ferriss feels the same way. In his book, the 4-Hour Chef, he writes: Continue Reading…

Let Your Passions Collide

Passions can play off each other in novel and unexpected ways.

In other words, the person with 2 or more passions, hobbies, or skill sets will oftentimes discover that they complement each other in curious ways.

When I moved to California a year and a half ago, I picked up two hobbies, independent of each other: starting a group around electronic dance music and learning to code.

While they remained in their separate worlds for almost a year, an opportunity recently emerged, allowing the two to meet. I used SEO and Google Analytics data to help get my Meetup events on the first page of Google for larger Bay area electronic music events. The rate of people joining my Meetup group tripled during that time.

This blog has yielded similar results. My years of writing here have trained my eyes to avoid sloppy paragraph structure, which has carried over nicely into writing clean, commented code at work (something my co-workers greatly appreciate).

There are countless other examples, but I hope the point is clear: hyper specialization isn’t necessarily the best approach when it comes to developing skills and exploring passions. It looks like successful blogger and Googler Adam Singer agrees with me on this one. And how could both of us be wrong?

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.