Data ScienceSalary, offers and pay mechanics

Comparing Two Offers Over Three Years, Not One

PK
Pankit Kumar
Sr. Data Scientist at Parexel (a Goldman Sachs–backed company) · 27 September 2026 · 5 min read
In this article (6 sections)

Related programme: the Data Science course (6 months; ₹1,30,000 (inclusive of GST) · EMI from ₹5,000/month).

The short answer

To compare two offers properly, project the after-tax cash from each for three years, not just the first. Include fixed pay, an assumed annual raise, the variable at the payout you expect, and any joining bonus. In the hypothetical below, Offer B pays ₹38,016 more in year one because of its joining bonus. Offer A pays ₹48,455 more over three years, and ₹1,92,353 more if neither variable pays out. The deciding input turns out to be B's promised raise.

The two offers

All figures are illustrative. Use the break-up from your own offer letters.

Offer AOffer B
Fixed pay, year one₹18,00,000₹16,00,000
Variable target10% of fixed15% of fixed
Joining bonusnone₹2,00,000 in year one
Raise you assume from year two8% a year12% a year

Assume the variable pays out at 80% of target in each year. Employee PF is ₹36,000 a year in both, since basic is above the ₹25,000 EPF wage ceiling in each case. Tax uses the new-regime slabs for tax year 2026-27 (1 April 2026 to 31 March 2027) in all three years, as explained in the FAQ. The rates are on the department's slab page. To keep the arithmetic readable, each employment year is treated as one tax year.

Year by year

YearA grossA cash after PF and taxB grossB cash after PF and tax
1₹19,44,000₹17,27,248₹19,92,000₹17,65,264
2₹20,99,520₹18,49,145₹20,07,040₹17,77,176
3₹22,67,482₹19,73,437₹22,47,885₹19,58,935
Three-year total₹55,49,830₹55,01,375

B's joining bonus puts it ahead in year one. It falls behind in year two, when the bonus is gone and a 12% raise on ₹16,00,000 still leaves fixed pay ₹1,52,000 below A's. By year three, B's faster raises have nearly closed the gap, but not the cumulative one.

The joining bonus is taxed as salary: under section 18(1)(b)(i) of the Income-tax Act, 2025_Bill.pdf), a sum received before joining is profits in lieu of salary. That is why B's year-one tax is higher than A's even though its fixed pay is lower. If B's bonus has a clawback, a year-one exit also gives part of it back; joining bonus clawback prices that.

The projection in code

python
# Hypothetical offers. Tax year 2026-27 rates applied to every year.
def tax_2026_27(ti):
    t, lo = 0.0, 0
    for hi, r in ((400000, 0), (800000, .05), (1200000, .10), (1600000, .15),
                  (2000000, .20), (2400000, .25), (float("inf"), .30)):
        t += max(0, min(ti, hi) - lo) * r
        lo = hi
    return 0.0 if ti <= 1200000 else round(min(t, ti - 1200000) * 1.04)

def project(fixed, raise_pct, var_pct, payout, joining=0, years=3, pf=36000):
    total = 0
    for y in range(1, years + 1):
        f = round(fixed * (1 + raise_pct) ** (y - 1))
        gross = f + round(f * var_pct * payout) + (joining if y == 1 else 0)
        cash = gross - pf - tax_2026_27(gross - 75000)
        total += cash
        print(y, f, gross, cash, total)
    return total

a = project(1800000, .08, .10, .8)
b = project(1600000, .12, .15, .8, joining=200000)
print("A minus B:", a - b)

# What raise would B need to tie A over three years?
lo, hi = 0.0, 0.5
for _ in range(60):
    mid = (lo + hi) / 2
    if project(1600000, mid, .15, .8, 200000) < a:
        lo = mid
    else:
        hi = mid
print("break-even raise for B:", round(hi * 100, 2), "%")

The last loop prints every trial year, which is noisy but harmless. Remove the print inside project if you only want the totals.

Stress-test the inputs, not just the totals

A three-year total hides which assumption carries it. Change one at a time:

ChangeThree-year result
Base case aboveA ahead by ₹48,455
Neither variable pays anythingA ahead by ₹1,92,353
B's raise is 8%, the same as A'sA ahead by ₹2,21,921
B's raise is 13.1%roughly a tie

The break-even raise of about 13.1% is the useful output. If Offer B's recruiter says raises "are usually good", you now have a specific question: is a raise above 13% a year, three years running, realistic in that company? Offer A's result depends much less on its variable, because its variable is a smaller share of pay. When the variable is taken away, A's lead grows rather than shrinks.

Questions to put to each employer

The projection turns vague reassurance into a few checkable questions. For Offer A: when is the first salary review after joining, and is it on fixed pay alone? For Offer B: what share of people received the full variable last cycle, and is the joining bonus paid in the first month or later? If an answer changes an input, rerun the script. The point of a model is that it is cheap to redo.

What the projection leaves out

  • Employer PF, gratuity and insurance. They are real value, but they are not cash in these three years. If the two offers differ here, list them beside the totals rather than adding them in.
  • Equity. Stock with a vesting schedule needs its own timeline and tax point. ESOP vs RSU timing covers that separately.
  • Risk you cannot put a number on. A higher raise promised by a younger company is less certain than a lower one from a company with a long review history. The stress test shows how much of your decision rests on that promise.

Building a small model, then varying one input at a time to find what drives it, is ordinary sensitivity analysis. It runs through the modelling work in our Data Science programme, taught live online with optional in-person labs at our Noida centre.

Frequently asked questions

Why use tax year 2026-27 rates for years two and three?

Because later rates are not known yet. Using one set of rates for every year keeps the comparison fair between the two offers, even though the absolute figures will move when new rates are announced.

Where do the raise assumptions come from?

From you. Ask each employer how increments work and when the first review falls, and use a cautious figure. The projection is only as good as that input, which is why the article tests it.

PK
Pankit Kumar
Lead Instructor, NeuraPath Academy

Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.

This article is part of our Data Science programme — 6 months. From data foundations to machine learning, deep learning and deployment.

Explore Data Science
Counselling is free · no obligation

Not sure which programme fits?

Tell us your background and we will map it to the right entry point — including saying so when a cheaper programme is the better fit. A counsellor replies within one working day.