Book Report: The Hard Thing About Hard Things by Ben Horowitz

Executive summary: Read this if you enjoy self-aggrandizing stories about how to be successful when you start with $20 million in investment.

Buy it through this link and I’ll get a few pennies!

What I liked

There’s a story about how Horowitz was trying to sell his business and one buyer backed out. The second interested buyer heard the news about the first buyer backing out, and then revised their offer downward.

Horowitz didn’t accept the lower offer. He said the buyer had to stick with their initial offer. There was a standoff, but eventually the buyer went with the original price.

Also, there’s some good advice and analysis on what makes software sales effective.

What I disliked

This is a much bigger list.

First off

Ben Horowitz uses “she” and “her” when talking about hypothetical CEOs. It is jarring to read a sentence where obviously, Ben Horowitz is talking about himself in the abstract, but he uses “she” and “her” for pronouns.

You might think using “she” and “her” as default pronouns makes sense if you call yourself a feminist. And Ben Horowitz tells you right at the beginning how he’s donating profits from this book to a charity focusing on women.

But if you read between the lines of the book, Ben Horowitz is no feminist. Here’s a few examples:

  • As far as I can tell, there are literally no quotes from any women at all in the book.
  • Ben Horowitz is all about making his employees work lots of overtime. This is maybe not the top offender, but every survey I’ve read mentions this expectation as being unfriendly to women.
  • His own personal life follows an old-school pattern: his wife stays home with his children, while he works all the time. This is how he expects his employees to operate as well.
  • Take a look at who his investment firm writes checks to, and count the boy names and girl names. The ratio is at least 20 to 1.
  • Go spend a few minutes reading articles like this one, showing how so few women have any of the top positions.

In short, every time I read him use “her” and “she, I got pulled out of the narrative, and started arguing with him in my head.

For the record, not that anyone cares, I don’t call myself a feminist. Mostly because it’s a term that applies to such a broad group of ideas that it has become useless.

The next thing

He starts every chapter with some hip hop lyrics. Mostly irrelevant lyrics, too. There’s no tie back to the lyrics in the text.

This all reminded of that brilliant scene in Office Space, where the guy blasts Geto Boys on the way to his tech job, but when he’s stuck at a red light, he turns the music way down as a black guy walks by selling flowers.

That’s how I see Ben Horowitz every time he tries to say that he and Jay Z or he and Kanye have stuff in common.

Side note: I don’t understand how this guy listens to DMX and then also acts like he cares about womens issues. You’re gonna start your book with a DMX Lyric, right after you tell us how you’re donating all the profits to women’s causes? Really?

Third and last point

Ben Horowitz calls himself a wartime CEO. This really bugs me. We’re living in a time when real combat vets are having a terrible time re-integrating in society.

Horowitz doesn’t know the first thing about their struggles. He’s just playing GI Joe.

Business and war are different. Business involves negotiations and contracts and agreements.

War involves napalm falling on children, or laying siege to cities, or raping and pillaging innocents. That’s war. Ben Horowitz may be good at the game he plays, but he’s not a warrior.

Ben Horowitz is not a feminist, not black, and not a Navy SEAL, but he sure likes to think he’s all three. In my view, he is a typical “drink champagne for charity”, limousine liberal, massive hypocrite. He grabs phrases and images from other people to make himself look more enlightened, less a member of the elite, and more macho than he really is.

And if he wants to get in the ring with me any time, I’m game.

The Pareto principle (why some bugs are OK to ignore)

There’s this thing called the Pareto Principle, which says:

roughly 80% of the effects come from 20% of the causes

You can quibble about the specific number values. Maybe 80 and 20 aren’t exactly right. But as long as you have customers that aren’t perfectly evenly distributed across bugs, you should consider that maybe some of your bugs aren’t worth fixing.

Here’s a contrived example: Imagine you got a product XYZ, and you got 100 users. They’re all mad because of five bugs (bug A through bug E).

  • 80 of your users are mad because of bug A. (80% of 100)
  • 16 other users are mad because of bug B (80% of the remaining 20)
  • 3 users hate bug C (80% of the remaining 4 users)
  • User #100 filed two bug reports: D and E. He won’t be happy until both are resolved.

If you add up 80 + 16 + 3, you’re at 99 users. In other words, if you fix 3 out of 5 bugs, 99% of your customer base would be satisfied.

However, making that last customer happy is probably not worth it! You can satisfy 99% of your market by doing 60% of the required work.

Stop offering janky fixes

When doctors show up to work, they take time to wash hands thoroughly even if there are queued-up patients in critical status.

Meanwhile, us programmers deal with production bugs in the most expedient way possible. And usually that involves some janky fix and a comment like this:

# TODO: this won't work forever

and then we’re on to the next crisis.

We have to get better about this. Its fun to play the hero, and say we can fix everything right away, but in the end, we are digging our own graves.

This post is fueled by me cleaning up a mess caused by too many janky fixes all imploding simultaneously.

Last point: don’t blame your bosses and their unreasonable demands. Don’t expect them to understand the PROs and CONs. Simply do not offer any solution that makes the problem worse. We are the experts!

