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.

Big Wins and Moon Shots


My dad sent me this video a few months ago. In this video, Billy Joel, while doing a Q&A session at Vanderbilt University, is asked by a student if they could play “New York State of Mind” together on stage. Watch the video if you want to see what happens; it’s a great example of a seemingly impossible ask paying off with an epic win (also known as a “moon shot“).

In our lives, we have a tendency to shy away from these “moon shots.” For good reason too; they require significant effort, are usually uncomfortable, and are very unlikely to result in any success. But for that 1 in 1,000 that does result in a success, brace yourself for something incredible.

One of the challenges in life is making time for these high risk, high reward activities – the moon shots. Companies like Google are already embracing this idea. Self driving cars? Top secret Google X projects? These are designed to find the next world-changing idea, rather than steadily incrementing on currently-existing offerings.

Thankfully, for individuals, this task doesn’t require immense product development and hundreds of the world’s brightest minds. It simply requires a willingness to go after the unlikely. Examples:

  • Emailing an executive at your company, and ask if he/she would be willing to grab coffee
  • Starting a business on the side of your 9-5 job.
  • Moving somewhere new
  • Investing in a new skill that could substantially benefit your personal and/or professional life

Some moon shots I’ve been working on lately (or have happened recently):

  • Pressing the reset button on my career in late 2012 and moving to San Francisco
  • Learning to code for 6 hours every Saturday, for a potential pivot towards a more technical career (in progress)
  • Launching a Meetup group to build a sense of community around electronic music in SF

While some of my other moon shots have failed pretty miserably, the three above are a few recent ones that have significantly impacted my life for the better.

Stop Being So Realistic

Being “realistic” is the killer of moon shots. This article by Malcolm Gladwell in New York Magazine – describing the unintended costs of constructing a railway line connecting Boston to the Hudson River – sums up my thoughts on the idea of being “realistic” all of the time:

Everyone was wrong. Digging through the Hoosac turned out to be a nightmare. The project cost more than ten times the budgeted estimate. If the people involved had known the true nature of the challenges they faced, they would never have funded the Troy-Greenfield railroad. But, had they not, the factories of northwestern Massachusetts wouldn’t have been able to ship their goods so easily to the expanding West, the cost of freight would have remained stubbornly high, and the state of Massachusetts would have been immeasurably poorer. So is ignorance an impediment to progress or a precondition for it?

Sometimes you need a healthy dose of ignorance in order to attempt those moon shots that may cause short term suffering, but pay off immensely in the long run.

Next Steps

Moon shots aren’t easy, so take baby steps when getting started. Build the habit of pursuing moon shots over time. Here’s what I’d recommend:

Step 1: Spend a few weeks gradually taking note of moon shots you’re neglecting. You don’t need to take action yet. Just build your awareness. Did you skip a worthwhile networking event because you were feeling tired? Take note. Has there been a business idea sitting in your desk drawer for 6 months? Take note.

Step 2: After a few weeks of taking note of possible moon shots, pick the most compelling one and begin taking action on it. Use tools like Trello and automate as much as possible so that you’ll be able to pursue this moon shot with greater ease.

Step 3: Repeat step 2 for the rest of your life. ;)


Photo Credit: Jim Davis