The Problems We Have With Problems

In my time as a developer and leader of other developers, I’ve focused a lot of my effort on understanding how people diagnose and solve problems.

This is an extremely broad topic, obviously, but still some interesting things have emerged as a fruit of my intrigue.

Here’s an incomplete list of things that make problems… well, problematic, for humans.

  • Mixing up recognition with diagnosis
  • Confusing symptoms for roots
  • Trusting narrative over facts
  • Strict dichotomization
  • Visible focus
  • Control fallacy
  • Tunnel vision
  • Hindsight narratives
  • Irrational, but popular, beliefs

Each of these is hard to see if you’re in the middle of it. Extremely hard to predict. Easier to see in others, but also elusive because none of these problems presents itself perfectly.

Unfortunately this post won’t give you a silver bullet, but here’s a few things to try.

  • Pair awareness with humility. Know that these things exist, and that you are vulnerable to them because you are human.
  • Seek truth, not victory. Truth is it’s own real victory – the efficient and rational victory, different from a perception-only kind of vanity-victory.
  • Don’t despise questions. Questions are often uncomfortable, difficult to answer, and may even seem like a waste of time. They are not. Generate more questions than answers.
  • Always remember the dark matter. We see very little of what’s going on at any point in time. Most of the time, our perception is less than the tip of the iceberg. Be happy and quick to blame randomness for a significant portion, if not all, of your successes and your failures, and then see if you can draw out similarities after you’ve accepted the role of the dark matter.
  • Fight echo chambers by making more relationships and seeking wider experiences. Typical routines and limited relationships will keep your mind in one lane. Get into another lane. Try new things, meet new people, read new books, take a new way home. Allow randomness and serendipity into your life; not because those relationships must materialize into new opportunities, but because your brain is healthier with the variety.
  • Separate analysis from sense-making. We crave sense-making. We instinctively search for causes to avoid future threats and compare our own situations against a good or bad outcome. In order to keep analysis and sense-making separate, use frameworks and cross-checking for analysis that doesn’t produce a “narrative.” (Don’t forget dark matter: there may be no sense to be made.)
  • Beware of certainty. Notice I didn’t say “beware of confidence.” You can be confident, and still uncertain. You can also act in bravery. But certainty is often a sign of turning something that is gray into something that is black or white; this kind of dichotomization, when done many times over, can generate a lot of error.
  • Meditate on the fact that good people fail often. We don’t read failure stories often enough to realize just how common they are. Very few mediocre stories make for good books, or documentaries. Remember that sometimes, despite all of your effort, failure or lackluster outcomes can still happen. Be thankful for them. If you don’t choose to be thankful, you only hurt yourself.

This is a short list in a category where lists don’t solve the problem. However, if you’re reading this right now, I hope you leave this page encouraged and equally humbled at the reality of the complexity of problems we face every day. Give yourself, and others, grace. When you feel like you’ve done that, double it. We all need more grace.

Podcast Feed Limited by Feedburner

The last two episodes of Developer Tea haven’t shown any downloads, so naturally I reached out to Simplecast to get an answer.

While waiting, I kept trying to diagnose the feed directly, having totally forgotten that the RSS feed itself was being managed by Feedburner.

Unfortunately, Feedburner has a limit to the size of feed it will parse – specifically 1024K.

Luckily, Apple has made managing podcasts easy; updating an RSS feed is as simple as entering it into a field in the Podcasts Connect interface. Goodbye, Feedburner.


I just got over what we are pretty sure was the norovirus. No vulgarity necessary – I slept in the bathroom one night, and basically forgot what day it was.

It felt crazy. Odd to me that sickness like this sweeps across the nation regularly, by the way.

Interesting thing about the norovirus – or maybe not interesting, but a fact nonetheless – it’s incredibly contagious.

As in, even after you’re good and before you ever have symptoms, you could be carrying the norovirus.

Of course it’s not super serious if you’re not a tiny child or an elderly adult. It’s a bit more serious in our household since Lauren is pregnant.

(That doesn’t mean it’s tame, by any means… It was quite violent and very unpleasant, and a few days later my stomach still isn’t back to 100% strength even though all the symptoms are gone.)