Going back to the doctor example, I’m sure the desperate patient would love to rush the doctor, because sure, 9 out of 10 times, their hands are probably clean enough, and if an infection does start, well, that’s what antibiotics are for.

But part of the reason why doctors are so revered and so well compensated is because they insist on being treated a certain way.

Ask a doctor for a “good enough” solution, or maybe ask how much would it cost if they don’t do it “the absolutely perfect” way, or any of the other lines your middle managers and sales people hit you with when trying whittle down your estimate.

Doctors will just stare at you like you’re an idiot. That’s what we need to start doing.

Postgresql: convert a string to a date or NULL

We’re working with some user-submitted text that we need to convert into dates. Most of the data looks correct, but some of it looks glitchy:


expiration_date
8/16
5/17
damaged
6/16

See that line with “damaged” in there? That will cause to_date to throw an error:

select to_date('damaged', 'YY/MM');
ERROR: invalid value "da" for "YY"
DETAIL: Value must be an integer.

So I wrote this function:

create or replace function dt_or_null (s text, fmt text)

returns date
as
$$
begin

return to_date(s, fmt);

exception
when others then return null;

end;

$$ language plpgsql;

And this is how it works:

select 'damaged', dt_or_null('damaged', 'YY/MM');
+----------+------------+
| ?column? | dt_or_null |
+----------+------------+
| damaged | |
+----------+------------+
(1 row)

My advice to new programmers looking to start their career

Your resume is probably pretty good, but you need to show you can build stuff beyond school assignments. You don’t need a job to do that though! Here’s my advice:

  1. Prove that you can build and maintain something without being supervised. Build some kind of web project in your free time and host it online on AWS or rackspace or my favorite, Linode. That link has my referral code in it, by the way 🙂

    Start with something as easy as possible. Don’t worry though — you will discover a ton of difficulties as you work through it. Your project can be anything:

    • a really simple recipe database
    • the most popular mens socks on Amazon
    • weather forecast for nearby cities

    At the bottom of every screen in that project, add a link to your github profile and your linkedin page, and put your email in there and say something like “I’m looking for work!”

    Once you’re done, pick a new project. Maybe rewrite the same thing in a different language. The point here is to make real things that regular people can interact with.

    Silly projects are likely to get more attention. For example, the KJV Programming tumblr site is hugely popular and doesn’t really do anything useful for anyone.

  2. Get involved with some volunteer programming work. In Cleveland, there are several groups of programmers that volunteer their time. Look at Cleveland Givecamp, for example, or Open Cleveland.

    Where ever you are, I bet there’s a group like this already. If not, start one!

    Or, just find an organization like a church or a club or a business that you like and offer to work with them to do something like set up a better website, automate some financial reports, or even just help them manage their facebook / instagram / twitter accounts.

    You will learn how to work with non-technical people this way. That is an important skill!

  3. Start a blog.

    Write tutorials for little things you figure out while building your projects. Write tutorials for stuff that you are learning in school, like recursion, or operator overloading in C++, or why you hate or love one language vs another.

    Write about the nonprofits or clubs or small businesses you’re working with.

    Practice writing clearly and succinctly.

    Read William Strunk’s The Elements of Style at least three times. It’s nearly a hundred years old and still the best writing guide out there.

    Publish what you do on twitter and reddit and hacker news and other places so you get more attention. Don’t waste a minute arguing with the haters though. Nobody cares about them.

    Add google analytics to your blog and study what posts attract the most attention.

  4. Go to as many technical meetups as you can and introduce yourself to people and tell them you are looking for work. Talk about what you are working on. Ask them where they work and if they like it and if they know of openings.

    If you’re anywhere near Columbus, Ohio, show up at PyOhio on July 30th and 31st and introduce yourself to as many people as you can. Maybe even do a 5-minute lightning talk on one of your projects — the sillier the project is, the better.

  5. Cold-call recruiters at companies like Robert Half, Oxford, Randstad, etc and tell them you’re looking for work. Ask them what skills are the most sought after.

    Learn those skills, and build projects with them, and then write out about it.

The point with all this stuff is to make yourself a programming celebrity. You don’t want to go looking for jobs — you want jobs to come to you.

Good luck on your quest!

Consider that you are lucky to live at a time where a few of us have vastly more upward economic mobility than ever before. It just takes effort.

Are you an animal or a human?

Review of Sora’s Quest by T. L. Shreffler

Wow. This is a good one.

Here’s a link to the book: http://amzn.to/1UmwKhE

I download several free ebooks every week. I start a lot and bail once I get bored or get angry that the writer is going with some tired-out cliche.

So I started Sora’s Quest in that frame of mind — looking for an excuse to delete this book.

And this book is a fantasy book, which is a genre filled with the worst crap. Especially at the free tier. Honestly, once self-published ebooks became a thing, petabytes of beastmaster erotic fan fiction burst out on the internet.

So, like I said, I wasn’t optimistic.

