Zhekai Li Contact

Zhekai Li · Capacity & Demand Planning

I plan where a fleet puts its machines and capital, and make the plans hold up.

For three years that has meant capacity planning for semiconductor fabs in the US, Japan, and Singapore: turning demand into equipment and CapEx, allocating capacity with optimization, and running the plan-vs-reality loop that shows exactly where a plan and the floor disagree.

20
Databases integrated
41
MCP tools shipped
1,312
Curated findings
70
Analyses written
7
Internal apps
+30%
Cycle-time forecast accuracy
§01

How I Plan

4 habits

Four habits I bring to any capacity problem.

M-01

Forecast, plan, allocation — three different objects

FORECAST what demand will need PLAN what to build or buy ALLOCATION which tool runs which product reconcile against what actually ran

Keep what demand will need, what capacity to build or buy, and which tools serve which products as separate, reconciled objects. Most planning arguments are two of these being mistaken for each other.

M-02

Close the plan-vs-reality loop

PLAN ACTUAL VARIANCE TRIAGE score every projection against what happened triage: input · model · real change

Score every projection against what happened, then triage each variance: bad input data, a known model gap, or a real change on the floor. Each goes to a different owner: a data fix, a model change request, or a process problem the floor has to solve.

M-03

Headline capacity is rarely the binding constraint

AVAILABLE OCCUPIED BY WORK AT STANDARD RATE headline ≠ usable

A tool that is up is not a tool that is producing. Decompose output into availability, occupancy, and rate before planning against it — the loss is often rate, not downtime, and a tool count on paper hides all three.

M-04

A forecast has to beat the naive baseline

— actual — model - - naive baseline

If a forecast cannot beat a flat line at last week's average, its daily numbers carry no information. Measure the error, keep the baseline in view, and prefer simple models you can inspect over clever ones you cannot.

§02

Case Studies

05 cases
CASE-01 · CAPACITY & CAPEX

Capacity & CapEx scenario engine

PythonFastAPIJavaScriptExcel I/O
Problem
Planners need to see how a change in demand flows into equipment requirements, cross-site transfers, purchases, and capital spend — quarter by quarter, across scenarios.
Method
A Python engine that reads the existing planning spreadsheets and computes requirements per tool group, transfers, purchases, and annual CapEx for each scenario, with versioned scenarios, side-by-side comparison, and export back to the spreadsheets planners already use.
Result
A full scenario recomputes in well under a second, so a planner can change one assumption and see the equipment and CapEx consequence at once. Next: a governed platform with parameter lineage and cost data.
CASE-02 · ALLOCATION

Daily allocation optimizer

PythonPuLP / HiGHSFastAPIReactTypeScript
Problem
Each day, decide which part numbers every inspection tool should run, when changeovers cost capacity and demand arrives unevenly from week to week.
Method
A tool-level mixed-integer model: per-tool-day capacity, unmet demand carried across weeks, and a lexicographic objective — unmet demand, then late demand, then idle capacity, then changeovers. Every recommended change is explained by pricing the plan without it, and a daily look-back diffs yesterday's plan against what each tool actually ran.
Result
A daily plan with a reason attached to every change and a standing plan-vs-actual record. Runs on a schedule, covered by 246 automated tests.
CASE-03 · PLAN VS REALITY

Measuring the model's own error

PythonSQLReactTypeScript
Problem
A fab simulation program with no standing measure of its own error — gaps were explained by guesswork, and the dispatch scheduler was trusted or ignored by feel.
Method
Score every projection against actual output (WAPE) and against a naive last-week-average baseline; triage each variance into input error, model gap, or real change; audit the scheduler's plan against the floor.
Result
Gaps now come with quantified causes. Real tool-level variability ran about twice the model's — traced to an unmodeled eligibility rule and filed as a vendor change request with acceptance criteria. The scheduler audit surfaced long-stale reservations and unrecorded same-type tool swaps; where changeover rules existed, following the plan cut changeovers about 5×.
CASE-04 · CAPACITY LOSS

Where the capacity actually goes

PythonStatisticsFastAPIReact
Problem
Tools looked available, yet output fell short — and the standard equipment-state view could not say where the capacity went.
Method
Decompose OEE into availability, occupancy, and rate; build a mix-adjusted throughput index; date speed changes with change-point detection (PELT) and group them by clustering; attribute lost tool-hours to speed, downtime, and product mix.
Result
On one inspection fleet with near-full availability, most theoretical output was lost to rate, not downtime, and idle time outweighed changeover loss by about an order of magnitude — so optimization was aimed at idle capacity, not fewer changeovers.
CASE-05 · DATA & AI TOOLING

Planning data layer for people and AI agents

PythonMCPOracleSQL Server
Problem
Planning data sat in 20 databases across six sites, and the same metric was too often re-derived from raw history instead of read from its maintained source.
Method
A read-only MCP server (41 tools) that lets AI agents query those databases; an ontology mapping each metric to its authoritative table; hybrid retrieval — field-weighted BM25 plus entity linking — over 1,312 curated findings, with a human review step before anything is published to the team.
Result
On a 115-question retrieval benchmark, hit@5 rose from 0.37 to 0.94 and median search latency fell from 48 ms to 11 ms.
§03

Evidence

4 of 70 · masked
Masked
Fleet OEE decomposition report, numbers masked
OEE DECOMPOSITIONAvailability, occupancy, and rate — where a fleet's output goes
Masked
Simulation versus reality variability study, numbers masked
SIMULATION VS REALITYWhy real tools swing day to day and the model does not
Masked
Fab constraint ranking report, numbers masked
CONSTRAINT RANKINGWhich toolsets hold the queue, and whether the lever is repair or load
Masked
Setup penalty analysis, numbers masked
SETUP PENALTYWhat triggers a requalification, and what it costs in capacity

How these are masked. Each screenshot is de-identified at the source — tools, sites, lots, suppliers, and internal systems become aliases — and every number is masked after rendering; chart labels are drawn as pixels, so charts are blurred. A screenshot is refused if any digit or protected name is still visible on the page. Results in the case studies are stated as ratios, not operating figures.

§04

Profile

I am a senior industrial engineer at Skyworks Solutions, where I own capacity planning and fab simulation for wafer fabs in the United States, Japan, and Singapore — the models, the data behind them, and the software people use to act on them.

What I care about is plans that survive contact with reality: forecasts scored against a naive baseline, simulation whose error is measured instead of assumed, and capacity models that keep what demand needs apart from what we choose to build and what each tool actually runs. I write the SQL and Python myself, and I would rather retract a finding than let a wrong number steer a decision.

Before this I built a fab discrete-event simulation engine from scratch as an intern; it became the foundation of the company's simulation program.

Role
Senior Industrial Engineer, Skyworks Solutions
Focus
Capacity & demand planning · forecast error · optimization · planning systems
Methods
Discrete-event simulation, LP / MILP, queueing theory, forecasting, change-point detection
Stack
Python, SQL, PuLP / HiGHS, FastAPI, React / TypeScript, Prefect, Oracle, SQL Server, MCP
Education
MS Supply Chain Engineering, Georgia Tech
BS Civil & Environmental Eng., UIUC + Zhejiang University
Based
Thousand Oaks, California
§05

Contact

Let's talk about plans that hold up.

Email, phone, or LinkedIn — whichever is easiest for you. Based in Thousand Oaks, California.