Saturday, January 14, 2017

Superhuman Developers, Decision Fatigue and Procrastination

Superhuman Developers

So the day has finally come: you've leveled up your development life! Whether it's getting a raise, getting your dream job, landing a side gig for more cash or becoming more recognized by your peers for your value - it's all gravy, right? Take a moment to breathe it in. Reaching a goal, regardless of size, does wonders for our very human need for feedback on our level of success. You worked hard and focused, and it paid off. That's no small feat, so be proud of taking another step (or five) up the ladder.

Fast forward to a day, a week, a month later. With success comes opportunities. Once you have established a foothold as an expert in your craft (or at least one particular subject matter) they will come knocking. Passion is contagious, and many people naturally want a piece of that. Something you possess. It can be wonderful affirmation of your value to be asked to do something with more obvious visibility, or higher responsibility. First you have one person asking you to teach in front of an audience, next another recommends you for leading a new project (or three) and yet another wants you to start blogging more. You are in demand, and everyone is holding out their hand expectantly. You are the savior, the leader, the visionary that will help make them or their project successful!

One problem: You are a finite resource.

You - your mind, your time, your health, your presence - all have a certain max levels of bandwidth. Unfortunately, we are mammals with physical limitations regardless of IQ or creativity. Although there are certainly other opinions on this scenario, science backs me up on this one. Some of you might be thinking the following: 

"Hate to disagree with you, Heather, but... I've got a superior system in place that allows me to simply accomplish more than the average programmer." 

However, usually when we think this, we are simply fooling ourselves. A human being really is a finite resource and we are just setting ourselves up for eventual burnout fast with that mindset. Not to mention the additional fallout of software quality loss and interpersonal relationship failings.

