Skip to content

Engineering degrees: the full working

Everything behind the engineering numbers — how the population was defined, how the age window was chosen, what every figure means, and how large the sample is at each step. Written slowly and in order, because every number here is downstream of a choice that had to be made explicitly.

The general rules live in METHOD.md; this note is engineering worked end to end.


PLFS calendar_2025, first visit only, weighted by weight_annual.

Filter Value Effect
gedu_lvl = '12' “Literate: graduate” Completed a UG, has not completed a PG. '13' is “postgraduate and above” and is excluded.
tedu_lvl = '03' “Technical degree in engineering/technology” Degrees only. Engineering diplomas ('08', '13') are a separate bucket.
age 21–34 The working-age range for this analysis.

Sample: 4,734 people, representing 5.42 million.

Two things this definition does deliberately.

Postgraduates are held out. Someone who has finished an M.Tech has gedu_lvl='13' and is not here. This matters because it is a selection: 13.1% of engineering-degree holders go on to complete a postgraduate degree, so this population is the other 86.9%. Engineering has the lowest progression rate of the six buckets — other technical degrees run to 41.9% — so its tables are the least affected by this exclusion, but it is not zero.

Someone currently doing a master’s is still gedu_lvl='12', because they have not finished it. They appear under “studying”. That is why studying, in a population that already holds a degree, reads directly as postgraduate study without needing any separate definition.

Diplomas are excluded, and it matters. An engineering diploma holder reaches formal work at 40.0% (graduate-level diploma) or 30.2% (below-graduate), against 52.6% for the degree. Folding them in would have dragged engineering down by roughly 9–10 percentage points.


2. How the recent-graduate window was chosen

Section titled “2. How the recent-graduate window was chosen”

This is the choice everything else rests on, so here is the full working rather than the answer.

A college reports its placement figures at graduation. To compare national data against that, the national cut has to describe people at the same moment. But measure too early and most of the cohort has not entered the labour market yet; measure too late and wages have grown, so you are comparing a fresh offer against someone four years into a career.

Engineering graduates by single year of age. The fall column is the drop in the share still studying from the previous year — the rate at which the cohort stops emptying into education.

Age n Still studying Fall In formal work Unemployed
20 49 57.8% 2.5% 26.7%
21 164 38.0% 19.8pp 11.5% 36.6%
22 354 24.2% 13.8pp 25.1% 35.7%
23 344 14.9% 9.3pp 38.5% 29.1%
24 344 11.0% 3.9pp 40.6% 33.1%
25 475 7.6% 3.4pp 48.9% 24.5%
26 342 1.4% 6.2pp 56.1% 10.5%
27 374 1.1% 0.3pp 57.1% 9.6%
28 427 1.3% −0.2pp 57.5% 10.5%
29 346 0.4% 0.9pp 63.6% 5.6%
30 483 0.8% −0.4pp 61.0% 6.6%

And the same evidence as candidate three-year windows:

Window n Avg still studying Fall across window Avg in formal work
21–23 862 25.7% 23.1pp 25.0%
22–24 1,042 16.7% 13.2pp 34.7%
23–25 1,163 11.2% 7.3pp 42.7%
24–26 1,161 6.7% 9.6pp 48.5%
25–27 1,191 3.4% 6.5pp 54.0%
26–28 1,143 1.3% 0.1pp 56.9%
27–29 1,147 0.9% 0.7pp 59.4%

What stabilisation actually says, and why we did not follow it

Section titled “What stabilisation actually says, and why we did not follow it”

Studying stabilises at 26–28, where the share is 1.3% and the fall across the window is 0.1pp — flat. That is genuinely where the cohort has finished emptying into education.

We did not use 26–28. By then formal employment has reached 56.9%, and — measured separately — the median wage has risen from ₹25,000 to around ₹35,000 and the share clearing ₹50,000 a month has gone from 11.2% to roughly 40%. A window chosen for a clean denominator would have imported four to six years of wage growth into a figure meant to describe a starting salary. That is exactly the error that, in earlier work, made unranked colleges appear to out-place ranked ones.