But the first chapter was pretty good. A guy discovers his brother has just been assassinated moments before. He uses some magic to track down the assassin that is making his escape.

Magic is to fantasy what time travel is to science fiction. It’s hard to pull off well! Skilled fantasy writers bring something novel to the mechanics of magic works. And they explain it just enough so I understand why people do what they do. But they keep the plot moving.

Unskilled writers forget that they’re on borrowed time. They shift from the story line to an exposition of their made-up metaphysics, and it just kills the momentum.

Or even worse, they use something blatantly yanked from elsewhere. That’s usually a sign I’m reading something like a book version of those horrible bar bands that cover currently popular songs.

But this author introduced magic in this world cleverly and succinctly. Blood magic requires sacrificing living things.

The magician catches up with the assassin, but the assassin turns out to be way more difficult to kill than expected, and the magician gets wounded in the fight while the assassin gets away. And the chapter ends with the magician swearing to avenge his brother’s murder.

The story hops in perspective to follow Sora, a 17-year-old noble lady, preparing for something like a society debut. Her mother disappeared when she was an infant and her dad is an aloof jerk, mostly interested in getting her to marry into a family that will improve his status.

Lily is Sora’s maid, and their relationship reminds me of the dynamics between the maids and the ladies in Downton Abbey.

Anyhow, the coming out ball begins, and then Sora performs her “blooming” dance, and then accidentally falls down, which is just an awfully embarrassing thing.

But then the skylight above the ballroom shatters, and her father is gravely injured. Sora realizes that this was no accident when she runs into an assassin in the hallway who is about to kill her, but then decides to take her with him as a hostage.

And that’s the end of the second chapter. I was hooked. And I was surprised by how much I liked this book. Every chapter after that pulled me in more. The story bounces between the magician tracking down his brother’s murderer, and Sora who has been kidnapped by that same assassin. The story starts off following the magician, and we sympathize with him wanting to avenge his brother. But then by switching to the perspective of the people he is hunting down, and by coloring them in enough, the reader ends up empathizing with that crew as well. It becomes clear that they have their own sense of morality that’s not so different after all, especially given their situation.

So it’s not clear who are the heroes and the villains. Everyone is just trying to survive.

And there’s a gorgeous twist at the 80% mark that I really enjoyed.

Here’s the thing I’ve noticed too often about female characters in the fantasy genre. They’re usually damsels in distress or basically Xena Warrior Princess ice cold commando types. They’re paper-thin characters that are completely predictable and unrelatable.

But Sora comes off (to me, at least) as real. And she evolves and adapts plausibly. She’s not a brat and she’s not a robot.

Last thing — the author clearly spent a ton of time daydreaming and constructing this world’s history. There are all sorts of little hints about it all. Humanity won some “war of the five races” thanks to using anti-magic devices, and the other races are now almostly extinct. I really liked how she described the old civilizations (spoiler: author is a girl).

I just bought the sequel to this one. It seems to follow the assassin and for the first time we get to see into his thoughts. He’s an opaque dead-eyed killer for most of Sora’s Quest, and I hoped we’d find out his back story.

Honestly, this is an exciting story in a fantasy world that’s different from the usual Tolkien-inspired elves and dwarves tropes we’ve all read a million bazillion times. And an interesting female character!

Mary Dunbar is the best candidate for Cleveland Heights Council

I’ll vote for Mary Dunbar tomorrow in the Cleveland Heights election.

Here’s why:

  • She actually replies to my emails! And it ain’t just me. You’ll see she engages with people often, online and in person. She’s the only candidate that showed up at Heights chicken coop tour, for example, and she wasn’t even in support of the legislation.
  • She’s passionate about improving our city’s walkability and bike infrastructure. This is one of the last advantages Cleveland Heights has. We need to guard this with our lives. You may not think that bicycling and pedestrian access is that big of a deal, but you are wrong times infinity. Getting people out of their cars and walking around instead has myriad positive effects.
  • She doesn’t promise anything grandiose. It’s so tempting to make grand sweeping statements and wild accusations or big promises or irresponsible rhetoric. You don’t see that coming from her.
  • Last point — this town skews too far into the progressive Democrat direction. We need an intelligent critique to prevent groupthink.

Beware the trap of the local optimum

Lots of problems look a little like this:

1-11. Local and global optima.

The Y-axis measures success at whatever problem you’re trying to solve.

You start at the farthest left point on the curve and you can move left or right a little bit every time you work on the problem.

After you make it to the top of the first hill, the only way to make it to the top of the second hill is by going down first.

In jujitsu, if I’m lucky enough to get to mount, my instinct is to camp out there. Maybe I can submit the other guy by sweating on him. I’m in a relatively safe position now, so I don’t want to take risks. In other words, I’m at the local optimum.

If I go for a submission like an arm bar, given my current skill level, my opponent will probably escape the mount, and I’ll be in a worse position afterward.

So in a self-defense situation, it might be smart to camp. The failure penalty is high!

But in class, because the cost of failure is so low (really, I just don’t get to feel like a badass when I tap out) I am wasting an opportunity to learn (and move to the right along the curve)!