As a result, we started being extremely careful around the house. She’s washed her hands upwards of 160 times since I got the virus. I’ve done the same.

You know, we use this word, contagious, to describe viruses all the time… the idea that one thing can be “caught” from the simple interactions – the mundane things we do with one another. Shaking hands, hugging, touching a doorknob. It’s so simple, and yet that one action is literally what spreads that virus from one to two, and two to four, etcetera, until the norovirus sweeps the United States.

I started thinking a lot about this phenomenon of contagiousness laying sick in bed.

What else is contagious?

Certainly we’ve used this word to describe “viral” media. But I don’t want to talk about ways to succeed – I want to examine a cautionary perspective, in similar alarmed fashion to the Cutrell household bleaching extravaganza over the last few days.

I believe that in similar fashion to passing a disease, as a leader especially, your words and actions are contagious.

Whether interfacing with a local competitor at the coffee shop, emailing with a client, or talking with a colleague – every interaction you have carries consequence, and more than you’ve expected in the past.

And when you recognize that your words are contagious, you’ll also realize that when you are supporting a team, the virality of your attitude and messaging to that team is going to be painfully clear.

Those you lead will pick up on small things you say – small things you do. They will pick up on the linguistic ceremonies you promote and perpetuate around the office. They will pick up on your phone and texting and emailing habits. What’s even more alarming is that – sticking with the metaphor here – the virus will mutate into something worse than you intended.

If you communicate slight negativity, it will likely expand in your team to full-blown negativity. If you communicate frustration with a client, you can generally expect your team will talk poorly of that client over lunch.

So, what does this mean?

It means that you, the leader – you have the job of knowing the impact of your words and your actions. You are contagious, and it’s up to you what you spread.

Letter to Liam, Inauguration Day 2017


You aren’t here yet, and I’m not sure what your voice will sound like. But today is an important day in history.

There are a lot of words in our language that have no particular bend to them. “Important.” “History.” “Surprise.” All of these words are, technically speaking, agnostic of “goodness” or “badness.”

And today is an important day in history, where many people realized the result of a big surprise.

Last year, about a month after you were conceived, Donald Trump was elected president. Today was his inauguration. We saw the peaceful transition of power – watched the Obama family wave their final goodbye, and the signing of the first presidential orders by the 45th president.

Photo credit: ABC News

This letter isn’t here to steer you towards or away from liking Donald Trump; that’s your decision, and ultimately you probably won’t have much of an opinion about him for a long time.

Instead, I want to give you some words and thoughts to consider. By the time this president leaves office, you almost certainly will be between 4 and 8 years old. You will have heard his voice.

You will likely be affected by his presidency for years to come, perhaps for your whole life. You’ll hear about him well beyond his term in office.

I’m not going to steer you towards or away from Donald Trump. I’m here to teach you about empathy. About perspective. To help you find a lens that views the world through what it could be, not what it is today.

A lof of the time, people in your country will use their own situation to make decisions. You will, too. We all do this – it’s human instinct to protect ourselves, our families.

My bills, my taxes, my pain. My neighborhood, my city, my beliefs. My agenda, my family.

These are the things we value intrinsically, without being told we should, because we are trained by our own pain and pleasure. We want to be like our friends. Basic psychology says that being different from those we are in community with feels similar to pain.

This is no different from animals. Animals protect their own. They protect their space, their domain. It’s survival.

But as we evolve – as we learn how to survive better, we also have a newfound sense of perspective and awareness. We learn about empathy. You may have heard this word before, but for the sake of this letter, we’ll use the definition of “understanding and caring about the situations and perspectives of people other than yourself.”

Empathy isn’t something we stumble upon – it is something we practice. It’s hard work.

Empathy gets really hard when you encounter someone you disagree with. Especially if those same people are those you care about. Perhaps the hardest people to practice empathy for, though, are those that you dislike, disagree with, who are very different from you in every way.

Liam, you have a perpetual license to agree AND disagree with me. And with anyone else you encounter. It’s one of the fundamental parts of being human – your own path-finding.

