Book Notes: Never Split the Difference by Chris Voss

Published on: 2016-11-26

I highlight and take notes when I read nonfiction books. Once I finish a book, I format and edit my notes so that I can easily remind myself of what I learned without having to reread the book. These notes are not a substitute for reading the book, they only serve as a reminder of key concepts.


Regardless of all of these techniques, you always have to stay emotionally cool or none of them will work. Let knee-jerk reactions pass and pause in silence instead.

“Contrary to popular opinion, listening is not a passive activity. It is the most active thing you can do.”

“Good negotiators, going in, know they have to be ready for possible surprises; great negotiators aim to use their skills to reveal the surprises they are certain exist.”

You have to stay open minded about a negotiation — best to “[hold] multiple hypotheses” to better understand where someone is coming from.

“Most people approach a negotiation so preoccupied by the arguments that support their position that they are unable to listen attentively.”

“The goal is to identify what your counterparts actually need…and get them feeling safe enough to talk and talk and talk some more about what they want.”

“There are essentially three voice tones available to negotiators: the late-night FM DJ voice, the positive/playful voice, and the direct or assertive voice.” You should use the positive/playful voice majority of the time. Rarely use the assertive. FM DJ voice is downward inflecting and says you are in control.

“While mirroring is most often associated with forms of nonverbal communication, especially body language, as negotiators a “mirror” focuses on the words and nothing else. Not the body language. Not the accent. Not the tone or delivery. Just the words.”

Paraphrasing what the other person just said is another form of mirroring.

“By repeating back what people say, you trigger this mirroring instinct and your counterpart will inevitably elaborate on what was just said and sustain the process of connecting.”

“The results were stunning: the average tip of the waiters who mirrored was 70 percent more than of those who used positive reinforcement.”

Label how someone is feeling — this will make them feel listened to as well as make them continue to talk — either because you labelled their emotions accurately or you purposefully did not.

“In every negotiation, in every agreement, the result comes from someone else’s decision. And sadly, if we believe that we can control or manage others’ decisions with compromise and logic, we’re leaving millions on the table.”

“Saying “No” gives the speaker the feeling of safety, security, and control. You use a question that prompts a “No” answer, and your counterpart feels that by turning you down he has proved that he’s in the driver’s seat.”

“Gun for a “Yes” straight off the bat, though, and your counterpart gets defensive, wary, and skittish”

“That’s why I tell my students that, if you’re trying to sell something, don’t start with “Do you have a few minutes to talk?” Instead ask, “Is now a bad time to talk?” Either you get “Yes, it is a bad time” followed by a good time or a request to go away, or you get “No, it’s not” and total focus.”

“Sometimes, if you’re talking to somebody who is just not listening, the only way you can crack their cranium is to antagonize them into “No.” One great way to do this is to mislabel one of the other party’s emotions or desires.”

“Another way to force “No” in a negotiation is to ask the other party what they don’t want. “Let’s talk about what you would say ‘No’ to,””

The best way to get a response to an email — send a question that you know the response will be no: “Have you given up on this project?”

Don’t strive for “yes” in negotiations — yes means someone is agreeing with you just to finish negotiating. Strive for “that’s right”, where someone is truly agreeing with you.

Use pauses to encourage people to keep talking. Can also use phrases like “Yes,” “OK,” “Uh-huh,” or “I see”.

Use paraphrasing + labeling to try and get a “that’s right”.

NEVER compromise/split the difference: “To make my point on compromise, let me paint you an example: A woman wants her husband to wear black shoes with his suit. But her husband doesn’t want to; he prefers brown shoes. So what do they do? They compromise, they meet halfway. And, you guessed it, he wears one black and one brown shoe. Is this the best outcome? No! In fact, that’s the worst possible outcome. Either of the two other outcomes — black or brown — would be better than the compromise. Next time you want to compromise, remind yourself of those mismatched shoes.”

“We don’t compromise because it’s right; we compromise because it is easy and because it saves face. We compromise in order to say that at least we got half the pie. Distilled to its essence, we compromise to be safe. Most people in a negotiation are driven by fear or by the desire to avoid pain. Too few are driven by their actual goals.”

Don’t think that any negotiation has a deadline — rarely are deadlines hard set.

Acknowledge the other person’s fears all up front: “”I got a lousy proposition for you,” I said, and paused until each asked me to go on. “By the time we get off the phone, you’re going to think I’m a lousy businessman. You’re going to think I can’t budget or plan. You’re going to think Chris Voss is a big talker. His first big project ever out of the FBI, he screws it up completely. He doesn’t know how to run an operation. And he might even have lied to me.””

