Skip to main content

Quantitative Reasoning Interview Prep

Use this as an interview speaking guide, not as a formula sheet.

For almost every problem:

1. Clarify assumptions.
2. Identify the invariant or governing formula.
3. Solve symbolically.
4. Substitute numbers.
5. Sanity-check the result.
6. Explain the intuition.

1. Regular Hexagon: Find Side Length From Area​

Prompt​

Given the area A of a regular hexagon, find side length s.

Key idea​

A regular hexagon contains 6 equilateral triangles.

Area of one equilateral triangle:

triangleArea = (sqrt(3) / 4) * s²

Hexagon area:

A = 6 * triangleArea

A = (3 * sqrt(3) / 2) * s²

Solve for s:

s² = 2A / (3 * sqrt(3))

s = sqrt(2A / (3 * sqrt(3)))

JavaScript​

function hexagonSideFromArea(area) {
return Math.sqrt((2 * area) / (3 * Math.sqrt(3)));
}

Example​

const area = 54 * Math.sqrt(3);

console.log(hexagonSideFromArea(area));
// 6

Answer​

s = sqrt(2A / (3√3))

Sanity check​

Area ∝ side²

Therefore:

side ∝ sqrt(area)

That matches the formula.

What to say aloud​

A regular hexagon is six equilateral triangles. I write the triangle-area formula, multiply by six, and solve for the side length.


2. Why Is Summer Hotter Than Winter?​

Short answer​

Earth's axial tilt ≈ 23.5°

NOT primarily the Earth-Sun distance.

Two effects matter:

1. Sunlight hits the ground more directly.
2. Summer days are longer.

Incidence angle​

Suppose θ is the angle between sunlight and the vertical surface normal.

relativeIntensity = cos(θ)

JavaScript:

function relativeSolarIntensity(degrees) {
const radians = (degrees * Math.PI) / 180;
return Math.cos(radians);
}

Examples:

relativeSolarIntensity(0);
// 1.00

relativeSolarIntensity(30);
// 0.866

relativeSolarIntensity(60);
// 0.50

relativeSolarIntensity(75);
// 0.259

So at:

60° from vertical

cos(60°) = 0.5

The same incoming sunlight is spread across approximately twice the ground area.

Why summer gets even hotter​

Approximate daily solar energy:

dailyEnergy ≈ solarIntensity × daylightHours

Summer gets:

higher intensity
×
more daylight hours

The effects compound.

Important interview trap​

Earth is actually closest to the Sun around early January.

If Earth-Sun distance caused seasons:

Northern Hemisphere
and
Southern Hemisphere

would experience summer together.

They do not.

What to say aloud​

Seasons come from Earth's axial tilt. In summer, sunlight arrives closer to perpendicular, so more energy reaches each square meter, and the days are longer. The opposite hemisphere experiences winter at the same time, which is strong evidence that Earth-Sun distance isn't the main cause.


3. Two Spheres With the Same Density​

Prompt​

Two spheres are made from the same material.

The larger sphere has a diameter 50% larger.

The smaller sphere weighs:

8 lb

Find the larger sphere's weight.

Key idea​

Diameter scale:

k = 1.5

Volume scales with the cube of linear dimensions:

volumeRatio = k³

Therefore:

massRatio = 1.5³
= 3.375

Then:

largeMass = 8 × 3.375
= 27 lb

JavaScript​

const smallMass = 8;
const scale = 1.5;

const largeMass = smallMass * scale ** 3;

console.log(largeMass);
// 27

Answer​

27 lb

What to say aloud​

Same material means same density, so mass scales with volume. Sphere volume scales with diameter cubed. A 1.5× diameter therefore means 1.5³ = 3.375× the mass, giving 27 pounds.


4. How Much 1080p30 Video Fits on 1 TB?​

Prompt​

A 1 TB drive stores:

1920 × 1080 video
30 FPS

How many minutes fit?

First thing to say​

The problem is underspecified.

Resolution + FPS

does NOT determine compressed video size.

You need either:

bits per pixel

or

compressed bitrate

Ask:

Should I assume raw RGB video or a compressed bitrate?

Case A: Raw RGB​

Assume:

width = 1920
height = 1080
fps = 30
bytesPerPixel = 3
storage = 1 TB = 10¹² bytes