The window is 22–24: three years from engineering’s normal completion age of 22 — a four-year degree entered at 18. The same rule gives medical 24–26 (MBBS is 5.5 years including internship) and three-year degrees 21–23, so it is one rule applied consistently, not a per-bucket judgement.

At 22–24, 16.7% of the cohort is still studying. They are in the denominator and they have not entered the labour market. This is a real limitation of the window and it pushes the formal employment rate down.

It is nonetheless the right denominator for comparing against a college, because NIRF’s placement rate uses the same one: placed divided by students graduating in minimum stipulated time, a denominator that also includes everyone who went on to higher study. Both sides carry the continuing students. Removing them from ours alone would break the comparison.

The wage-growth problem the late window would have caused is instead solved separately, by measuring progression on tenure rather than age — see section 5.


3. What a recent engineering graduate is doing

Section titled “3. What a recent engineering graduate is doing”

Ages 22–24. Sample: 1,042 people, representing 1.16 million. Five categories, mutually exclusive, summing to 100.

Share
Formal work — salaried, paid, with a contract or social security 34.6%
Informal wage work — salaried without either, plus casual labour 2.9%
Self-employed, earning 2.5%
= working for money 40.0%
Studying — i.e. postgraduate study 16.7%
Neither 43.3%

Read this carefully. Four in ten are earning anything at all. One in six is still studying. The remaining 43.3% are doing neither — but that is not 43.3% idle. It splits into people actively looking for work and people outside the labour force altogether, and for engineering it leans heavily toward the former: unemployment runs 29–36% across ages 22–24, against 7.8% in domestic duties across the wider stock. Engineering graduates queue for jobs rather than leaving the queue.

For contrast, the same cohort measured across the whole working-age range:

Ages 21–34 Share
Formal work 52.6%
Informal wage 4.3%
Self-employed 7.8%
= working for money 64.7%
Studying 6.0%
Neither 29.2%

Sample: 4,734 people, 5.42 million.

These two tables answer different questions and must never be mixed. 34.6% is what a graduating engineer walks into. 52.6% is where engineers who have been working for years have got to. The difference is time, not disagreement.


pas = '31' -- regular salaried/wage employee
AND ern_reg > 0 -- actually paid
AND (job_pas IN ('2','3','4') -- has a written contract
OR ssec_pas NOT IN ('8','9')) -- OR has some social security

All code meanings verified against the table’s own label columns, not assumed.

  • pas='31' — usual principal activity over the last 365 days, not a snapshot of last week. Excludes the self-employed, casual labour and unpaid family workers.
  • ern_reg > 0 — 97% of salaried workers clear this; the rest report no wage and are dropped.
  • job_pas1 no written contract; 2/3/4 written contract of ≤1yr / 1–3yr / >3yr.
  • ssec_pas17 are combinations of PF/pension, gratuity and health/maternity benefits; 8 “not eligible for any”; 9 “not known”, treated as not formal, the conservative reading.
Route All graduates Engineering only
Share Median Share Median
Both contract and benefits 53.8% ₹28,500 75.9% ₹39,600
Benefits only, no contract 13.7% ₹22,000 15.1% ₹35,000
Contract only, no benefits 5.9% ₹14,000 2.5% ₹21,000
Neither → classed informal 26.7% ₹12,000 6.6% ₹16,000

A known weakness — and it bites at the bottom of the education distribution, not here. Across all graduates the contract-only group earns ₹14,000 median, barely above the ₹12,000 of those classed informal: a written contract alone is a weak marker. For engineering graduates the sign reverses — contract-only earns ₹21,000 against the informal ₹16,000, and is 2.5% of the salaried rather than 5.9%.

An earlier version of this table published the all-graduates figures under an “engineering graduates” heading, which made the weakness look far worse here than it is. It is real, and it is concentrated at low education levels: see ../ASSUMPTIONS.md C1, where contract-only admissions are 24% of the bottom rung’s formal count and earn less than the informal group.

Requiring social security would cut engineering’s formal rate from 52.58% to 51.20%. The current rule is kept because it matches how PLFS-based formality is conventionally measured, and the alternative is one line of code away.


Progression is measured on tenuredur_pas, duration in the present principal activity status — not on age. Tenure measures time in work directly: it assumes nothing about when anyone graduated, and it separates a fresh entrant aged 30 from a thirty-year-old with eight years behind them. Pooled across ages 21–34, because tenure cells inside 22–24 alone are too thin.

Monthly wage in formal work:

Tenure n p25 Median p75 p90 ≥₹50,000
Under 1 year 182 ₹20,000 ₹25,000 ₹35,000 ₹50,000 11.2%
1 to 3 years 762 ₹25,000 ₹34,500 ₹45,000 ₹65,000 24.4%
Over 3 years 1,216 ₹30,000 ₹42,000 ₹60,000 ₹80,000 42.9%

The median rises 1.68× and the share clearing ₹50,000 a month goes from 11.2% to 42.9%. Two things follow. An entry salary is a poor guide to a career, and any comparison against a college’s reported placement salary must use the entry row, not the others.

The tenure codes are inferred, not documented. dur_pas has no codebook in our schema, so the ladder was validated against people who cannot have long tenure: among graduates in salaried work, code 3 peaks at age 22–23, code 4 at 25, code 5 from 27. That fits the standard NSS ladder — under 6 months, 6–12 months, 1–2 years, 2–3 years, 3+ years.

Two caveats. Tenure measures time in the activity status, not with an employer, so changing jobs while staying salaried keeps the clock running. And it is blank for anyone not working, so it says nothing about the unemployed.


6. The ₹6 lakh figure, and the check on it

Section titled “6. The ₹6 lakh figure, and the check on it”

₹6 lakh a year is ₹50,000 a month. Among recent engineering graduates in formal work it sits at roughly the 90th percentile, so it is a genuinely top-decile fresher outcome.

Headline: 4.42% of the 22–24 cohort is in formal work earning ≥₹6 lakh. That is 34.6% in formal work × 12.76% of them clearing the threshold.

The 22–24 window admits people at any tenure, and a 24-year-old can already have three years behind them. Since wages nearly double over that span, the window could be importing growth into a number meant to describe people at the start. Engineering is the only bucket with the sample to test this, so it was tested rather than assumed — check_entry_wage.py, bootstrapped over first-stage units (the village or urban block PLFS sampled), 2,000 draws: resample 916 units with replacement, take every person in each drawn unit, recompute the weighted share, then read off the 2.5th and 97.5th percentiles.

How much the clustering actually matters here: very little. PLFS is stratified multi-stage and the schema warns that treating people as independent understates the standard error by 3.5 to 4.7× — but that applies to whole-population estimates, where each unit yields about twelve households. Engineering graduates aged 22–24 are sparse: 1,042 people across 916 units, 1.14 per unit, with only 110 units holding more than one. There is almost nothing to cluster, and the measured design effect is 1.14×, not 3.5×.

The width comes from somewhere else, and it is worth knowing which:

Method Interval Width
Cluster bootstrap (used) [2.19%, 7.19%] 5.01pp
Person bootstrap [2.42%, 6.73%] 4.31pp
Wald from the raw count, unweighted [3.17%, 5.67%] 2.50pp

n=34 in the numerator sets the scale, and survey weights nearly double the width beyond that. The Wald interval is half as wide only because it ignores the weights; a handful of high-weight respondents genuinely move this estimate. The cluster bootstrap is kept because it is correct whether or not clustering bites and costs nothing, not because clustering is doing the work here.

Share of those in formal work clearing ₹6 lakh:

Cut n FSUs Estimate 95% CI
Aged 22–24, any tenure (headline) 304 279 12.76% [6.58, 20.08]
Aged 22–24, under 1 year in (strict) 101 94 10.34% [2.54, 21.24]
Any age, under 1 year in 182 168 11.19% [4.50, 18.78]