Make them feel like they have something to lose: ““Still, I wanted to bring this opportunity to you before I took it to someone else,” I said. Suddenly, their call wasn’t about being cut from $2,000 to $500 but how not to lose $500 to some other guy.”

“Instead of saying, “I’m worth $110,000,” Jerry might have said, “At top places like X Corp., people in this job get between $130,000 and $170,000.””

If you can’t negotiate money, start negotiation other things: vacation, work hours, etc…

When talking numbers, use precise ones — $102,378 instead of $100,000 — it makes it seem like you’ve done a calculation.

If negotiating salary, establish success criteria — next time you will then able to negotiate for an even higher salary when you prove that you did well.

Calibrated questions: “queries that the other side can respond to but that have no fixed answers. It buys you time. It gives your counterpart the illusion of control — they are the one with the answers and power after all — and it does all that without giving them any idea of how constrained they are by it.”

Most of the time, calibrated questions use “how”, “what”, and sometimes “why”.

“Another simple rule is, when you are verbally assaulted, do not counterattack. Instead, disarm your counterpart by asking a calibrated question.”

“When someone’s tone of voice or body language does not align with the meaning of the words they say, use labels to discover the source of the incongruence”

Try to get the other person to commit to you three times. After the first commitment, try summarizing (paraphrase + label) to get the second commitment, and then try calibrated (“how”,”what”) questions about success criteria to get the third commitment.

The first time they agree to something or give you a commitment, that’s №1. For №2 you might label or summarize what they said so they answer, “That’s right.” And №3 could be a calibrated “How” or “What” question about implementation that asks them to explain what will constitute success, something like “What do we do if we get off track?”

“At the front counter the young lady asked me if I wanted to join their frequent buyer program. I asked her if I got a discount for joining and she said, “No.” So I decided to try another angle. I said in a friendly manner, “My name is Chris. What’s the Chris discount?” She looked from the register, met my eyes, and gave a little laugh. “I’ll have to ask my manager, Kathy,” she said and turned to the woman who’d been standing next to her. Kathy, who’d heard the whole exchange, said, “The best I can do is ten percent.””

If you are pushed to go first to name a price, allude to what some other high-end client would pay “Harvard business school would pay $20,000 for my services”.

The Ackerman model of bargaining: 1. Set your goal price 2. Make your first offer 65% of goal 3. use empathy and different ways of saying no until the other side counters and increase your offer each time to 85%, 95%, and eventually 100% of goal 4. make the final amount not-round $23,768 instead of $24,000 — maybe the non-round figure is all you have in the bank! 5. At the final offer, offer a non-monetary item to prove you are at your limit.

“A more subtle technique is to label your negative leverage and thereby make it clear without attacking. Sentences like “It seems like you strongly value the fact that you’ve always paid on time” or “It seems like you don’t care what position you are leaving me in” can really open up the negotiation process.”

“But the moment when we’re most ready to throw our hands up and declare “They’re crazy!” is often the best moment for discovering Black Swans that transform a negotiation. It is when we hear or see something that doesn’t make sense — something “crazy” — that a crucial fork in the road is presented: push forward, even more forcefully, into that which we initially can’t process; or take the other path, the one to guaranteed failure, in which we tell ourselves that negotiating was useless anyway.”

Thanks for reading. You might also enjoy following me on Twitter.

Want to learn even more SQL?

Sign up for my newsletter to receive weekly SQL tips!

XmlReader vs XmlDocument Performance

Published on: 2016-11-24

Running C# Tests for Code Performance

Recently I have been working on a project where I needed to parse XML files that were between 5mb and 20mb in size. Performance was critical for the project, so I wanted to make sure that I would parse these files as quickly as possible.

The two C# classes that I know of for parsing XML are XmlReader and XmlDocument. Based on my understanding of the two classes, XmlReader should perform faster in my scenario because it reads through an XML document only once, never storing more than the current node in memory. On the contrary, XmlDocument stores the whole XML file in memory which has some performance overhead.

Not knowing for certain which method I should use, I decided to write a quick performance test to measure the actual results of these two classes.

The Data

In my project, I knew what data I needed to extract from the XML up front so I decided to configure test in a way that mimics that requirement. If my project required me to run recursive logic in the XML document, needing a piece of information further down in the XML in order to know what pieces of information to pull earlier on from the XML, I would have set up an entirely different test.

For my test, I decided to use the Photography Stack Exchange user data dump as our sample file since it mimics the structure and file size of one my actual project’s data. The Stack Exchange data dumps are great sample data sets because they involve real-world data and are released under a Creative Commons license.

The Test

The C# code for my test can be found in its entirety on GitHub.

In my test I created two methods to extract the same exact data from the XML; one of the methods used XmlReader and the other XmlDocument.