JavaScript​

const width = 1920;
const height = 1080;
const fps = 30;
const bytesPerPixel = 3;

const bytesPerFrame = width * height * bytesPerPixel;

const bytesPerSecond = bytesPerFrame * fps;

const driveBytes = 1e12;

const seconds = driveBytes / bytesPerSecond;

const minutes = seconds / 60;

console.log({
bytesPerFrame,
bytesPerSecond,
minutes,
});

Result:

bytes/frame ≈ 6.22 MB

bytes/sec ≈ 186.6 MB/s

duration ≈ 89.3 minutes

Answer for raw RGB​

≈ 90 minutes

Case B: Compressed Video​

General formula:

durationSeconds =
storageBits / bitrateBitsPerSecond

For 1 TB:

function videoMinutes(storageTB, bitrateMbps) {
const storageBits = storageTB * 1e12 * 8;

const bitrate = bitrateMbps * 1e6;

return storageBits / bitrate / 60;
}

Examples:

videoMinutes(1, 5);
// ≈ 26667 minutes

videoMinutes(1, 10);
// ≈ 13333 minutes

videoMinutes(1, 20);
// ≈ 6667 minutes

Interview lesson​

The most important observation is:

storage depends on encoding / bitrate

not just:

resolution × FPS

5. Drop a Dense Stone From a Boat Into Water​

Prompt​

A dense stone is initially sitting inside a floating boat.

You throw the stone into the water.

The stone sinks.

Does the pool water level:

rise
fall
stay the same

Answer​

FALL

Before​

While inside the boat, the stone causes the boat to displace water equal to the stone's weight.

displacedVolumeBefore =
stoneMass / waterDensity

After​

When the stone sinks, it displaces only its physical volume.

displacedVolumeAfter =
stoneMass / stoneDensity

Because:

stoneDensity > waterDensity

therefore:

stoneMass / stoneDensity
<
stoneMass / waterDensity

So:

after displacement
<
before displacement

Therefore:

water level falls

JavaScript representation​

const mass = 10;
const waterDensity = 1000;
const stoneDensity = 2500;

const before = mass / waterDensity;

const after = mass / stoneDensity;

console.log(after < before);
// true

What to say aloud​

In the boat, the stone causes displacement based on its weight. Once submerged, it displaces only its own volume. Since the stone is denser than water, its volume is smaller than the volume of water having the same weight, so the water level falls.


6. $1000 at 100% Interest for 20 Years​

Clarification​

Ask whether interest is:

simple

or

compounded

Usually assume annual compounding.

Formula​

futureValue =
principal × (1 + rate)^years

Here:

principal = 1000
rate = 1.0
years = 20

Therefore:

futureValue
= 1000 × 2²⁰

We know:

2²⁰ = 1,048,576

Therefore:

$1,048,576,000

JavaScript​

const principal = 1000;
const rate = 1;
const years = 20;

const amount = principal * (1 + rate) ** years;

console.log(amount);
// 1048576000

Answer​

≈ $1.05 billion

Interview concept​

This tests exponential growth.

At 100% annual interest:

money doubles every year

7. Randomly Choose a d6 or d8​

Setup​

Choose randomly between:

D6
D8

So:

P(D6) = 1/2
P(D8) = 1/2

Part A: Probability of Rolling a 3​

P(3 | D6) = 1/6

P(3 | D8) = 1/8

Total probability:

P(3)
=
P(D6) × P(3 | D6)
+
P(D8) × P(3 | D8)

Substitute:

= (1/2)(1/6)
+ (1/2)(1/8)

= 1/12 + 1/16

= 4/48 + 3/48

= 7/48

Answer​

7/48

Part B: Given a 3, Probability It Was the d6​

Bayes:

P(D6 | 3)
=
P(3 | D6) P(D6)
-----------------
P(3)

Substitute:

=
(1/6 × 1/2)
-------------
7/48

=
1/12
-----
7/48

=
4/7

Answer​

P(D6 | 3) = 4/7

P(D8 | 3) = 3/7

Part C: Expected Value of the Next Roll​

Expected d6:

E[D6] = (1 + 6) / 2 = 3.5

Expected d8:

E[D8] = (1 + 8) / 2 = 4.5

Using posterior probabilities:

