Just tackle the problem

There’s a moment when a programming problem engulfs me. Perhaps it’s exciting and intriguing, maybe it’s weird and infuriating, maybe it’s close to a deadline and stressing me out. Whichever it is, I’m not so great at managing that intensity.

I can’t handle adult responsibilities. Any external demands on my time are met with impatience. My thoughts drift to the problem when I’m not otherwise occupied. I get on my own case about why it’s not solved, festering a negative feedback loop of feeling bad about not having solved it yet and then feeling worse about not having solved it yet.

I am able to step away from it a little bit. Go grab food, spend some limited time with my wife or dogs. It doesn’t fully engulf me. But I can’t detach myself from it.

It’s not frustrating that I get excited or perturbed by my programming work. It’s frustrating that I let it stress me out, to negatively effect my life even if only for a short time. Especially that it’s spurious, that I don’t need to stress out over it. My code’s not going to endanger lives, yet.

The best coping tactic I’ve come up with, so far, is to tackle the problem. Don’t go stew on the circumstances of the problem. Maybe take that moment away to pet a dog and release some stress. Then, find a solution that fits the time and context of the problem so I can get back to thinking clearly about work and life.

Sometimes, I get lucky and the solution to the problem presents itself.

What is the future of loving cars?

To me, a great car is equal part shape, technology, sound, and history. It seems like the future of cars is all technology at the expertise of all other factors. What will it mean to love cars over the next ten years?

A well shaped car is defined by function. A long hood accommodates an engine running the length of the car and not between the wheels. Aerodynamic surfaces, not too many please, keep the car pressed to the road. The shape of the car is further of a function of air inlets to cool all the moving parts. Once all that is done, you can think of the form, getting just the right balance of smooth curves and straight lines.

Future cars are likely to move toward aerolumps. Drag is always the enemy of cars, doubly so for anything seeking efficiency. But the form needed to accommodate moving parts (read: combutions engines and their support infrastructure) will go away. You’re left with just a bubble holding the passengers. Not inspiring.

The sound of future cars is the sound of air running over the car and tires meeting the road. You may hear the occassional whine of an electric motor, perhaps an artifical soundtrack inspired by old combustion engines. No more growls, burps, and high-rev screams.

When all this sorts out, some companies will have a more interesting product due to their use of technology. A lot of companies will have a more boring but practical product. We will surely say, “they don’t make them like they used to” because literally, of course, they won’t.

But what will we find to love about how cars are built and function? Will that fade as a historical note while we revel in the agency a personal car brings without some of the external costs of highways, parking lots, and petrofuels?

Levels of musical genius

I often think about what kind of unique musical talent some performer I enjoy possesses. A few examples:

  • J-Dilla was at the center of many groups doing amazing things creating an exciting moment in time, but at the same time was a master composer himself
  • Prince or Quincy Jones were often running multiple performers and groups, serving as sort of the well from which their respective musical ideas came from
  • Tom Petty isn’t particularly gifted technically and doesn’t write ground-breaking songs but is very, very good at working within a specific form and genre, one of the best in that space
  • Jimmy Page is not musically the best or most innovative, but very adept at the style he created for himself, is technically a good guitarist
  • Pete Townsend holds a group together, is the glue that leads a group of virtuosos, somehow the master creator and craftsperson who runs the group with a solid hand without making it all about him
  • Brian Wilson plays a whole ensemble, a studio as an instrument, micromanaging every detail to produce a sublime musical whole; Bruce Springsteen is close to this
  • Bob Dylan or Leonard Cohen are excellent wordsmiths who get great results when the music around them is also pretty good
  • Annie Clark is a guitar-shred-meister who runs with the avant-alt mantle set forth by The Talking Heads
  • Merrill Garbus builds amazing lo-fi layered music of incredible stylistic range that sounds right at home on the festival circuit

The connection amongst these individuals is more than playing their instruments or writing their songs. They’re working a level above that, whether it’s Tom Petty and Jimmy Page making fine-tuned rock or J-Dilla, Prince, and Merrill Garbus micromanaging a subgenre into existence. I’m a little envious of that level of musical acumen.

Four parks, one day

Four parks, one day

In January, Courtney and I went to Disney World for her birthday. We bought an annual pass last year, so we’ve literally been a few times over the past year. This time ’round, Courney wanted to visit all four parks in one day. Our Official Rules were we had to ride two rides (or see a show and do a ride), drink a boozy drink, and eat a dessert in each park. We made it!

We had a few other days to enjoy the park at a more leisurely pace. We did a Safari tour at the Animal Kingdom resort, which afforded opportunities for giraffe selfies. I got to take lots of pictures and enjoy Epcot and Tomorrowland, my favorites. Along the way, we ate a bunch of ice cream and sang along with “Let It Go” nearly every day.

As ever, a magical time.

Protect the beginner’s mind

Someone joins your team. They have a beginner’s mind about your project and culture.

Take a person with beginner’s mind, tell them about how things have always been, how they got that way, and insist we just try to keep that status quo? That’s a shame.

When you harness a beginner’s mind, you have a short window to make the most of their new perspective. After a while, it becomes the team or culture’s perspective. Opportunity lost.

Put a person with beginner’s mind in a room with someone who knows All the Reasons. If they survive, you have just created a ton of learning for both people.

Protect the beginner’s mind. Listen to it. Act on it.

The right way and the practical way

Brent Simmons, Reason Number 33,483 to Hate Programming:

Or I could have the superclass expose the appIsTerminating property in its header file, so that the subclass could see it. This also sucks, because a controller class has no business exposing its own copy of global application state.

In the end, though, that’s what I did. (Along with a comment that the property was there for subclasses.)

It reminds me that there are two competing values:

  1. Do everything the right way every time.

  2. Make responsible and professional decisions about time and expenses and benefits and drawbacks.

My nature is to take path #1. It is so hard for me to take path #2. I have the utmost respect who can work on sprawling, modern software and stay on path #2. But path #1, always pulling me in and sending me down rabbit holes.

Sometimes I wonder which of these paths got me to where I am in my career. Others, I wonder if I think I’m a everything-the-right-way person but really I’m a responsible-and-professional-tradeoffs person.

A brain’s a weird place to live.

Contrast NYC and SF

Dallas and Austin are the cities I’ve spent my life in. I’ve spent maybe three weeks of my life, total, in San Francisco and New York City. They’re similar in that SF and NYC are both a Whole Other Thing in comparison to my Texan expectations. Indeed, they’re global cities operating at an entirely different order of magnitude.

It’s long puzzled me why I find NYC less intimidating and strange than SF. I’m starting to think its the attitudes. Walking through either town, I frequently suspect that I’m Doing It Wrong, from where to eat to where to sleep to how to use the subway.

In NYC, I suspect the natives are looking on as I struggle to hail a cab or catch a train, but they are silent in their snickering about me doing it wrong.

SF feels much more in your face, eager to tell you “You have done it wrong and you should feel bad”, from the subway systems to the tech bubble.

San Francisco very much remains a frontier town. You move there to make your fortune, to burn bright and “compress your career into several years”. It’s at the same time fractured by law (the city has three different transit systems, all using different tokens last time I visited) and lawless (Uber and Airbnb in particular are about landgrabs before the law can catch up with technology). It’s at once a global city and embarrassingly self-centered.

In summary, I guess I just like Texas a lot better. Even after our awful lawmakers.

Framework and Library people

By unscientific survey, I think many developers would prefer to work in a “framework world” where many decisions of principle and organization are passed down by a vendor or architecture team. Think Rails/Django/Laravel for backends, Ember/Elm for frontends, Unity for games. These are the Framework people.

Fewer developers would prefer to create their own world, building up tools and libraries to suit. They select a few first principles and build their own world. They’re the bebop jazz musician, eschewing big band gigs and music people can dance to to create their own intellectual world. These are the Library people.

I’m a Framework person. The allure of Library people sometimes tempts me after I look at a beautifully-restored car or a well-structured song. But constructing a library world is thankless and not particularly high leverage, unless you succeed in creating something for framework people. Weird, eh?

Execution and idea in Frontierland

It’s commonly held, and pretty much true, that ideas are shallow and execution is depth. That is, the former is nothing without lots and lots of the latter.

Let’s set aside how “execution over ideas” is used as a bludgeon for a moment. I think there’s possibly a case where “execution AND idea” is a viable recipe for success.

If you’re in a Wild West, converting the minimal version of the idea to an executed offering can be all you need to succeed. Temporarily.

If you’re always moving from emerging market to emerging market, you’re betting not on your ability to execute, but your ability to identify the next market. You’re OK with fast followers building on your idea, iterating on it, and establishing themselves as the market matures. That’s OK, because you’ve already moved on to the next market.

So the risk here isn’t execution, but idea/market selection. When you’re first, it’s slightly OK to ship with a product that will be viewed as laughable once the market is mature. 75% idea, 25% execution.

When you’re second, seventh, or seventeenth, you had better execute on the idea, the business, and the culture you build. It’s 95% execution, 5% idea.

Empathy Required

Nearly fourteen years ago, I graduated college and found my first full-time, non-apprentice-y job writing code. When I wrote code, these were the sorts of things I worried about:

  • Where is the code I should change?
  • Is this the right change?
  • What are the database tables I need to manipulate?
  • Who should I talk to before I put this code in production?

Today, I know a lot more things. I did some things right and a lot of things wrong. Now when I write code, these are the sorts of things I worry about:

  • Am I backing myself into a corner by writing this?
  • Why was the code I’m looking at written this way and what strategy should I use to change it?
  • Will this code I just wrote be easy to understand and modify the next time I see it? When a teammate sees it?
  • Should I try to improve this code’s design or performance more, or ship it?

Half of those concerns are about empathy. They’re only a sampling of all the things I’ve learned I should care about as I write code, but I think the ratio holds up. As I get better and better at programming, as my career proceeds, I need more empathy towards my future self and my teammates.

Further, that empathy needs to extend towards those who are less experienced or haven’t learned the precise things I’ve learned. What works for me, the solutions that are obvious to me, the problems to steer clear of, none of that is in someone else’s head. I can’t give them a book, wait three weeks, and expect them to share my strengths and wisdoms.

That means, when I advise those who listen or steer a team that allows me to steer it, I have to make two camps happy. On one hand, I have to make a decision that is true to what I think is important and prudent. On the other hand, I have to lay out guidelines that lead the listener or teammate towards what I think is important or prudent without micromanagement, strict rules, and other forms of negative reinforcement.

It’s so easy, for me, to just hope that everyone is like me and work under that assumption. But it’s much better, and highly worthwhile, to figure out how to help friends and teammates to level up on their own. It requires a whole lot of empathy, and the discipline to use it instead of impatience. Worth it.