Inspiration
Alberta's job market is being reshaped by its power grid. Solar and wind farms, batteries, gas plants and a rush of AI data centres are all lining up to connect, and every one of them needs electricians, engineers, project managers and the shops, schools and clinics that serve the people building them. But most workers find out about that demand when the job ads appear, which is too late to retrain.
Every month, the Alberta Electric System Operator (AESO) publishes the full list of projects waiting to connect to the grid. Those plans are public years before anyone gets hired. We asked: can that list tell an ordinary worker, not just an engineer, what's coming for their job and what to learn next?
What it does
Signal turns AESO's grid data into a personal career outlook for any of 162 occupations in any Alberta region, from teachers to truck drivers to data scientists.
- Outlook scores: pick your job and town, or upload your résumé, and get three separate scores:
- Tailwind: how much demand planned energy projects could add for your job, with low, base and high scenarios
- Exposure: how much your job leans on slow-growing or oil and gas sectors
- Job trend: how your kind of job has actually grown in your region recently
- Adjacent roles: similar jobs nearby with a stronger outlook
- AI career advisor: a week-by-week plan to move into a target role, built only from our model's evidence and a vetted list of Alberta training resources
- Energy map and occupation explorer: see what's planned in each region and which jobs it touches
- People making the same move: opt in to be found by others, and request an introduction by email
- Grid alerts: a monthly email when projects in your region are added, delayed or cancelled, or your outlook shifts
How we built it
The model (Python). We parsed all 45 of AESO's monthly connection lists from January 2023 to November 2026 (933 projects, about 70 GW queued) and built a pipeline:
- Will it get built? Most queued projects never are. A logistic regression on monthly snapshots predicts each project's chance of energizing, with a Markov chain for attrition on far-off projects. Tested on months it hadn't seen, it reached an AUC of 0.94–0.98. We expect about 6.1 GW of the 70 GW to be built.
- Megawatts to jobs. Canada Energy Regulator capital costs for Alberta, times the share spent in-province, times Alberta's official economic multipliers. We split them into direct, indirect and induced jobs: $$\text{jobs}_i = p_i \times \text{MW}_i \times \text{cost per MW}_i \times \text{Alberta share}_i \times m$$
- Jobs to occupations. The 2021 Census occupation-by-industry table spreads each industry's new jobs across 162 occupations: $$\text{jobs}{o,r} = \sum{s} \text{jobs}{s,r} \cdot \frac{E{o,s}}{E_{s}}$$ Tailwind is that number as a share of the people already doing the job in that region, ranked 0–100.
No US data is used: costs come from the CER, multipliers from Alberta Treasury Board and Finance, and labour data from Statistics Canada.
The app. A React and TypeScript frontend, with Gemini for résumé matching and the career advisor.
AWS. Everything is defined in one CloudFormation stack:
- CodeBuild reruns the whole model on a monthly schedule, runs 113 tests and sanity checks, and only publishes if they pass
- S3 and CloudFront serve the site and the precomputed scores
- API Gateway and Lambda run the API and the advisor
- Cognito handles accounts, DynamoDB stores saved pathways and alerts, and SES sends emails
- SSM Parameter Store keeps the Gemini key out of the code
Challenges we ran into
- AESO changed its file format three times in four years, with different headers and status labels. Our parser handles all of them, and a bad month is never published.
- The market changed under our model. Renewable MW energized fell from 2,495 in 2023 to 37 in 2026, so models trained on older data badly overpredicted. We had to test on later months to catch it.
- Data centres have no history. None has ever connected to Alberta's grid, yet they make up most of the projected jobs. We gave them explicit scenarios instead of pretending to predict them, and the app says so.
- Geography. AESO's regions aren't labour markets, so we mapped every planning area to StatCan economic regions by hand.
- Big data on a laptop. The census table is 12 GB, so we streamed the Alberta rows straight out of the zip.
- Shipping as a team. Merging two versions of the frontend and backend, and fixing what only broke on the first real AWS deploy.
Accomplishments that we're proud of
- Every job, not just energy jobs. A cashier, a nurse and a pipefitter all get a real, explainable answer.
- We tested it and published the failures. Our completion model works, but energy demand alone didn't predict which occupations grew. Energy projects add about 0.4% to Alberta's workforce, while population growth moves far more. So Signal presents scores as estimates and ranges, never as hiring forecasts.
- A grounded AI advisor. It can only cite our model's numbers and a vetted resource list, and every response is validated before it's shown.
- Fully automated. New AESO data in, tested results out, every month.
What we learned
- Backtesting is humbling. A model that looks good on history can fail on next year, and the only way to know is to test on data it hasn't seen.
- Being honest about uncertainty makes the product better. A range of 4–59 tells someone more than a falsely precise 31.
- Public data goes a long way. AESO, Statistics Canada, the CER and the Alberta government covered everything we needed.
What's next for Signal
- Job postings data, to test against real hiring and send alerts with actual openings
- A real skills dataset, so adjacent roles reflect skill overlap and not just shared industries
- Better data centre tracking as AESO's large-load rules settle
- Finer geography, so outlooks reflect a town and not just a region
- Opted-in mentors from industry, so the networking feature has experienced people to connect with