The first test uses XmlReader. The XmlReader object only stores a single node in memory at a time, so in order to read through the whole document we need to usewhile(reader.Read()) in order to loop all of the nodes. Inside of the loop, we check if each node is an element that we are looking for and if so then parse out the necessary data:

On the other hand, the code for XmlDocument is much simpler: we load the whole XML file into memory and then write a LINQ query to find the elements of interest:

After writing these two methods and confirming that they are returning the same exact results it was time to pit them against each other. I wrote a method to run each of my two XML parsing methods above 50 times and to take the average elapsed run time of each to eliminate any outlier data:

Results and Conclusions

Cutting to the chase, XmlReader performed faster in my test:

Performance test results.

Now, is this ~.14 seconds of speed difference significant? In my case, it is, because I will be parsing many more elements and many more files dozens of times a day. After doing the math, I estimate I will save 45–60 seconds of parsing time for each set of XML files, which is huge in an almost-real-time system.

Would I have come to the same conclusion if blazing fast speed was not one of my requirements? No, I would probably go the XmlDocument route because the code is much cleaner and therefore easier to maintain.

And if my XML files were 50mb, 500mb, or 5gb in size? I would probably still use XmlReader at that point because trying to store 5gb of data in memory will not be pretty.

What about a scenario where I need to go backwards in my XML document — this might be a case where I would use XmlDocument because it is more convenient to go backwards and forwards with that class. However, a hybrid approach might be my best option if the data allows it: if I can use XmlReader to get through the bulk of my content quickly and then load just certain child trees of elements into XmlDocument for easier backwards/forwards traversal, then that would seem like an ideal scenario.

In short, XmlReader was faster than XmlDocumet for me in my scenario. The only way I could come to this conclusion though was by running some real world tests and measuring the performance data.

So should you use XmlReader or XmlDocument in your next project? The answer is it depends.

Thanks for reading. You might also enjoy following me on Twitter.

Want to learn even more SQL?

Sign up for my newsletter to receive weekly SQL tips!

Coffee’s Variety Problem

Published on: 2016-11-14

How to Get Your Hands on the World’s Best Coffee Beans

Freshly roasted coffee beans from central Mexico.

Spaghetti Sauce Origins

During the 1970s consumers had a limited number of spaghetti sauces that they could purchase at their local supermarket. Each store-bought sauce tasted the same, developed in test kitchens from the average flavor preferences of focus groups.

During this time, Prego brand spaghetti sauce was new to the market and was having a difficult time competing against the more established spaghetti sauce brands like Ragu. Prego tasted the same as all of the other brands so capturing loyal customers from other brands was a challenge.

Struggling to become competitive, Prego brought on board Howard Moskowitz. Today some consider Moskowitz the godfather of food-testing and market research, but during the 1970s Moskowitz’s beliefs on product-design were contrary to the mainstream establishment. Moskowitz believed that using the average preferences of focus groups to develop a product lead to an average tasting spaghetti sauce: acceptable by most, loved by none.

Instead of giving focus groups similar tasting sauces, Moskowitz decided to test the extremes: have groups compare smooth pureed sauces with sauces that have chunks of vegetables in them, compare mild tasting sauces with ones with lots of spice, and so forth.

The results of this type of testing may seem obvious today, but at the time they were unheard of: people prefer different kinds of spaghetti sauce. It was better for a food company to have a portfolio of niche flavors rather than try to make one product that appealed to everybody.

Today spaghetti sauce no longer has a variety problem.

After all of this initial research Prego made Extra-Chunky spaghetti sauce, which instantly became a hit with all of the people who prefer a thicker type of tomato sauce. In the years since, spaghetti sauce manufactures have caught on to the technique and supermarket shelves today are lined with regular, thick and chunky, three-cheese, garlic, and many other types of sauces that appeal to a wide-array of consumer flavor preferences.

Coffee’s Variety Problem

Coffee today has the same problem that spaghetti sauce did a quarter-century ago.

The average supermarket’s coffee aisle may look like it has a wide variety of choices: whole beans versus ground coffee versus coffee pods, arabica versus robusta beans, caffeinated versus decaf, medium versus dark roast, etc…

However, once you take a look at what coffee a particular individual may drink — let’s say whole bean, medium-roast caffeinated arabica beans -the amount of variety found at a super market is surprisingly small, maybe only 2 or 3 different types.

The limited selection for whole bean, medium roasted coffee at my local super market.

Additionally, it is nearly impossible to know how long the coffee has been sitting unsold on the shelves, it’s difficult to find a variety of coffee from different geographic regions around the world, and only if you are extremely lucky can you find a coffee that has been lightly roasted.

Independent coffee shops, especially those that roast their own coffee, offer slightly better options in terms of variety, however they come at a steep price: it is not unusual to see these coffees selling for $16-$28 per pound.

I understand these small-batch roasters experience higher costs due to lack of scale, availability of beans, and a slowly developing market to third-wave premium coffee, however paying $20 for a pound of coffee beans (or even worse, the standard 12oz bag) is not something I can justify doing regularly.

This is what caused me to set out on my quest to get premium quality coffee beans at an affordable price.

The Internet Cafe

While the internet offers advantages in buying premium roasted coffee beans, there are still issues with unknown freshness and high prices, especially when the cost of shipping is included.

Shipping costs and price per pound can be reduced when buying in bulk, but buying in bulk means I’ll have roasted beans sitting around for a long time before being consumed, therefore affecting freshness and taste. Short of finding friends who want to split a large coffee order, buying roasted coffee beans online isn’t a great option.

What is a great option is buying green, or un-roasted, coffee beans. The shelf life of green beans is up to one year if stored properly and green beans are significantly cheaper than roasted beans because there is less processing involved.

Green, un-roasted coffee beans.

Not only are green beans fresher and cheaper, there is significantly more variety available. Commercial roasters need to buy beans in large quantities in order to be able to sell to coffee shops and supermarkets. This means they are sourcing coffee beans from large commercial farms that are able to supply such a large amount of coffee beans.

If we buy green beans for personal consumption at home, the number of farms that we can buy from is hugely expanded since we only need to buy in small quantities. A farm that only produces a few hundred pounds of beans each year is now within our grasp since commercial roasters would never be able to purchase from them.

There are many retailers online that cater to the home roasting market. My favorite is http://sweetmarias.com and they always have a huge selection of premium beans from all over the world, many for under $6/pound.

Home Roasting

Roasting beans at home used to be the norm in the early nineteenth century. Roasting coffee beans is similar to making popcorn and can be done over a fire, in a stove, or in the oven. While these methods work, they are messy and involved. Fortunately, cleaner and more scientific options exist.

Commercially available home roasters are one such option, however they cost several hundred to thousands of dollars — well out of my price range.

The most easily obtainable and easy to use home coffee roaster is an electric air-powered popcorn popper. These retail for between $15–$25 new. If you decide to try this route, get one without a mesh screen on the bottom.

Once you have an air popcorn popper, roasting coffee beans is as easy as pouring them in, turning on the heat, and waiting until they turn the brown color you are accustomed to seeing.

Although roasting beans can be as easy as turning on the popcorn popper and waiting until the beans reach a desired color, there is a scientific rabbit hole that roasting geeks like me eventually wander down…

Home Roasting 2.0: Web Roast

When I first started roasting coffee beans at home, I started with the air popper method. I soon wanted to start experimenting more with how to make the process more automated, as well as how I could become more precise and play with different variables in order to change the flavors of my roasted coffee.

There are some mods you can make to a regular air popcorn popper to give you more control in how your roast your beans, but ultimately I wanted more control.

I present to you, Web Roast:

The home-made, Internet of Things (IoT) coffee roaster.

The finished project with all code can be found on my project’s GitHub page: https://github.com/bertwagner/Coffee-Roaster/

Essentially, this is still an air popper but with much more control. The key features include:

  • Air temperature probe
  • Ability to switch the fan and heat source on/off independently
  • Holding a constant temperature
  • Automatic graphing of roast profiles
  • Ability to run saved roast profiles

Now instead of standing at my kitchen counter turning the air popper on and off, holding a digital temperature probe, and shaking the whole roaster to circulate and cool the beans between “on” cycles, I can simply control all of these conditions from my iPhone.

Screen shot of the web app user interface.

From my phone I decide when to heat the beans, when to maintain a certain temperature, how quickly or slowly to hit certain roasting stages or “cracks”, and logging to make sure I can reproduce results in future runs.

Beans develop different flavors based on how quickly or slowly they go through different phases of roasting. Some beans might be better suited for quick roasts that will maintain acidic fruit flavors. Other beans might need to be roasted more slowly to bring out nutty and cocoa flavors. The moisture content of a bean will also have an effect on roasting times, as well as beans that are sourced from different regions of the world.

Next Steps

Although I’m extremely satisfied with how my roaster has turned out, there’s still a lot on the to-do list.

I’m currently adding functionality to save roast profiles, so after an initial run of desired results, reproducing those results for the same batch of green beans is easy.

In the future, I’d like to build a second, bigger drum-style roaster for being able to roast larger batches at a time.

Follow my Github coffee roaster project page to keep up with any future updates. Also I would love to hear from anyone who has built similar projects of their own.

Good luck and happy roasting!

Thanks for reading. You might also enjoy following me on Twitter.

Want to learn even more SQL?

Sign up for my newsletter to receive weekly SQL tips!