E[next]
=
(4/7)(3.5)
+
(3/7)(4.5)

JavaScript:

const expected = (4 / 7) * 3.5 + (3 / 7) * 4.5;

console.log(expected);
// 3.928571...

Exact:

55/14

Approximate:

3.93

8. Probability the 13th Is a Friday​

Simple interview assumption​

If weekdays are uniformly distributed:

P(Friday) = 1/7

Approximate:

14.29%

Exact Gregorian Calendar​

The Gregorian calendar repeats every:

400 years

That contains:

400 × 12
= 4800 months

Friday occurs as the 13th:

688 times

Therefore:

688 / 4800
= 43 / 300
≈ 14.333%

Strong interview answer​

Assuming weekday alignment is uniform, the answer is 1/7. If you're asking for the exact Gregorian-calendar frequency, it's 43/300, or about 14.33%.


9. 3D Tic-Tac-Toe Winning Lines​

Important clarification​

For:

3 × 3 × 3

the answer is:

49

For:

4 × 4 × 4

with four cells required:

76

If the expected answer is 49, assume a 3×3×3 board.

Count 3×3×3 Winning Lines​

Axis-parallel​

Three directions:

x
y
z

Each has:

3 × 3 = 9

So:

3 × 9 = 27

Face diagonals​

6 faces
×
2 diagonals
=
12

Running total:

27 + 12 = 39

Middle-plane diagonals​

Three central planes:

xy
xz
yz

Each contributes:

2

Therefore:

3 × 2 = 6

Running total:

45

Space diagonals​

A cube has:

4

body diagonals.

Total:

27 + 12 + 6 + 4

= 49

Answer​

49

10. Distance From a Point to a Plane​

Plane:

Ax + By + Cz + D = 0

Point:

P = (x0, y0, z0)

Distance:

|Ax0 + By0 + Cz0 + D|
d = -----------------------------
sqrt(A² + B² + C²)

JavaScript​

function pointToPlaneDistance(point, plane) {
const { x, y, z } = point;
const { A, B, C, D } = plane;

const numerator = Math.abs(A * x + B * y + C * z + D);

const denominator = Math.sqrt(A ** 2 + B ** 2 + C ** 2);

return numerator / denominator;
}

Intuition​

(A, B, C)

is the plane's normal vector.

The formula measures how far the point extends along that perpendicular direction.


11. Estimate Earth-Moon Distance​

Useful rough value:

≈ 384,400 km

Interview estimate:

≈ 4 × 10⁵ km

Fermi approach​

Earth radius:

≈ 6400 km

Moon distance:

≈ 60 Earth radii

Therefore:

60 × 6400
=
384,000 km

JavaScript​

const earthRadius = 6400;
const earthRadiiToMoon = 60;

console.log(earthRadius * earthRadiiToMoon);

// 384000

Light-time sanity check​

Speed of light:

≈ 300,000 km/s

Therefore:

384,000 / 300,000
≈ 1.28 seconds

12. Expected Number of Times max Changes​

Consider:

let max = -Infinity;

for (const value of values) {
if (value > max) {
max = value;
}
}

Suppose values is a random permutation of n distinct values.

How many times does max update on average?

Key observation​

At position i, the current element becomes the new maximum if it is the largest among the first i elements.

Each of those i positions is equally likely to contain that maximum.

Therefore:

P(update at position i) = 1/i

Expected updates:

E =
1
+ 1/2
+ 1/3
+ ...
+ 1/n

This is the harmonic number:

Hn

Approximation:

Hn ≈ ln(n) + 0.577

JavaScript​

function expectedMaxUpdates(n) {
let result = 0;

for (let i = 1; i <= n; i++) {
result += 1 / i;
}

return result;
}

For one million:

expectedMaxUpdates(1_000_000);
// ≈ 14.39

Approximation:

Math.log(1_000_000) + 0.57721;
// ≈ 14.39

Answer​

E = Hn ≈ ln(n) + γ

Interesting intuition:

1,000,000 values

but max changes only
≈ 14 times on average.

13. Buffon's Needle​

Setup​

Parallel lines are separated by:

D

Needle length:

L

Assume:

L <= D

Probability of crossing a line:

P = 2L / (πD)

If:

L = D = 1

then:

P = 2/π
≈ 0.637

JavaScript​

function buffonProbability(length, spacing) {
return (2 * length) / (Math.PI * spacing);
}

buffonProbability(1, 1);
// ≈ 0.63662

Important correction​

For the standard Buffon's Needle problem:

L = D

P = 2/π

not:

1/π

Short intuition​

For an angle θ, crossing occurs when the center is close enough to a line:

distanceToLine
<=
(L / 2) × sin(θ)

Average this over all orientations and positions, giving:

2L / (πD)

14. Match a Small 2D Point Set Inside a Larger Set​

Problem​

Given:

small template S

large target T

Allowed transformation:

rotation
+
translation

No scaling.

Find the best alignment.

Case A: Correspondence Is Known​

Suppose:

p[i] ↔ q[i]

We want:

q[i] ≈ R × p[i] + t

where:

R = rotation
t = translation

Algorithm:

1. Compute source centroid.
2. Compute target centroid.
3. Center both point sets.
4. Solve optimal rotation.
5. Compute translation.

Translation:

t = targetCentroid
- R × sourceCentroid

Rotation can be found with:

SVD
Kabsch algorithm

Case B: Correspondence Is Unknown​

This is harder.

Rotation and translation preserve:

distances
angles

Use those properties to generate candidate matches.

Strong architecture​

Small Template
│
▼
Compute invariant features
distances / angles
│
▼
Find candidate pairs
inside large target
│
▼
Infer rotation + translation
│
▼
Transform template
│
▼
KD-tree / spatial hash lookup
│
▼
Count matching points
│
▼
RANSAC best candidate
│
▼
Optional ICP refinement

RANSAC​

Useful with noise and outliers.

1. Pick candidate anchors.
2. Infer transform.
3. Transform template.
4. Count inliers.
5. Repeat.
6. Keep best transform.

Pros​

robust to outliers
easy to parallelize
easy interview explanation

Cons​

probabilistic
may require many iterations

ICP​

Iterative Closest Point:

initial transform
↓
nearest neighbors
↓
solve rigid transform
↓
repeat

Pros​

excellent local refinement

Cons​

can converge to local optimum
needs decent initialization

Interview recommendation​

Invariant matching
→ RANSAC
→ KD-tree verification
→ ICP refinement

15. Seattle Rain + Three Friends​

Setup​

Probability of rain:

P(R) = 0.25

Probability of no rain:

P(!R) = 0.75

Each friend tells the truth with probability:

2/3

All three independently say:

"It's raining."

Find:

P(rain | all 3 say rain)

If it actually rains​

Each tells the truth with probability:

2/3

All three say rain:

(2/3)³
=
8/27

If it does not rain​

Each must lie:

1/3

All three say rain:

(1/3)³
=
1/27

Bayes calculation​

Compare weighted likelihoods.

Rain:

P(R) × P(YYY | R)

= 1/4 × 8/27

= 8/108

No rain:

P(!R) × P(YYY | !R)

= 3/4 × 1/27

= 3/108

Normalize:

P(R | YYY)

= 8 / (8 + 3)

= 8/11

Answer​

8/11 ≈ 72.7%

JavaScript​

const rain = 0.25 * (2 / 3) ** 3;

const noRain = 0.75 * (1 / 3) ** 3;

const posterior = rain / (rain + noRain);

console.log(posterior);
// 0.72727...

16. Packing Equal Circles on an Infinite Plane​

Clarify the problem​

If circles may overlap and the question is simply:

Can circles cover the plane?

then:

100%

is possible.

But if the intended question is:

What is the maximum fraction of the plane occupied by equal, non-overlapping circles?

then this is the hexagonal circle-packing problem.

Result​

Maximum density:

π / (2√3)

Equivalent:

π / √12

Approximate:

0.9069

or:

90.69%

JavaScript​

const density = Math.PI / (2 * Math.sqrt(3));

console.log(density);
// 0.906899...

Intuition​

Optimal centers form a triangular / hexagonal lattice:

○ ○ ○

○ ○

○ ○ ○

This packs circles more densely than a square grid.


17. 4×4 Grid of Points: How Many Squares?​

Assume:

4 × 4 lattice of points

16 total points

Count:

axis-aligned
+
rotated squares

Axis-Aligned Squares​

1×1​

3 × 3 = 9

2×2​