My hope for you, Liam, is to remember that you are just as vulnerable as the next person to elevate your own concerns, survival, and pain above others. To elevate your beliefs. You may have the tendency to hold those beliefs over others’ heads, even – imperialism certainly started somewhere.

But keep in mind, son – just because something goes well for you does not mean that thing is good for everyone. Just because your taxes decrease doesn’t mean someone else isn’t left out in the cold. Just because you are doing well, doesn’t mean your neighbor is doing well.

When you get awarded the job, someone else is left unemployed.

When you win the game, the other team experiences loss.

When your country wins a war, there are always casualties.

Beyond these obvious realities, not everyone has the same experience. Not everyone is born into the same situation.

You, Liam, are extremely privileged. In this place in history, you have been born with the statistics skewed in your favor. Being a white male, for example, statistically makes you more likely to have earning power. Your mother and I will take care of you, and we work hard; you won’t likely experience major poverty. You won’t see significant violence in your neighborhood, and you will be around people who invest in your future and your welfare.

This isn’t true for everyone. While everyone has equal rights, and everyone has technical opportunity based on legalities, not everyone will have access to those opportunities. Not everyone is willing to recognize those rights fully, and sometimes those rights are thwarted by the actions of others.

No system is perfect. The market isn’t perfect, and neither are the suggestions for how to fix it. At this point in history, our income gap is large. Our national debt is insane. We have a lot of broken stuff laying around, and unfortunately just as with war, there are casualties.

You may have a friend one day who doesn’t have the same privilege as you. You may work with people who are paid unequally to you. You may encounter someone who has experienced hate, or poverty, or violence, their entire lives. They may experience crippling debt as a result of medical problems. Perhaps they have a mental disposition that handicaps their employability. Or maybe they simply have a different belief system than you have.

Do not let anyone fool you: these people do not have the same life that you have, and treating them as if they do is nothing short of living a lie.

As a side note, many people do live this lie. Perhaps not intentionally, but rather because they don’t think to confront these realities. Sometimes they are simply blinded by their culture. It’s important to recognize that you, too, will have blind spots that you don’t even realize. Always be humble and recognize this fallibility of your own perspective.

My prayer is that you don’t ignore this disparity between you and those around you, and equally that you don’t seek to coerce them into conforming to your way of life. Instead, I pray that you develop perspective, and breed empathy. To open your eyes and see people how Christ would see them, in the light of their suffering rather than in the light of your own survival and benefit.

Remember that empathy is a marker of maturity. Develop a worldview that takes into account the realities of others’ experiences. To understand and work on behalf of others as well as yourself.

I’ll end this letter with this very simple quote from the comedian Louis C.K.:

The only time you look in your neighbor’s bowl is to make sure that they have enough. You don’t look in your neighbor’s bowl to see if you have as much as them.

I love you, son, and I believe you will keep your heart, mind, and eyes open to what is happening for your neighbor as much as for yourself.

What To Learn As a Brand New Developer in 2017

If you are getting into software development, my recommendation for 2017 is that you learn JavaScript (the ES6 variety).

Learn how to make a web service or two, and how to launch on a given domain; learn enough about HTTP and some kind of serving technology to get a service up and running. This will give you enough skills to be a junior developer somewhere long enough to build more valuable skills.

Next, I recommend you split your time between learning and pursuing these two things: user psychology-driven design and machine learning.

The psychology driven design learning should give you an intuition and method for learning what people want, and why.

If you want a long future in this field, machine learning and designing experiences around AI is your ticket to future value. Literally ALL of the biggest technology companies in the world are investing in this – it’s not going anywhere any time soon.

Twenty-Eight Years

Year twenty-eight has been, to say the least, eventful.

A few important highlights for those of you who like lists (myself included):

  • Whiteboard grew by 7 new people – this is a huge responsibility
  • Developer Tea turned 1 year old (and hit numerous milestones)
  • I pursued and attained my private pilot license
  • Lauren and I became more involved at Harvest Chattanooga
  • Easily the most important thing: I found out I became a father, and will see my child in year 29

Here’s some trivial memory highlights:

  • Dad and I started working on revitalizing N3244Y, his Cessna 182E, for the two of us to share and fly together. I’ll be responsible for avionics, and dad for the mechanical side. We’ll never be done working on this plane, but it will be in service this next year.
  • Lauren and I upped our house game this year: refinanced our loan, got some better furniture, and built out a new room upstairs (as fate would have it, before we knew we’d be having our child soon)
  • We bought our Subaru Outback this year
  • Whiteboard launched Home Movies this year, just in time for Thanksgiving rush. This is a huge accomplishment, and a long time coming; we’ve spent many hours watching home movies, and I can’t wait to see my children side by side to my and Lauren’s baby videos.
  • Both of our next door neighbors moved this year. It would be easy to assume it’s something to do with us, but in fact, the neighborhood has appreciated significantly, enticing people to sell high.
  • Tons of other awesome stuff happened this year that I’ll have to fill in as I remember it… Come back and you’ll see the edits.

Odd Lessons from 28

With all of the awesome stuff that has happened in year 28, the world around me seems to be in a strange, tense state.

This was easily the strangest political climate we’ve had in the U.S. since I was born. Of all the odd encounters with people I’ve had in my life, having a differing political opinion from another person creates one of the most palpable feelings of division that I’ve ever felt. I was out with my family in Dothan today. Coming out of a store, I saw a truck – and there is no exaggeration here – with the Christian flag, two Alabama “Roll Tide” flags, an American flag, a Trump flag, and I believe a confederate flag (although admittedly I was too dumbfounded to remember in perfect detail). And to be honest, it wasn’t that I have extremely different ideals from this person. I am fiscally conservative (though not a Trump supporter), and I confess faith as a Christian. But with my beliefs and perspectives, I cannot imagine what level of commitment or passion about my own beliefs I would have to have to fly that many flags, no matter what is on the face of it.

This was kind of a meandering rant, but I suppose my point is this – in a world where opinions of those closest to you can more easily than ever be extremely different, remember that it’s not your job to fly a flag, but instead to live amongst one another. This applies far less to the relationship between flag guy and me, and much more to my relationship with my own family members, friends, and colleagues who differ from me. Politically, culturally, even in taste – I’m learning that sharing my opinion is less valuable than learning the perspectives and opinions of others, and using that information to get closer and treat each other better. If you’re close to me, I love you first and foremost, and want to give you the best version of me that I have.

The times I’ve shared my opinion out of anger, frustration, or a sense of righteousness, I end up being overly preachy. I wouldn’t want to be around me in those moments. Conversely, when I share my opinion from a logical, critical perspective to better something, particularly in a professional setting, the opinion then holds value. But here’s the catch: in every scenario that my opinion was valuable, it was explicitly asked for. Lesson learned: don’t be quick to share an uninvited opinion.

I am your father.

I just watched Rogue One today. Quite good in my opinion. There are so many father references in Star Wars. Basically every movie has a pretty significant hinge on a father-son or father-daughter relationship. Some mother roles in there too.

I’m one of those. I’m a father. My own Dad looked at me tonight and said, “I can’t believe you’re going to be a Dad.” And honestly, I can’t either.

I usually am relatively composed, and I do a decent job interpolating basic advice for people who are well beyond my experience level, age, wisdom level, etcetera. However, when it comes to fatherhood, I am clueless. No experience, unless you’re counting uncle years.

So, my plan is to be good to my child. Be present. Challenge them to love learning even more than I do. To look at life with wonder and positivity, and to create more of what ought to be. To teach them conviction, and the importance of caring for others, and what it means to work hard, and play hard. I want to teach them how to be kind and compassionate to others, and tolerant and respectful. I want to help them develop their own belief, and pray for them to learn what it means to have faith and hope in Christ. I will show them that I love their mom, and teach them to love family.

But honestly, I know I will mess some of that up. I know I will say the wrong things sometimes, and that there will be bugs in my system from day one.

I hate diapers, by the way. Absolutely terrible with that kind of stuff. It’s not that I don’t want to do the work.

I’d stay up all night and rock a crying baby if it meant avoiding diaper duty. It makes absolutely no sense.

I do love my child. And I hope I get most of the stuff right. Maybe one day, they will get a chance to read this, and see how much I thought of them.

I’m up at 3AM writing this blog, mostly to get a chance to write something for you to read, little one.

The year that took so many celebrities.

A great year for me, but we’ve seen so many celebrities go before their time. Everyone’s complaining that 2016 is unusually bad, etc. I’m sure we’ve had a similar one before. Just Google it, no need to belabor the point. A good insight on a relevant reddit thread – perhaps it hits so hard because many of these folks were younger than average death age, and we are realizing the mortality of our own parents, and perhaps in turn our own mortality.

I have a penchant for finding reasons why I’m more healthy or less likely to die like that person did. Or, justify that they were really old, or somehow emotionally prepared to die, or that the statistics work more in my favor. Coping, or maybe valid reasoning, or a cocktail of both. Either way, it happens to us all at some point.

I hope when I’m gone, young or old, that those closest to me will adapt. I don’t want my absence to be a handicap, but rather my memory to be an inspiration. The next 28 years, if I am blessed to have it, I want to spend loving my wife, my children, my family, and those around me enough that every day could be my last, and I’d know I left it all out here and took no love to the grave.

A strangely dark turn to a birthday post. Let’s back out of this little black hole.


The 29th year begins at 7:30 tonight.

It’s not scientifically important, by the way – unless there’s some weird moon rhythm thing I don’t understand. It’s a step marker – a measuring stick. So we don’t lose our place.

For year 29, I don’t want to ignore that measuring stick one single day. Every day, I want to walk away from more thankful than the last.

Concrete goals:

  • Create a habit of writing more often. Here on WordPress. In this nicely made but incredibly generic 2017 theme. A big hurdle before was that I was stuck on the tool rather than the practice.
  • Get my IR ticket. Instrument flying will help inform me how to be a safer pilot.
  • Get into the thousand club. This was a goal last year that I didn’t pursue correctly. Ended up hurting my back. Gonna try again this year.
  • Read more books. I am ashamed to say that though I read quite a lot last year, I read mostly digital things. Shorter pieces. I want to read more this year – perhaps a book a month is a solid reachable goal.
  • Be active more days than not. This goal is important to me – I feel better and function better when I am active at least 4 days out of 7.

Conclusion / TLDR;

This year was awesome. Did some super cool stuff. Some crazy things happened in politics and celebrity land. I’m gonna be a Dad, and I want to be a better person both before and after the Baby arrives.

The Infinite Toolset, Craftsmanship, and Developer Sanity

I’ve been using the metaphor of blacksmith and cobbler recently in discussions about craftsmanship. Why?

Blacksmiths and cobblers are renowned as dedicated to their craft. Repeating the motions every day. They both take raw materials, perform a process of actions using a set of tools to refine those materials, and consistently produce something of practical value that is ready to use. For blacksmiths, the tools and materials are quite different from the cobbler’s, but they share a lot of the same fundamental disciplines in practice.

With a little bit of Google research, you can find that a blacksmith today uses basically the same tools as blacksmiths before the industrial revolution, and those tools went largely unchanged for centuries. Of course, the Industrial Revolution changed our reliance on the local blacksmith, but the toolset of any blacksmith of any period would be quite similar to any blacksmith from any other period.


Similarly, the cobbler’s tools have remained relatively unchanged. When new tools have come into the scene, they come by absolute necessity. The blacksmith and the cobbler wouldn’t spend all of their time searching out new tools, constantly on the lookout for something to bend iron in a new way. More likely, the blacksmith would always be on the lookout for great scrap iron, and the cobbler on the lookout for good deals on leather, or building relationships with the people who fashion the cloth and buy the boots he makes.

We have a tooling problem.

Notice that neither the blacksmith nor the cobbler are careless about their tools. Both of them are highly focused, and highly skilled with their tools, and actually rely quite heavily on them. Their jobs depend on having a reliable toolset that they are experts at using.

I think developers today have a fundamental problem with tooling, and it’s simple: we are constantly shopping for new tools.

You might be thinking, “I’m not shopping – these tools are free!”

