On the same day this article came out about Linus Torvalds, the founder and BDFL of Linux

Screenshot 2018-09-28 11.47.11

I had the occasion to apologize to someone I work with. The parallels between Linus’s story on my own struck me (although everything about his story is much larger compared to mine): we both lead technical, remote teams that principally communicate in writing. And we both can have the tendency to forget how much of an impact our words can have when we fire them into the ether.

In short, I had been an asshole, and it was time for me to apologize.

I’ll never understand why people don’t apologize, and apologize directly. I think it’s one of the most underutilized skills and behaviors in the world. Everyone is human; everyone makes mistakes; everyone hurts other people, intentionally or unintentionally. If you don’t take responsibility for it, those transgressions accumulate and eventually people (even the people you’re closest with) will no longer want to have anything to do with you. If you do, then not only do you reset the relationship, but you can actually build a stronger one by signaling that you’re willing to accept some humble pie for the sake of the relationship — that it matters that much to you. There’s a very big in results between the two behaviors and it just doesn’t compute to me why people don’t see that and can’t bring themselves to say they’re sorry.

Relatedly, Sorry Watch is a pretty funny blog that analyzes public apologies (e.g. by celebrities and corporations) and savages wishy-washy non-apologies.



I’ve struggled with on-and-off insomnia my whole life. Sometimes I can’t fall asleep. Sometimes I can’t stay asleep. For months at a time, I will sleep normally, and hope that the issue is behind me. Then, out of nowhere, or sometimes out of somewhere, insomnia will come roaring back. For a week, or sometimes weeks at a time, I will barely sleep. The thought of “it’s bedtime, time to get into bed” fills me with anxiety because I know that tonight ain’t it. Only when I finally build up a ton of sleep pressure do I know that things will sort themselves out. I just got out of a major insomnia streak, but last night things reverted. Here’s hoping they revert back quickly.


Textbooks are great.

Although I have some training in statistics and machine learning, for the most part I’m completely self-taught. A big part of that teaching has been to buy a great textbook on a given subject and to follow along until I really understood the subject. Coursera, YouTube, Stack Overflow, tutorials on the internet, etc are great, but textbooks are excellent too, and I think they are underutilized. Especially since there is a mental categorization of “that’s for when you’re in school” that people fall into.

It was at business school that I started doing some serious data science that my addiction to buying textbooks started. Right now I’m working through Design and Analysis of Experiments with R since Gradient is doing more (and more complex) survey-based experiments (I think at this very moment we are running four discrete choice experiments for clients)

Screenshot 2018-09-26 08.57.41

I’ll be honest, this one is a bit of a slog. But getting experimental design right is crucial for successful projects so I’m working through it; I’ve had a few a ha moments already — like why they’re called “orthogonal” designs.

Most of the textbooks I use are written to work with R, although not all. Some of the textbooks that go into my hall of fame are:

How we think about hiring

Gradient is growing, and we need to hire. We are kicking off our process this week. It’s funny, along with sales, how to hire well is one of those crucial, practical things they don’t teach you in business school. We have been sort of flying by the seat of our pants each time when we run this process.

In our typical fashion, we decided we would try thinking things through and doing them a bit differently. For our last process, we decided very early on that we would not think about defining a “role” and finding someone that could be slot into that. I basically don’t believe in defined roles for knowledge-work. The whole idea is that it’s something that requires creative thought, so how can you predict in advance what will be needed?

Anyway, even if defined roles make sense elsewhere, work at Gradient is far too fluid for it to work with us. We all need to pitch in on all areas of the business: building statistical models, hooking up our CRM system to our email system, evaluating different AWS servers, and so on.

So the way we did it last time was to define a whole bunch of

  • Experiences (projects or models they had built in the past that were synonymous with what we do)
  • Skills (things they know how to do, from statistical modeling to server management and so on)
  • Traits (most importantly: do they want to work remotely?)

And give each of them a weight. People that had a bunch of highly-weighted attributes were more attractive to us than people that did not, simple as that. We even automated a large part of this process, having interested candidates take a survey that gave us a score. Take it here, if you’re interested — although consider this one obsolete.

I think that for the next hire, we’ll follow a similar process. It maps well to my mental model of how our company works and worked very well for us last time.


Thinking in Prolog

I’ve been having a lot of fun working on a side project written in Prolog, which is a logical programming language. It has been incredibly difficult to wrap my mind around how it works but I’m getting there, and I can see that “there” is a pretty powerful place. It makes me wonder why this paradigm isn’t used for more applications.

It turns out (you may already know this if you write code) that programming languages work very differently depending on which paradigm they use.

From Wikipedia:

Common programming paradigms include:

  • imperative in which the programmer instructs the machine how to change its state,
    • procedural which groups instructions into procedures,
    • object-oriented which groups instructions together with the part of the state they operate on,
  • declarative in which the programmer merely declares properties of the desired result, but not how to compute it
    • functional in which the desired result is declared as the value of a series of function applications,
    • logic in which the desired result is declared as the answer to a question about a system of facts and rules,
    • mathematical in which the desired result is declared as the solution of an optimization problem

I’ve found functional programming to be so intuitive and object-oriented (probably the most common paradigm today) to be so counterintuitive that I almost always write my programs in a functional style.

In a logic program, you write down a set of facts and rules. That’s it. That’s your program. And then you run the program by asking it if it can find a solution to a new query.

Prolog in particular is built around a type of logical statement called a Horn clause that basically reads “X is true if Y and Z are true”. In Prolog that would look like:

X :- Y, Z.

A more complete program (but still tiny) program would look like:

food(sandwich). % declaring a fact that sandwich is a food
drink(water). % declaring that water is a drink

meal(X, Y) :- food(X), drink(Y).
% X and Y (variables) make a meal if X is a food & Y is a drink

When you run this program, you’ll get:

?- meal(X, Y).
X = sandwich,
Y = water.

That’s a toy example, but you can see how quickly the complexity could build up with ever-more relationships and so on. I’m working on writing a program to solve the common wedding-seating problem where you have a set number of tables, people you want to sit next to each other, and people that you want to sit at different tables. It’s fun.

The space of things you can write

This morning I was reminded of a few tweets by Francois Chollet, a machine-learning researcher and practitioner who is the lead on Keras, the most popular deep learning library.

These thoughts have stuck with me.

This morning, I read Fred Wilson’s post celebrating fifteen years’ of writing on his blog, AVC.Reading it, I wondered the degree to which Fred has benefited from the discipline of expressing his thoughts in a precise, unlimited, and permanent form.

I’ve been missing that. Twitter has replaced writing for me — I agree with Brian Norgard’s take that Twitter’s change to 280 characters was the final death blow to blogging (if Google killing Reader was the pummel of body blows that knocked it down)

But if writing is self-directed, Twitter is a to-do list of things to think about or react to created by other people (if, done well, created by a very select group of other people that you’ve chosen and refined over time).

Putting it all together, I miss writing and spend too much time on Twitter. So it’s time to restart this thing. Should be fun.