Verdict: the window is not measurably contaminated. The gap to the strict reading is 2.4 percentage points and the intervals overlap heavily. It reads slightly high, meaning the headline is generous toward whatever it is compared against — the conservative direction here.

Carried through to the cohort figure:

Wage rate applied to the 34.6% formal rate ≥₹6L rate Cohort share
Same window, any tenure (headline) 12.76% 4.42%
Aged 22–24, entry tenure 10.34% 3.58%
Any age, entry tenure 11.19% 3.88%

Every alternative is lower, so 4.42% is the generous end of a 3.6–4.4% range. State that wherever it is compared against a college’s reported placement salary.

The strict cut was not adopted: n falls from 304 to 101 and the interval widens from 13.5pp to 18.7pp. A noisier estimate of the same number is not an improvement.


₹6 lakh is a parameter, not a finding. Share of engineering graduates in formal work at entry (under 1 year, n=182) earning at or above each monthly threshold:

₹15k ₹20k ₹25k ₹30k ₹40k ₹50k ₹60k ₹75k ₹100k
87.1% 78.9% 66.1% 39.7% 17.6% 11.2% 7.0% 2.2% 0.0%

The full grid for every bucket and tenure step is in output/wage_threshold_grid.csv.

Use the grid, not a curve. A log-normal was fitted to every cell so intermediate values could be interpolated, then checked against the exact shares before use — and it fails at low thresholds by up to 14.9 percentage points, because reported wages heap on round numbers (₹15,000, ₹20,000, ₹25,000) and that is exactly where those thresholds sit. share_above() therefore reads the empirical grid and refuses to answer below ₹15,000 rather than returning a bad number. The fit is used only above ₹40,000 and only to extrapolate past the top of the grid.

One result worth carrying elsewhere: the fit sits below the true share at ₹50,000 in 29 of 42 cells. The real right tail is fatter than log-normal, so any analysis modelling Indian salaries that way is understating the top.


Cut n (people) Weighted
Engineering degree holders, 21–34 4,734 5.42m
Recent graduates, 22–24 1,042 1.16m
— of whom in formal work 304
— in formal work and ≥₹6 lakh 34
Formal workers, tenure under 1 year 182
Formal workers, tenure 1–3 years 762
Formal workers, tenure over 3 years 1,216
First-stage units behind the 22–24 window 916

The binding constraint is the ≥₹6 lakh cell at 34 people. Every statement about how many recent engineering graduates clear ₹6 lakh rests on it, which is why that figure carries a bootstrapped interval — [2.19%, 7.19%] on the cohort share — and why the interval, not the point estimate, should govern any conclusion drawn from it.

Single years of age inside the window are thinner still: 354 at 22, 344 at 23, 344 at 24. Nothing here should be read at single-year resolution.

This constraint is why the analysis was re-run pooled across four PLFS yearsPOOLED.md. That takes the ≥₹6 lakh cell from 34 to 91 and the interval from 5.01pp to 3.73pp, a 26% improvement, with the estimate moving 4.42% to 5.59% once deflated. It confirms every figure in this note. It does not remove the constraint: 91 is still the smallest number in the analysis and still governs what can honestly be claimed.


No causation. People who study engineering differ from people who do not, in ways this cannot see. These figures describe who holds which jobs, not what produced them.

One year, nominal. CY2025 only, no deflation, no trend. The pooled cross-check in POOLED.md covers CY2022–25 with a deflator and agrees; it is a robustness check rather than the headline, because a pooled figure is no longer current.

No branch detail. PLFS records “technical degree in engineering/technology” and nothing finer. There is no computer-science-versus-mechanical split anywhere in this data.

Postgraduates excluded, which is 13.1% of engineering-degree holders — the lowest exclusion of any bucket, but not nothing.

Clustered sampling. Point estimates in the tables above are not accompanied by intervals except where stated. Anything leaning on a small cell should be bootstrapped over first-stage units first, as section 6 does.