But that’s not totally true. Certainly, free and open-source projects don’t cost you the currency available in your bank account. But they cost you another, perhaps more valuable, currency: time. You spend time looking, adopting, and deprecating your tools. You spend time reading blogs and books that compare tools, just for the sake of picking one. You spend time switching your code from one set of tools to another. You spend time retraining muscle memory, sometimes to accomplish the same goals.

Admission: this analogy isn’t perfect.

Of course, we have a different trade from blacksmiths and cobblers. Our trade requires that we do, at a much faster pace, adapt our toolset to new demands in our industry. And perhaps it’s because the product we make is virtual, not physical – the materials we use are thoughts, not iron and leather. And, it’s also important to know that picking the right tools absolutely has an undeniable value proposition for your work. But the underlying truth is this: our constant shopping for new tools costs us that precious currency of time. The time you spend browsing the endless aisles of new programming libraries is time that could be spent becoming an expert craftsman, learning your existing toolset inside out.

I know, it’s a hard problem to solve. I know, it seems like not knowing about a particular tool or another might put you behind the ball. So I’m going to make a very clear distinction here:

I’m not saying to bury your head in the sand, and never investigate new tools. Some very smart, influential programmers recommend learning a new language every year. I don’t disagree; this keeps your brain sharp, and helps you stay aware in a constantly changing landscape. What I am saying is this: if you are constantly trying to master something new, you’ll never master anything. Instead, you should be consistently aware of new things, while focusing on mastering few things.

When to pick tools: 6 guidelines

Note: this is not a cohesive list of the only times you should pick tools, but it should give you some idea of how to think.



  • When you’ve got a problem that is proveably unsolvable or otherwise extremely inefficient to solve with current tools, especially if that problem has already been solved elsewhere. (If you’re a C programmer and you need to serve a webpage, it’s probably a good idea to learn about an existing tool like Apache instead of rewriting a web server in C.)
  • When switching provides undeniable and exponential long-term gains. For example, switching to a new text editor that will increase your productivity every moment you are using it (I did this recently by moving to vim).
  • When the tool is an easy win. Pick tools that are easy to adopt and provide obvious value without much investment.
  • Lest we be hacked, upgrade your tools when there are security vulnerabilities in that tool.
  • If You rely on your tool having adequate support or community involvement, it might be a good idea to choose a new tool when an old tool’s support or community become dormant. With that said, choose based on your values in the first place. If the community is an extremely important value to you in the long run, only choose to invest time into tools that have a thriving, vibrant, and committed community.
  • When the tool stacks well on your existing toolset. For example, if you have already learned HTML and CSS, it’s probably a good idea to learn JavaScript, as the gains you receive by learning JavaScript are naturally complemented and increased by your knowledge of HTML and CSS. Other stacks you could learn:
    • You know Assembler? Learn C.
    • You know PHP? Learn Laravel.
    • You know LISP? Try out emacs.
    • You know Ruby? Learn about Rack or mruby.
    • You know Objective-C? Look into Swift.
    • You know JavaScript? Learn about how Node/IO.js works.
    • You know Java? Learn about virtualization, or learn Scala.
    • You know Apache? Learn some Linux sysadmin basics.
  • Pro tip: Be certain that you differentiate your learning efforts from your tool-picking efforts. You might choose to learn a new language that doesn’t stack well with your current toolset, just to expand your brain’s ability to adapt and think in new patterns. This has value, even if you never use that language as an actual tool. This is the whole idea of code kata.

    5 step guide to picking tools

    1. Look at your materials (read: consumer devices, browsers, iOS APIs, your unique service offering, etc)
    2. Look at the available toolset (languages, frameworks, hardware, outsourced efforts)
    3. Imagine your product (you fill in the parentheses on this one)
    4. Pick the tools that can turn your materials into your product (make your best educated guess)
    5. Repeat every 2-3 years, keeping a majority of the tools you picked previously, and dropping only the ones that didn’t work so well.


    You use your toolset every day; it’s natural to want to refine that toolset. But changing your toolset constantly might mean that instead of spending time becoming a craftsman, you are just wasting your time constantly tool shopping. Learn to say no when your tools are perfectly capable of doing the job you need for them to do, and learn how to properly adopt new tools when the time and situation are right.