Practicing Fundamentals For Mastery

What makes the difference between the pro and the amateur?

The pro has mastery of fundamentals.  The amateur is inconsistent and undisciplined and neglects practicing the basics.

The basics of any practice, profession, sport, or activity are the foundation on which you build your performance.

As an example – I like to play pool.  A lot.  Probably way too much.  In college I played pool about as much as I was in class.  I played games, and when nobody was around, I just practiced making shots.  I would line up hard shots and hit them over and over and over again.  I analyzed what I did wrong, and then I tried again.

I got pretty good.  I was one of the best, if not the best, players at my school. (There were only 350 students at my tiny Catholic college and maybe a couple dozen frequented the pool room.)  When playing 8-ball, I frequently won in one or two turns.  I wasn’t quite a pro, but I had a real love of the game, and was a solid player.

After college, I stopped having the time or opportunity to play, and my skills waned dramatically.

Recently, I picked it back up (and joined the APA).

The things I had difficulty with were very basic:  visualizing my shots, executing a solid stroke.  The fundamentals.  I couldn’t do them.

It took several sessions to start to pick it back up.  I had to practice the hard way.  I painstakingly lined up my shots, examined the strike point and the cue, focused on the angles needed, and finally after all that shot.  And I was inconsistent.

This was intensely frustrating, as I used to make these shots effortlessly.  It was annoying.  I got angry with myself.  But I kept going, and had occasional encouraging moments.

And then it clicked.

At some point, I rebuilt the basic fundamental skills enough to connect it with the intuition and accumulated skill to begin playing closer to where I had previously.

Practicing the basics relaid the foundation and I started to play consistently better.

Fundamentals are also key in other areas of life, such as relationships.

Occasionally, relationships get rocky.  It doesn’t happen all at once.  It’s a gradual process.  Kindnesses are omitted.  Consideration is forgotten.  Little gestures aren’t practiced.  And suddenly, you’re not really on the same page, and hardly speaking the same language.

It can be tempting in these circumstances to think that something is really wrong that requires dramatic action.  However, most of the time, all that’s needed is to simply commit to small daily practices that help bring you back into sync, re-establish understanding, and rebuild the emotional bank account balance that was getting sorely overdrawn.

A lot of the time when our life or coding is feeling way off, it’s because our foundation is shaky.  And frequently, it’s simple basic things that we neglected.

Practicing fundamentals helps keep our execution consistently high, and can help reinvigorate our skills when things get a little off.

Why Complaining is Fun And Why You Shouldn’t Do It

Recently, I read something that pointed out we only do things because we find them somehow enjoyable.  And it said something along the lines of “Maybe we complain because it gives us an audience, or makes us feel important.”

Suddenly I realized that my complaining (at home, or to a couple friends) was in fact an impediment to Doing Something.  Because I got to feel like things were Way Harder than they actually are.  This gave me something psychologically satisfying, but it also gave me something that made me feel safe.

By putting up obstacles in front of myself, I was able to feel like there was no point in trying, which meant I could avoid doing the things that I was afraid of.

And – Bonus – I also got to feel like I was really doing something difficult and praiseworthy and get encouragement and validation from others.

This of course is not what I needed.  I needed to buckle down and push through, instead of getting a quick boost from others that fades back into inaction.

Takeaway

Complaining is a lot like telling people what you’re going to do.  It’s a way of satisfying a psychological itch without actually accomplishing anything.  You get the social validation without actually accomplishing anything.

Leave the itch unsatisfied.  Keep yourself hungry for action.

5 TroubleShooting Techniques (For When Things Gets Hard)

Programmers typically spend more time debugging code than writing it.  And since we can’t always practice Test-Driven Development, especially on legacy software projects, there are often some complicated tangles of spaghetti code to work through.

Normally, you can use a debugger and find information about the state and flow of the code.  Occasionally even with a debugger, things are still quite difficult.

But what do we do when our normal tools aren’t available, and we’re left with incomplete information and not a lot of leads?

#1 Stop Doing What You’re Doing

When it’s not working and you’re getting frustrated, you need to stop.  Take a break.

Take a 10 minute walk, talk to someone, get a coffee or a snack or a drink.

Walk away.  Just getting away from the problem for a few minutes will frequently be enough to give you a new idea.

This is often the most difficult step when you’re really intensely focused in a debugging session.

#2 Question Basic Assumptions

Do you have a mental model for what is happening in the code?  How confident in that model are you?

Have you checked for typos?  (This is a problem in bash scripts more than you’d like to believe.)

Are you sure the inputs and outputs are what you think they are? Can you verify them?

Do you think you know where the problem is happening?  How have you verified this?

Have you read the error message correctly?  Do you know which stack trace (if there’s more than 1) is the relevant one?

Is there possibly a silent upstream failure?  (This happens with front-end javascript frameworks a LOT)

What other tools are at your disposal?  What other programmers are at your disposal?

Can you list your assumptions?  Test them?

Can you solve a simpler problem?

#3 Talk To Someone

If there’s someone technical who knows your space, that would be your best option.

