Why You Need a Rubber Duck

You need a rubber duck. Allow me to explain.

It turns out that identifying, describing, and solving problems is really difficult, possibly the most difficult type of thing we humans do. And it’s not only knowledge work, high-paying, or credential-required jobs that require this work. To get a feel for this, try explaining, step-by-step, without leaving anything out, a daily activity—say, tying your shoelaces—to a small child. We take much more knowledge and context for granted than we realize, and so our explanations are almost never as good and clear as we like to think.

In the world of software development, we have a concept called “rubber duck debugging.” The idea is simple: when you get stuck on a problem, try to explain it to a rubber duck. Explain how you got to where you are, what your code is doing, what it should be doing, and what is going wrong. If you can explain it so that the rubber duck, if it were human, would understand what you’re saying and would be able to help you solve the problem, then you’re really stuck and need help. But if you can’t explain it clearly to the rubber duck, or if the rubber duck wouldn’t be able to understand what you’re telling it, then you don’t understand the problem yet and need to rethink it.

But the real key is this: you’re not actually trying to help that rubber duck understand the problem. Instead, you’re helping yourself to understand the problem, because 99% of the time you will find your solution simply by trying to explain it clearly and in detail to a patient but totally ignorant listener.

Confession time: I don’t use a rubber duck. I use a blue elephant (actually an elePHPant, a mascot for the PHP programming language). His name is Fomnium (my pre-schooler’s idea; no idea where she got that). And he has patiently listened to me articulate any number of problems in code, law, and life. He’s surprisingly good at helping me solve those problems.

Okay, so maybe you don’t need a rubber duck. Maybe you need a blue elephant or something else that suits your personality. In any case, I highly recommend that you start talking to inanimate objects. They can be great listeners.

On Good Deeds and Deficient Character

I don’t know who needs to hear this, but you can’t determine that someone has good character because they’ve done some good things, been kind to someone, prayed for someone, etc. Character is about patterns of doing the right thing over time with consistency and integrity.

We’re all sinners. Even those with the best character can and do engage in awful behavior sometimes. But those with good character display a consistent interest in “doing right” in all areas of life and remedying their wrongs.

And terrible people can do wonderful things, often while displaying the greatest refinement and class and while seeming humble and self-sacrificing. But those with bad character use these things to mask or offset the evil they commit, to make it easy for others to look away.

But good deeds don’t offset bad ones. It doesn’t work that way. If someone was nice to you—or even is consistently nice to you—but makes a pattern of being a jerk to everyone else, slandering, abusing people, covering for abusers, and so on, that’s not a person with good character who made mistakes. That’s a bad person.

You can’t say, “X has great character but needs to stop beating their kids,” or “X has great character but needs to stop constantly, verbally abusing strangers,” or “X has great character but needs to stop [insert illegal or immoral pattern of behavior here].” Okay, you could say that, but it would demonstrate a lack of character and judgment on your part to do so. No one who sees you papering over such things can or should assume that you are a safe person. You’d be an enabler and apologist for evil and thus become complicit.

When we lose the ability to call out evil deeds, we become complicit. If your friend is a horrible person and you don’t speak up when others need to hear from you because your friend is your friend, you now own that person’s character defects and have blessed them.

Civility is important. Respect is important. Decency, kindness, and charity are important. But none of those virtues excuses silence in the face of evil, much less enforcing others’ silence in the face of evil. That’s complicity and says to the victims of an evil person, “The harms that my friend did to you matter less than the good reputation of my friend.” Don’t be that person.

Originally posted on Twitter.

On Being a Former Lawyer and Having the Right Coach

It’s impossible to overstate how valuable it is to have someone in your corner who “gets it” when you’re in a role that doesn’t make you happy. I’ve been incredibly blessed to have my wife, Sarah Cottrell, in my corner throughout my career. As many of you know, we met in law school, and we both practiced at the same large firm at the starts of our careers. She then went through a couple of other legal jobs, ultimately practicing for ten years before leaving the law entirely.

What you may not know is that Sarah has started a business, Former Lawyer, helping unhappy lawyers ditch their jobs and find careers and lives that they love. I may be biased, but I can’t recommend her enough as a coach and cheerleader for anyone in that situation.

You can check out Sarah’s website, podcast, newsletter, and YouTube channel by visiting the Former Lawyer website.

Career Change

I have major personal news: March 18 was my last day of practicing law! As of yesterday, I am now a Legal Engineer at Ironclad, the leading digital contracting and contract lifecycle management platform. I’m really excited about the platform, the people, the culture, and the wonderful opportunity to fully utilize my backgrounds in software development and in law!

Ironclad, Inc. logo

I’ve been an attorney since 2008, and I first started thinking about law school in early 2004, so a huge percentage of my adult life has centered on the law. I’ve had a lot of great experiences studying law, becoming an attorney, and being an attorney. Many of the cases I’ve worked on have been extremely important and deeply satisfying. Many of the people I’ve worked with are warm, kind, brilliant, and incredibly talented people whom I call mentors and friends to this day. And being an attorney has profoundly shaped how I think and live in the world; many of those changes are good.

Unfortunately, I also found the practice of law very draining. Many cases are not ultimately terribly satisfying, and much of the work is not fulfilling. The always-on nature of firm practice, the fact that the standard for literally everything that goes “out the door” is perfection, and the realities of how the profession operates have been mentally and emotionally exhausting. For all the good experiences I had in my thirteen-year-plus legal career, I also had many negative experiences with frankly toxic personalities and environments. It was not healthy for me physically or mentally, and it was time for a change.

I’m very excited about this next step in my career.

How to Disable Remote Content in Junk Mail Folders in the MacOS Mail App

I just spent a whole afternoon trying to figure out how to get the stock MacOS Mail app to show images automatically except in the Junk folder(s). I finally got it, so I’m sharing my results for anyone else who would benefit from this.

Note: this solution depends on the app Keyboard Maestro, which I use heavily in my daily workflow.

The Mail Preferences pane (under “Viewing”) gives the option to “Load remote content in messages” or not, regardless of the folder. (By default, it hides remote content, including images, in mail the app itself considers junk, but that is pretty limiting and will not play nicely with any external spam filtering.)

There did not appear to be any built in AppleScript support for changing this option without interacting with the preferences pane, but it turns out there is; it’s just not officially documented. The option is called download html attachments in AppleScript. So, all you need is a couple of if actions to figure out whether to toggle the setting and a few lines of AppleScript to toggle it when necessary.

Here’s my macro:

Note: one piece of this got cut off, namely the text in the second if condition. The text that got cut off is:

^(General|Accounts|Junk Mail|Fonts & Colors|Viewing|Composing|Signatures|Rules)$

This prevents the setting from changing just because you have the Preferences open.

I hope this helps somebody else! Feedback is welcome.

%d bloggers like this: