When a character attempts an action that is risky or unsure, the GM will call for a roll. They name an Attribute, an Ability, and a Difficulty. The Player rolls a number of ten-sided dice (d10s) equal to the sum of their Character's ratings in the named Attribute and Ability. Each die that lands on a number equal to or greater than the Difficulty is considered a success. The Player adds up how many successes they scored. A die showing '1' is called a "botch" and subtracts a success. A die showing a '10' is called a "double" and is worth two successes instead of one. The total number of successes is called the Outcome and determines the result.
GMs should not reference the above visualization at game-time when calling for a roll. If a roll must be made, default to the standard Difficulty of 6 (or the weapon's Difficulty for an attack). If the context of the action seems like it would significantly affect the odds, add or subtract one or two Difficulty as desired.
When the you as the GM call for a roll, you are entering an agreement with the Player about how to determine the action's Outcome. Notice that botches, partial successes, and exceptional successes all allow the GM to determine the specifics of the outcome. A partial success (the most common Outcome) can be anything from a near-failure to a success with a complication. Players should never feel cheated. A complete success is a complete success.
This system gives the GM more control game during the standard play. However, during Combat-- when Contractors' lives are on the line-- the GM's discretion is greatly reduced. Partial and exceptional successes have specific outcomes determined by the Combat rules. This makes The Contract's quick, deadly Combat more tactical and fair.
The Contract's Design Philosophy de-emphasises advancement through dice bonuses and Difficulty modifiers. Dice bonuses from multiple sources do not stack. This means that dice pools remain relatively small. Beyond 12 dice, consider success a near-certainty even on high Difficulty rolls.
Dice pool probabilities that account for botches (and doubles) seem fairly difficult to calculate, but it is essentially a standard multinomial distribution problem. See this Github repo for the exact code used to generate the probabilities. There may be some very slight abnormalities resulting from rounding and computers' difficulty encoding fractional values.