But anyone will do as long as they’re willing to listen.

Try to explain the problem clearly.  Frequently, if you can’t explain it and what you are stuck on, you are simply lacking sufficient clarity in your problem definition to move forward.

Frequently, vocalizing it to someone else helps us to move forward or get better ideas.

#4 Expand Your Search

Google is usually the first step when we see a new kind of error and don’t know what to try.

However, sometimes you can’t find much of anything.

When that happens, try broadening your search.  Look for general information.  Expand your understanding of the technology, looking for concepts that might help you, or people with similar-sounding issues that don’t quite match what’s happening to you.

Think of a new way to describe your situation.

Read whatever comes up.

Remember that you’re not trying to find a problem-solution pair, but rather are giving your mind additional material to let it do its work.

#5 Change Your Problem Description

It is often the case that we are describing the problem by looking at the symptom that immediately presents.

Instead of thinking in terms of what is wrong, think in terms of what you are trying to accomplish originally.

Sometimes you can simply not solve a problem and move forward by a different route.

In short, make sure you are solving a problem you need to solve.

If None of That Works…

Give up.

Seriously.  Go to sleep.  Take a nap.  Go do something fun.

Let your subconscious attack the issue while you recharge and relax.

Come back to it later with fresh energy.  If you’ve done all you can do, let that be enough.  Life is about more than this one issue.

Always Be Training

I was listening recently to an episode of the Tim Ferris Show with Jocko Willink answering questions.  He answered a question from a listener:  “How do you shut internal doubt down and negative chatter out of your head during critical must-do moments?  How do you change negative emotional focused states when something or someone knocks you off focus?”

First of all, internal doubt is not necessarily a bad thing.  And I’ve said this before about fear of failure.  Because internal doubt  – first of all that’s a form of humility, and obviously humility is a good thing, and that internal doubt and that fear of failure is the thing that keeps you up at night preparing, that’s the thing that’s not going to let you cut corners.  It’s the thing – it’s that little voice, that little voice inside your head that’s whispering, ‘Rehearse again, practice again, do it again over and over again and that’s the voice that says to do everything you can to be ready.

Humility, and constant preparation.  Do it over again.  Practice again.

Do you want to rise up to meet new challenges?  To perform under pressure?  Or do you want to fail when it gets hard?  Give up when the challenges seem insurmountable?

Not everyone is blessed with natural gifts and talents to the same degree or in the same way.  Some of the people who walk this earth are truly more talented than us.  They glide blissfully through whatever life throws at them, and look good doing it.

But some of the people we may think are in that category really aren’t.  They just work harder than you.  They prepare.  They train.  They think about what might go wrong.  And they prepare to meet those challenges.

Self-doubt can be crippling when you let it become nothing more than a voice in your head that says “You can’t do it.”  But if you flip that around into a question – “What is necessary so that I can do it?” – you start to see wins accumulate.  Your losses become lessons.  Your victories become validation that push you further.  You start to wonder what else you can do.

Training as a Developer

What kind of training should software developers be doing?

There are four basic types of training we need to be doing to be effective: Physical, Mental, Emotional, Technical

Physical

The soul and the mind are not separate things apart from our bodies. We can’t expect much from our minds when our bodies are falling apart.

At the bare minimum, this means we have to eat well, get some exercise, and sleep.

Depending on your inclination, making this into concrete goals (running a 5k, dead-lifting your bodyweight, learning Jiu Jitsu, etc) can raise your energy and focus tremendously, and make your training sessions more effective. But unless those things excite you, keep it simple and do enough to keep your energy levels up.

I’ve personally found probiotic supplmements and occasional fasting to help eliminate brain fog and fatigue.  So if you’re having a problem that diet and exercise don’t fix, start trying new things.

Mental

Mental training is about enhancing your cognitive abilities as well as managing your mental state. This isn’t about becoming more knowledgeable about your particular specialty, but rather about learning how to think more clearly, and to think more creatively.

This can be accomplished by doing things that strain your mind, such as reading a book on something challenging, doing puzzles, solving problems for fun, playing chess or sudoku or Go, or basically anything that stretches you a little.  It helps tremendously if you enjoy it, since 15 minutes of engaged activity is better than an hour where your mind won’t focus.

To stretch your idea muscle, try coming up with a list of 10 ideas a day to exercise the mind. That kind of training is great, and will help you with lateral thinking as well. It should be done along with other kinds of activities, such as reading or listening to podcasts, etc. You can’t come up with great ideas if you’re not feeding your brain with material.

Finally – the last mental training needed is to manage your internal conversation with yourself. You need to keep yourself from worrying and being overly negative and critical.  Root out thinking that is draining your energy and motivation.  This is because…

Emotional

Emotional health starts with your relationship to yourself. In order to push through the harder parts of projects (and life) you need to believe you can. You need to be able to show up when you don’t feel like it, and work through (or at least tolerate) bad moods and occasional depression. Most of these things lift, especially if you keep your mind focused on the right things.