2 × 2 = 4

3×3​

1 × 1 = 1

Total:

9 + 4 + 1
= 14

Rotated Squares​

There are:

8

valid rotated squares.

Therefore:

14 + 8
= 22

Answer​

22 squares

Probability Four Random Points Form a Square​

Number of ways to choose 4 points from 16:

C(16, 4)

JavaScript:

function combination(n, k) {
let result = 1;

for (let i = 1; i <= k; i++) {
result *= (n - i + 1) / i;
}

return result;
}

console.log(combination(16, 4));
// 1820

There are:

22

sets that form squares.

Therefore:

P = 22 / 1820

Simplify:

11 / 910

Approximate:

1.21%

18. Find the Pattern in Number of Edges​

The referenced image is missing, so the exact sequence cannot be solved.

But this is the framework to use.

Step 1: Write the sequence​

E1, E2, E3, E4, ...

Step 2: First differences​

ΔE1 = E2 - E1
ΔE2 = E3 - E2
...

If constant:

linear sequence

En = an + b

Step 3: Second differences​

If first differences are not constant:

calculate second differences

Constant second difference often means:

quadratic

En = an² + bn + c

Step 4: Prefer structural counting​

Instead of guessing a numeric pattern:

total edges
=
edges introduced
-
shared edges

Example: squares arranged in a row.

First square:

4 edges

Every additional square shares one side and therefore adds:

3 new edges

So:

En
=
4 + 3(n - 1)

=
3n + 1

JavaScript​

function edgesForSquaresInRow(n) {
return 3 * n + 1;
}

Fast Review Sheet​

┌─────────────────────────────┬─────────────────────────────────────────┐
│ Problem │ Key Answer │
├─────────────────────────────┼─────────────────────────────────────────┤
│ Regular hexagon │ s = sqrt(2A / (3√3)) │
│ Summer vs winter │ axial tilt + incidence angle + day │
│ Sphere 50% larger diameter │ 8 × 1.5³ = 27 lb │
│ 1 TB 1080p30 │ need bitrate; raw RGB ≈ 89 min │
│ Stone from boat │ water level falls │
│ $1000 @ 100% for 20 years │ $1,048,576,000 │
│ P(roll 3 with d6/d8) │ 7/48 │
│ P(d6 | rolled 3) │ 4/7 │
│ Expected next die roll │ 55/14 ≈ 3.93 │
│ Friday the 13th │ ~1/7; exact Gregorian = 43/300 │
│ 3×3×3 tic-tac-toe │ 49 winning lines │
│ Point-plane distance │ |Ax+By+Cz+D| / √(A²+B²+C²) │
│ Earth-Moon distance │ ≈ 384,400 km │
│ Expected max updates │ Hn ≈ ln(n) + γ │
│ Buffon's Needle L=D │ 2/π ≈ 0.637 │
│ Point-set matching │ RANSAC + KD-tree + ICP │
│ Seattle rain │ 8/11 ≈ 72.7% │
│ Hex circle packing │ π/(2√3) ≈ 90.69% │
│ 4×4 lattice squares │ 22 │
│ P(4 points form square) │ 11/910 ≈ 1.21% │
└─────────────────────────────┴─────────────────────────────────────────┘

Interview Strategy​

For a quantitative problem, say your reasoning in this order:

Clarify
↓
Find invariant / formula
↓
Solve symbolically
↓
Substitute values
↓
Check units
↓
Check magnitude
↓
Explain intuition

Strong Clarification Examples​

Video storage​

Resolution and frame rate don't determine compressed storage by themselves. Should I assume raw RGB or a specific bitrate?

Circle problem​

Do you mean covering, where circles may overlap, or packing equal non-overlapping circles?

Tic-tac-toe​

I'll assume this is a 3×3×3 board where three aligned cells win, since that corresponds to 49 winning lines.

Interest​

Should I assume the 100% interest compounds annually?


High-Value Concepts​

1. Scaling Laws​

Length:

L → kL


Area:

A → k²A


Volume:

V → k³V


Mass at constant density:

m → k³m

Memorize:

50% bigger diameter

does NOT mean

50% heavier.

Instead:

1.5 ** 3;
// 3.375

2. Bayes' Theorem​

Conceptually:

posterior
∝
likelihood × prior

Full formula:

P(A | B)
=
P(B | A) × P(A)
----------------
P(B)

Useful mental model:

Prior
↓
Evidence likelihood
↓
Reweight possibilities
↓
Normalize
↓
Posterior

3. Expected Value​

For discrete values:

E[X]
=
Σ value × probability

Example:

function expectedValue(outcomes) {
return outcomes.reduce((sum, { value, probability }) => sum + value * probability, 0);
}

4. Linearity of Expectation​

Extremely useful:

E[X + Y]

=

E[X] + E[Y]

Independence is not required.

This is why the expected-max-update problem is easy:

E[updates]

=
P(update at 1)
+
P(update at 2)
+
...
+
P(update at n)

5. Harmonic Numbers​

Hn
=
1 + 1/2 + 1/3 + ... + 1/n

Approximation:

Hn ≈ ln(n) + 0.577

Examples:

Math.log(1_000) + 0.577;
// ≈ 7.48

Math.log(1_000_000) + 0.577;
// ≈ 14.39

Math.log(1_000_000_000) + 0.577;
// ≈ 21.30

Huge input sizes can therefore still produce surprisingly small harmonic expectations.

6. Geometry Formulas Worth Knowing​

Equilateral triangle​

A = √3 / 4 × s²

Regular hexagon​

A = 3√3 / 2 × s²

Sphere​

V = 4/3 × πr³

Point-to-plane​

|Ax0 + By0 + Cz0 + D|
d = -----------------------------
√(A² + B² + C²)

7. Circle Packing​

Maximum equal-circle packing density:

π / (2√3)

≈ 0.9069

≈ 90.69%

Think:

hexagonal / triangular lattice

not:

square grid

8. Buffon's Needle​

For:

L <= D

probability of crossing:

P = 2L / (πD)

Special case:

L = D

P = 2/π

≈ 63.7%

Common Interview Traps​

Trap 1: Linear vs Cubic Scaling​

Wrong:

diameter +50%
→
mass +50%

Correct:

diameter ×1.5
→
mass ×1.5³
→
mass ×3.375

Trap 2: Calculating Before Clarifying​

Bad:

1080p30
→ immediately calculate disk usage

Better:

"What bitrate or encoding should I assume?"

Interviewers often intentionally leave information out.

Trap 3: Weight vs Volume Displacement​

Stone inside boat:

displacement based on weight

Stone underwater:

displacement based on physical volume

That distinction determines the answer.

Trap 4: Forgetting Bayesian Updating​

Before observing a 3:

P(D6) = 1/2
P(D8) = 1/2

After observing a 3:

P(D6 | 3) = 4/7
P(D8 | 3) = 3/7

The probabilities changed because a 3 is more likely on the smaller die.

Trap 5: Trusting the Supplied Answer​

If an interview prompt says:

Buffon's Needle answer = 1/π

do not blindly accept it.

Standard assumptions give:

2/π

State your assumptions and derive the result.


60-Second Mental Math Sheet​

√3 ≈ 1.732

π ≈ 3.14

2/π ≈ 0.637

1/π ≈ 0.318

ln(10) ≈ 2.303

2¹⁰ = 1024 ≈ 10³

2²⁰ = 1,048,576 ≈ 10⁶

Useful scaling:

1.5² = 2.25

1.5³ = 3.375

2³ = 8

10³ = 1000

Useful physical values:

Earth radius
≈ 6400 km

Earth → Moon
≈ 60 Earth radii
≈ 384,000 km

Speed of light
≈ 300,000 km/s

Earth → Moon light time
≈ 1.28 sec

Final Interview Cheat Pattern​

When you see a math or physics question, think:

┌─────────────────────┐
│ What is unspecified?│
└──────────┬──────────┘
↓
┌─────────────────────┐
│ What stays invariant?│
└──────────┬──────────┘
↓
┌─────────────────────┐
│ What scaling law or │
│ formula applies? │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ Solve symbolically │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ Plug in numbers │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ Check units and │
│ order of magnitude │
└──────────┬──────────┘
↓
┌─────────────────────┐
│ Explain intuition │
│ in one sentence │
└─────────────────────┘

The goal is not just:

get the answer

The goal is to demonstrate:

clarification
+
modeling
+
reasoning
+
sanity checking
+
clear communication