At some level all of us experience the valiant feeling of capability far beyond our actual abilities. We inherently want to solve the problems quickly, correctly, and stand on top of our desks with a cape on and shout "You are welcome, good people!" (Okay, maybe that's just me and my circle of programmers). It's a natural to desire to take on the world's problems - simply because you are capable of doing each of the ones presented to you. Instead of being realistic about your time/abilities/mental health, you take on X times more work then you secretly know you should. But you are SuperDev! You are flattered and excited by the additional responsibility, and a go-getter after all. You can do this. Just need to buckle down, right? 

Decision Fatigue

It's Day 1 of taking on 3 major projects at the same time. What do you do first? Everything is equally important. Your list of things that HAVE to be accomplished immediately might look like the following sample of mine:

1. Enhance your personal brand with more blog posts weekly
2. Redo/update your website (that hasn't been touched since 2011) immediately
3. Stay ahead of the pack by learning (insert latest Javascript framework here) ASAP

1. Research a new technology for an upcoming requirement review by Monday
2. Create a proof of concept piece of software for a demo in a few days
3. Manage bug fallout from a recent push to production (urgent)

1. Create a statement of work for a new client by Friday
2. Prepare slide deck/code samples for upcoming conference due in a week
3. Come up with better optimization integrating 3rd party software that is running very slow

This is the bane of my existence right now. Decision fatigue is looking at all the things that are possible to do, but have trouble selecting which one to do first, or at all. Choice fatigue plagues us when presented with too many great options of soda at a fountain, or food on a menu. One study in choice fatigue research is that "forcing a consumer to make a series of decisions will tire them out (even though they won’t be conscious of that fatigue). As the decision-making continues, they will be increasingly reluctant to decide at all." [Excerpt from Neuroscience marketing]

For my first attempt, I end up doing things in tandem - giving a little of my time to each and switch back and forth so it FEELS like I'm attending to them all. It works for a bit, until I look at the actual progress for individual tasks vs the the timeline. Everything is crawling along, because I cannot devote time to finishing anything completely. Context switching is difficult to do.

When everything is high priority, nothing is. When you hold all tasks in equal importance, something's gotta be first or you'll never win.

When I am procrastinating because of indecision, I ask myself the same question Tim Ferriss poses in this brief interview

Which one of these, if done, will make the rest irrelevant or easier?

After careful consideration, I decide finally that a blog post can come first. It should take a relatively short amount of time. Additionally, this will provide me with fodder for my upcoming speaking gig and satisfy some of the research requests I had been tasked with. 


Second attempt at productivity is now underway. It's been a while since I've blogged. It makes me uneasy to put an idea out there that can be easily trolled online. I felt I had to be "inspired" to blog, and inspiration comes and goes when it pleases in my mind. There is no schedule that it adheres to, or so I thought. So I wait for the enlightenment to come. And wait.... and wait. I start a draft of the faint glimmer of a topic and then toss it almost immediately. O, inspiration, where art thou? Thus procrastination is born.

"At it’s core problem, our brains are making an assumption on the task at hand. Say it’s a project that you’re starting, you may think it’s going to take days or weeks to get done, and as a result never start it. Or, how about thinking that it’s too difficult and that you don’t have the skills. In fact, the human brain is chronologically wired to procrastinate." [Excerpt from Cody McLain's article - highly recommended reading]

I'm incredibly guilty of procrastinating out of fear. If I don't start, I don't have to stare possible failure in the face.

So how do we overcome this? In most cases, the task is not as daunting as it seems if we break it down into the smallest chunk possible. Time management and productivity tactics can assist here (such as the Pomodoro Technique) but none of that matters if you cannot build in an incentive to even begin. Whether it's a blog post, a technical book or a piece of code for the day, the task can be a little overwhelming at times. 

Neil Strauss offers an interesting take on writer's block - he doesn't believe it actually exists. Rather, he suggests your standards are just too high and you are creating performance anxiety for yourself. [Excerpt from interview on Tim Ferriss' Podcast]. I know what you're all thinking...

"LOWER my standards?! This is computer science we are talking about here! No one wants to read something written poorly."

Hear him out first. This was my gut reaction as well. The psychology behind this is making it as easy as possible to succeed with minimal effort on your part, one step at a time. For instance, in this article, Neil outlines doing three mini drafts as follows:

The first draft is for yourself
The second draft is for the reader
The third draft is for the haters

I've found creating mini homework assignments work well for this. It's a lot easier to commit to just doing the first draft for me that no one will ever see. It just gets my ideas down in written form, messy is it might be, and allow me to marinate in it a bit. Then I re-sculpt it for the junior developer, peers, or whatever audience you are catering to. Finally, I look for the holes in my logic or position, and remove anything incorrect that could trigger the evil trolls who only exist to complain about my work in some way (a la Stack Overflow).

After three drafts, we are done - accomplished in short bursts of focused time. I now have a blog post I feel good enough about to run past a mentor. I choose wisely, only looking to someone who both has my best interests at heart, but unafraid to tell me the truth. If I get any constructive feedback, I think on it and decide whether or not to incorporate. Finally, I publish my work.

Checking off even one item in your list is progress. Don't focus on what you didn't get done today - focus on what you accomplished. Your brain will release small amounts of dopamine, motivating you to continue onto the next big thing. [For more, see The Psychology of Checklists]

Managing the demand

Lastly, remember you can trim the fat off of your over-sized list of high priority projects. Politely decline projects that won't have a larger return on the required invested time than others. Suggest a smaller role (such as advising or consulting others to carry out the task) or a deferral to another time. That doesn't make you hard to work with, it makes you the master of your life. The true SuperDev is one that chooses wisely to focus on the most important tasks well, instead of the mediocre many.

So, you're a finite resource. What can you do to manage that?

1. Pick a task to focus on
2. Just start it, even if you don't know where you are going yet
3. Take motivation by focusing on what you've accomplished
4. Choose your commitments wisely

Go forth and #SaveTheCode!

Special thanks to David Neal for the SuperDev illustration