There is another aspect to emotional health which some call spiritual, which involves cultivating gratitude and peace, and learning how to have perspective.  As a practicing Catholic, I think of my spiritual life as something beyond those things – as my relationship with Christ.  Cultivating silence, peace, and gratitude are essential to that relationship (and to any personal relationship, for that matter), and are part of my daily practice to grow in my faith.

If you don’t have a religious practice, you will nonetheless find it hugely helpful to cut out time for daily quiet (no distractions), cultivate gratitude, and learn to accept what is beyond your power to control.

On top of the foundation of physical, mental, and emotional strength, we add technical training.

Technical

Technical training is last on this list, because it sits on top of good life habits. Being able to learn has a lot to do with our physical, mental, and emotional health. Being effective day in and day out requires a strong foundation.

Obviously, we should be learning the tools we use every day in our job as well as we can.   If you work in LAMP primarily for your day job, you should know it inside and out. If you haven’t done this, that’s a great place to start.

Beyond that, learn a new language, or read a technical article on a new technology.   Build something for fun. (Having trouble thinking of things to build? Work on your idea muscle.  Make a list of 10 or 20 things, even if they sound like horrible ideas.)

Finally, involved in your technical abilities are meta-technical skills.  These include soft skills, learning how to learn, asking questions well, and thinking about the bigger questions that drive the creation of the technology that you are working on.

 

Learn to think bigger, look at the big picture.  Learn how your boss thinks, how business works.

At some point, you start to become a force for change, because you’re the best developer you can be but also understand things at a higher level.  You will be able to manage your boss better, and make larger contributions.  You will gain credibility in your organization.

Summary – A Daily Practice

Having a daily practice is essential for building a strong foundation on which you can build a successful life.  It is essential to strive every day to do something on your list that can help you improve.

Think of your life as aspirational.  You won’t always check all the boxes.  But try to remember what kind of person you’d like to become, and work a little bit every day on yourself, so that you can be more effective in making your contribution in the world, and living the kind of life you’ll be proud to live.

Mind The Gap

Nobody tells this to people who are beginners, I wish someone told me. All of us who do creative work, we get into it because we have good taste. But there is this gap. For the first couple years you make stuff, it’s just not that good. It’s trying to be good, it has potential, but it’s not. But your taste, the thing that got you into the game, is still killer. And your taste is why your work disappoints you. A lot of people never get past this phase, they quit. Most people I know who do interesting, creative work went through years of this. We know our work doesn’t have this special thing that we want it to have. We all go through this. And if you are just starting out or you are still in this phase, you gotta know its normal and the most important thing you can do is do a lot of work. Put yourself on a deadline so that every week you will finish one story. It is only by going through a volume of work that you will close that gap, and your work will be as good as your ambitions. And I took longer to figure out how to do this than anyone I’ve ever met. It’s gonna take awhile. It’s normal to take awhile. You’ve just gotta fight your way through. – Ira Glass

Having a technical blog on the internet is something I’ve been meaning to do for a long long time.  The tiny voice in your head that says “Your writing isn’t that good and nobody will want to hear what you have to say” for a long time kept me from making this into a reality.

Finding your own style and your own voice takes time.  This is, at this point, an aspiration for me.

You cannot build great things without first building something.  Experience sharpens you, and your mistakes make you better.

This is why Nabakov once said “My pencils outlast their erasers.”  Rewriting what you have written takes time and patience.   Editing and constantly refining is necessary.

This is rewarding not simply because the finished product is more beautiful and will be better received.  It is also rewarding insofar as you gain clarity as you crystallize your intuitions and scattered thinking into words that represent your best thinking on a subject to date.  When you don’t quit on an idea until it is brought to fruition, well said, and can be understood by another, you are telling yourself something powerful about the contribution you can make in the world through your efforts.  It is worthwhile to put yourself out there.

So this is my blog.  It may not be great, but I have hopes that it will become great.

Identifying The Real Reason and the Very Good Reason Makes Your Path Clear

I am a big fan of Continuous Improvement, because I believe that no matter how well things are going, they can always be improved.  If something isn’t growing, it’s dying.  Changing habits and beliefs are often the key to making breakthroughs in organizations, as well as in your personal life.  Most plateaus are plateaus because we can’t see beyond our current perspective to know what we need to do on a daily basis to improve.

What beliefs have we accepted about ourselves, and what practices are we engaged in, that keep us from doing or being what it is we want to do?

One area I want to improve is my online presence to help me build a more robust business.  I have generally refused to take the time to write because I “have other things to do”.  And who wants to know what I think?

Really though, the belief is that I don’t have something to say worth reading.  This is the limiting belief and the real fear.

Recognizing that this is the Real Reason, and not the Very Good Reason (that I’m busy) helps to make the path clearer.

So this is of course what I need to work on doing every day.  Write a couple paragraphs, and publish something from time to time.

It probably won’t be very good, and I probably won’t be that consistent, but this is what I need to work on developing.

And because habits and action change your ability to do and see new things, I can only wonder what will I be able to see more clearly after I push past this hurdle.