Build Your Portfolio
In South Africa's data job market, a strong portfolio often matters more than your qualifications alone. Here's how to build one that gets noticed.
Project ideas are different for every role. Jump to yours:
Data Analyst Portfolio Projects
Each of these can be built with Excel/Power BI for a first pass, then rebuilt in Python as your skills grow.
Interactive portfolio examples
loadshedding-impact/ ├── data/ │ ├── raw/ │ │ └── eskom_outages_2023.csv │ └── processed/ │ └── outages_clean.csv ├── notebooks/ │ ├── 01_eda.ipynb │ └── 02_stage_analysis.ipynb ├── sql/ │ ├── monthly_totals.sql │ └── stage_distribution.sql ├── powerbi/ │ └── loadshedding_dashboard.pbix ├── reports/ │ └── ops_briefing.pdf └── README.md
You do not need work experience to build a strong junior DA portfolio. Public datasets from Kaggle, StatsSA, or any open government source are completely acceptable. Two to four projects is enough. Each should open with a clear question, walk through the data cleaning decisions, and close with a finding a non-technical person can understand. Reviewers are not looking for complexity -- they want to see that you can frame a problem, handle messy data, choose the right chart, and write a conclusion that means something. SQL, Excel or Python, and one BI tool are enough to get your first role.
marketing-attribution/ ├── data/ │ ├── raw/ │ │ └── touchpoints_2024.csv │ └── processed/ │ └── channel_weights.csv ├── notebooks/ │ ├── 01_last_click_baseline.ipynb │ ├── 02_markov_attribution.ipynb │ └── 03_validation.ipynb ├── sql/ │ └── channel_touchpoints.sql ├── dbt/ │ └── models/ │ └── fct_attribution.sql ├── reports/ │ └── attribution_methodology_memo.pdf └── README.md
At mid-level the portfolio should move beyond single analyses into recurring systems. Projects should demonstrate automated reporting pipelines, multi-touch attribution, cohort analysis, or A/B test interpretation. Each project should make clear why the analysis was commissioned, what decision it informed, and what changed because of it. dbt, Azure Synapse or SQL Server, and a production Power BI dashboard all belong here. Business context is as important as technical method.
revenue-intelligence/ ├── dbt/ │ ├── models/ │ │ ├── staging/ │ │ └── marts/ │ │ ├── fct_revenue.sql │ │ ├── dim_customers.sql │ │ └── fct_orders.sql │ ├── macros/ │ │ └── revenue_metrics.sql │ └── tests/ ├── dashboards/ │ └── board_template.pbit ├── docs/ │ ├── data_dictionary.md │ └── stakeholder_guide.md └── README.md
A senior analyst portfolio demonstrates platform thinking and organisational influence. Projects should show a metrics layer serving multiple teams from a single source of truth, governance over how KPIs are defined, and evidence that your work changed how the business makes decisions. Architecture diagrams, stakeholder framing, and measurable outcomes matter more than code. In the South African context, this often means bridging multiple legacy source systems into a single governed layer that feeds Power BI reports used by EXCO and the board. Reviewers are asking whether you can define the data strategy for a function, not just execute it.
Project ideas
1. National Budget & Expenditure Analysis
Use National Treasury's budget data to explore government spending by department or province over time. Questions to explore: Which departments saw the biggest increases or cuts? How does spending compare to population size by province?
What "good" looks like: a 1-page dashboard with at least one chart per question, a short written summary of your findings, and a README describing your data source and method.
2. Unemployment Trends
Use Stats SA's Quarterly Labour Force Survey data to explore unemployment trends by province, age group, or education level. Great for showing you can work with official statistics and tell a clear story.
What "good" looks like: a clear trend chart over at least 3 quarters, one insight that isn't obvious from the headline number, and plain-language commentary a non-analyst could understand.
3. Inflation Dashboard
Build a Power BI or Python dashboard tracking South African CPI (inflation) over time, broken down by category (food, fuel, housing). Add commentary on what's driving changes.
What "good" looks like: an interactive dashboard (filters by category/date), at least one comparison (e.g. food vs fuel inflation), and a short "what this means for households" write-up.
4. Crime Statistics Analysis
Use SAPS crime statistics to explore trends by province or category over time. Questions to explore: Which categories are rising or falling? How do provinces compare relative to population?
What "good" looks like: a normalised comparison (per 100,000 people, not raw counts), a clear visualisation of the trend, and a discussion of limitations in the data.
5. Municipal Service Delivery Analysis
Analyse open municipal data on service delivery (water, electricity, refuse collection) by ward or area, a project that demonstrates civic awareness and real analytical thinking.
What "good" looks like: data pulled and joined from more than one source, a map or geographic breakdown if possible, and recommendations based on your findings.
South African data sources
vulekamali.gov.za
National Treasury's budget data portal. National and provincial budget and expenditure data, ideal for government spending analysis.
Statistics South Africa
The authoritative source for unemployment, inflation (CPI), population and economic data. Free and regularly updated.
Kaggle
A large library of datasets including many South African and African datasets, plus free notebooks and tutorials to learn from.
SAPS Crime Statistics
SAPS publishes quarterly crime stats by province and category. Municipal open data portals like City of Cape Town cover services and infrastructure.
Why your portfolio matters
For each project, write a short README explaining: the question you asked, where the data came from, what you did, what you found, and what you'd do next. This is often what recruiters actually read first.
Getting hired as a Data Analyst
Skills and projects get you ready. This is how you turn that into interviews and offers.
Your CV
- Lead with a "Projects" section above "Education" if you have no work experience. Link each project to GitHub.
- For each project: one line covering the question, tools used, and headline finding.
- List skills as a short table (SQL, Excel, Power BI, Python) rather than a vague paragraph.
- Keep it to one page.
Where to apply in South Africa
- LinkedIn Jobs: search "Data Analyst" + "junior" or "graduate", set location to South Africa, turn on alerts.
- Indeed and Careers24: two of the largest SA job boards.
- OfferZen: tech-focused, companies approach you directly.
- Bank and corporate graduate programmes: FNB, Standard Bank, Absa, Discovery, Nedbank. Search "[bank] graduate programme data".
Interview prep
- Practice live SQL questions. Most SA analyst interviews include a short SQL test (JOINs, GROUP BY, filtering).
- DataLemur for free SQL interview practice at real company difficulty levels.
- Walk through one portfolio project end-to-end: question, data, method, finding, and what you would do differently.
- Prepare 2-3 questions about how the team uses data day-to-day. Shows genuine interest.
Data Scientist Portfolio Projects
These focus on statistics, modelling and communicating uncertainty, not just dashboards. Build in Python (pandas, scikit-learn, statsmodels).
Interactive portfolio examples
churn-prediction/ ├── data/ │ └── processed/ │ └── telco_clean.csv ├── notebooks/ │ ├── 01_eda.ipynb │ ├── 02_feature_engineering.ipynb │ └── 03_model_comparison.ipynb ├── models/ │ └── xgb_churn_v1.pkl ├── reports/ │ └── business_brief.md └── README.md
A junior portfolio should contain two to four complete projects. Each should start with a clear problem statement, walk through exploration, cleaning, and feature engineering decisions, and close with business recommendations. A reviewer should be able to understand why modelling decisions were made and what was learned. A logistic regression with honest evaluation beats a neural network with no discussion of limitations. The portfolio should feel like: here is how I approached this problem and what I discovered -- not: here is a completed production system.
def make_lag_features(df, col, lags=[1,2,4,8,12,52]): for lag in lags: df[f'{col}_lag{lag}'] = ( df.groupby('sku_id')[col].shift(lag) ) df[f'{col}_roll4'] = ( df.groupby('sku_id')[col] .transform(lambda x: x.shift(1).rolling(4).mean()) ) return df # 47 MLflow experiments tracked # Best config: MAPE 6.2% (baseline 18.4%) # Lag-52 feature was most impactful
demand-forecasting/ ├── data/ │ └── processed/ │ └── weekly_sales_clean.csv ├── notebooks/ │ ├── 01_eda_seasonality.ipynb │ ├── 02_sarima_baseline.ipynb │ └── 03_xgboost_features.ipynb ├── src/ │ ├── feature_store.py │ └── evaluate.py ├── airflow/ │ └── weekly_forecast_dag.py ├── mlruns/ │ └── (47 MLflow experiment runs) └── README.md
A mid-level portfolio should evolve from individual notebooks into end-to-end solutions. Projects should demonstrate the ability to compare modelling approaches systematically, track experiments, deploy a model into a real workflow, and connect results to a business objective. Reviewers want to see not only that a model works but why it was chosen and how it is used. Feature stores, orchestration pipelines, and evaluation frameworks that go beyond test-set accuracy all belong here.
credit-risk-model/ ├── notebooks/ │ ├── 01_eda_application.ipynb │ ├── 02_feature_selection.ipynb │ └── 03_lgbm_training.ipynb ├── src/ │ ├── scorecard.py │ ├── psi_monitor.py │ └── shap_report.py ├── api/ │ └── main.py ├── monitoring/ │ └── psi_weekly_report.csv ├── docs/ │ ├── model_card.md │ └── cro_executive_summary.pdf └── README.md
A senior portfolio focuses on impact, not technical complexity. Projects should demonstrate production machine learning systems, model governance, drift monitoring, champion-challenger pipelines, and measurable business outcomes. The most important questions a reviewer asks are: how many customers or rands were affected, what changed after deployment, and how do you know the model is still working? Architecture diagrams, compliance narratives, and business outcome metrics are worth more than code snippets at this level. The portfolio should feel less like a collection of notebooks and more like a collection of case studies.
Project ideas
1. Customer Churn Prediction
Use the Kaggle "Telco Customer Churn" dataset to predict which customers are likely to cancel a service. A classic, business-relevant problem that maps directly to SA telcos and banks.
What "good" looks like: compare at least two models (e.g. logistic regression vs random forest), evaluate with precision/recall (not just accuracy), and explain which features drive churn in plain language.
2. House Price Prediction
Use a Kaggle housing-prices dataset to build a regression model that predicts sale price from property features. Adapt the approach later to South African property data as you find suitable sources.
What "good" looks like: feature engineering (not just raw columns), an RMSE or MAE score you can explain, and a discussion of which features matter most and why.
3. A/B Test Analysis
Use a Kaggle "Marketing A/B Testing" dataset to analyse whether a campaign change actually improved results.
What "good" looks like: a clearly stated hypothesis, the correct statistical test for the data type, a properly interpreted p-value, and a recommendation, this is the skill that separates analysts who can run numbers from scientists who can be trusted with decisions.
South African data sources
vulekamali.gov.za
National Treasury's budget data portal. National and provincial budget and expenditure data, ideal for government spending analysis.
Statistics South Africa
The authoritative source for unemployment, inflation (CPI), population and economic data. Free and regularly updated.
Kaggle
A large library of datasets including many South African and African datasets, plus free notebooks and tutorials to learn from.
SAPS Crime Statistics
SAPS publishes quarterly crime stats by province and category. Municipal open data portals like City of Cape Town cover services and infrastructure.
Tools and platforms
UCI ML Repository
Classic machine learning datasets for practising classification, regression, and clustering.
World Bank Open Data
Global development indicators including South Africa-specific economic and social data.
Hugging Face Datasets
Thousands of ready-to-use datasets, useful once you start working with text or more advanced ML.
SARB Publications
South African Reserve Bank data on monetary policy, interest rates, and banking sector statistics.
Why your portfolio matters
Data Scientist interviews often include a take-home or live modelling exercise. Having 2-3 of these already done, documented, and ready to discuss means you walk in with proof, not promises.
Getting hired as a Data Scientist
Skills and projects get you ready. This is how you turn that into interviews and offers.
Your CV
- Your Kaggle profile and GitHub are extensions of your CV. Link both prominently.
- Show model metrics for every project (AUC, F1, RMSE). Never just say "I built a model".
- If you have Honours or MSc, put it high on the page. SA data science roles often filter on postgrad qualifications.
- Include a one-line description of your thesis or research focus if it is quantitative or data-related.
Where to apply in South Africa
- LinkedIn Jobs: search "Data Scientist" + "junior" or "graduate", South Africa. Set alerts.
- OfferZen: strong presence of SA fintechs and tech companies recruiting scientists.
- FirstRand Quant and Analytics Graduate Programme on FirstRand Workday.
- Standard Bank Data Science stream via their graduate programmes page.
- Bank innovation and data labs: Absa AI, FNB Data Science, Discovery Insights.
Interview prep
- Know your statistics cold: hypothesis testing, p-values, distributions, and when to use each test.
- Be ready to explain your model choices and tradeoffs, not just what you ran.
- Expect a take-home case study: a dataset, a business question, 24-48 hours. Practice on Kaggle.
- StatQuest for building intuition on every algorithm you list on your CV.
- Python coding questions are common: pandas manipulation, writing a model from scratch in scikit-learn.
Data Engineer Portfolio Projects
These focus on pipelines, schemas and reliability, the things that make data usable for everyone else. Build with Python, SQL and free-tier cloud tools.
Interactive portfolio examples
def fetch_orders(session, since_id=None): params = {'status': 'any', 'limit': 250} if since_id: params['since_id'] = since_id for attempt in range(3): r = session.get(BASE + '/orders.json', params=params) if r.status_code == 200: return r.json()['orders'] time.sleep(2 ** attempt) raise RuntimeError('Failed 3 times') # Daily at 06:00 via cron # Teams alert if null rate > 1% # 94% test coverage via pytest
shopify-etl/ ├── src/ │ ├── extract.py │ ├── transform.py │ └── load.py ├── dbt/ │ └── models/ │ ├── stg_orders.sql │ └── fct_daily_revenue.sql ├── tests/ │ ├── test_extract.py │ └── test_transform.py ├── config/ │ └── schema_config.yaml ├── cron/ │ └── schedule.sh └── README.md
A junior portfolio should contain two to four pipeline projects. Each should demonstrate a clear data flow from source to destination, working extraction and loading code, schema validation, automated scheduling, and basic error handling. Reviewers want to see that data arrives correctly and consistently and that failures are caught. A pipeline that runs cleanly on a schedule and sends an alert when something breaks is worth more than a complex system held together with manual steps.
-- Incremental: only process new rows -- Partitioned for query speed + cost {{ config( materialized='incremental', unique_key='order_id', partition_by={'field': 'order_date'}, cluster_by=['customer_id'] ) }} SELECT o.order_id, o.customer_id, c.segment, o.order_date, SUM(oi.qty * oi.price) AS gross_rev FROM {{ ref('stg_orders') }} o JOIN {{ ref('dim_customers') }} c USING(customer_id) JOIN {{ ref('stg_items') }} i USING(order_id) {% if is_incremental() %} WHERE o.order_date > ( SELECT MAX(order_date) FROM {{ this }}) {% endif %} GROUP BY 1,2,3,4
data-lakehouse/ ├── terraform/ │ ├── main.tf │ ├── variables.tf │ └── outputs.tf ├── dbt/ │ ├── models/ │ │ ├── staging/ │ │ └── marts/ │ └── tests/ ├── airflow/ │ └── dags/ │ └── lakehouse_dag.py ├── great_expectations/ │ └── checkpoints/ ├── docs/ │ ├── ADR_001_medallion.md │ └── cost_analysis.md └── README.md
A mid-level portfolio demonstrates ownership of a complete data platform. Projects should show cloud infrastructure, orchestration, modular transformation layers, and data quality frameworks. Business context matters -- reviewers want to understand why the architecture was chosen. Cost comparisons, trade-off explanations, and before-and-after metrics tell a stronger story than a diagram alone.
streaming-platform/ ├── kafka/ │ ├── topics.yaml │ └── connect_config.yaml ├── flink/ │ ├── risk_alerts_job.py │ └── analytics_job.py ├── infra/ │ ├── terraform/ │ └── kubernetes/ │ └── flink_deployment.yaml ├── monitoring/ │ └── grafana_dashboards/ ├── docs/ │ ├── ADR_kafka_vs_kinesis.md │ └── chaos_engineering_results.md └── README.md
A senior portfolio centres on platform thinking and organisational impact. Projects should demonstrate real-time systems, infrastructure as code, and the ability to enable other teams to build safely on top of your platform. Cost analysis, architectural trade-offs, SLAs, and evidence of sustained production reliability matter more than code volume.
Project ideas
1. Load-Shedding Data Pipeline
Pull data from the EskomSePush API on a schedule (cron job or simple Python script) and store outage history in a database. Build a small dashboard showing patterns by area or time of day.
What "good" looks like: a script that runs on a schedule without manual intervention, a clean table schema, and basic checks for missing or duplicate data.
2. Retail Sales Data Warehouse
Take a Kaggle retail sales dataset, design a simple star schema (fact table + dimension tables), load it into PostgreSQL or BigQuery, and write dbt models to transform raw data into reporting-ready tables.
What "good" looks like: a documented schema diagram, version-controlled SQL/dbt code, and at least one data quality test (e.g. no nulls in key fields).
3. End-to-End ETL with Airflow
Orchestrate a multi-step pipeline (extract from an API or CSV, transform with Python/pandas, load into a database) using Apache Airflow, run locally with Docker or on Astronomer's free trial.
What "good" looks like: a visible DAG (pipeline diagram), logging and error handling for failed steps, and a README explaining how to run it from scratch.
South African data sources
vulekamali.gov.za
National Treasury's budget data portal. National and provincial budget and expenditure data, ideal for government spending analysis.
Statistics South Africa
The authoritative source for unemployment, inflation (CPI), population and economic data. Free and regularly updated.
Kaggle
A large library of datasets including many South African and African datasets, plus free notebooks and tutorials to learn from.
SAPS Crime Statistics
SAPS publishes quarterly crime stats by province and category. Municipal open data portals like City of Cape Town cover services and infrastructure.
Tools and platforms
EskomSePush API
Real-time and historical load-shedding data. One of the most SA-relevant APIs for pipeline projects.
ExchangeRate-API
ZAR exchange rate data. Useful for financial data pipelines and currency tracking projects.
Supabase
Free-tier PostgreSQL database. Good for building a real data warehouse without cloud costs.
dbt
The standard transformation tool in modern data stacks. Free to use locally and widely used in SA.
Why your portfolio matters
Data Engineer interviews rarely ask you to "analyse" data, they want to see that you can move it reliably. A working pipeline, even a small one, demonstrates exactly that.
Getting hired as a Data Engineer
Skills and projects get you ready. This is how you turn that into interviews and offers.
Your CV
- GitHub with working pipelines is non-negotiable. A README showing how to run it locally is a strong signal.
- List tools explicitly: dbt, Airflow, Spark, Snowflake, Kafka, Docker. Recruiters search for these.
- Cloud certifications add real credibility: AZ-900 or AWS Cloud Practitioner first, then DP-203 (Azure Data Engineer) or AWS Data Analytics.
- Show pipeline architecture diagrams in your README. A simple diagram explains more than a paragraph.
Where to apply in South Africa
- LinkedIn Jobs: search "Data Engineer" + "junior" or "graduate", South Africa.
- OfferZen: strong for SA fintechs (PayJustNow, TymeBank, Jumo) which are active data engineering hirers.
- Cloud consulting firms: DVT, BBD, Synthesis, BCX. They place junior engineers and pay for certifications.
- Large bank data platform teams: FNB, Standard Bank and Absa all have dedicated data engineering divisions.
- Careers24: search "Analytics Engineer" or "ETL Developer" for entry-level data engineering roles.
Interview prep
- Expect a SQL and Python coding test. Practice writing pipeline logic in Python and complex SQL (window functions, CTEs).
- Data modeling questions are common: explain the difference between star schema and snowflake schema, what SCD Type 2 is.
- Be ready for pipeline design scenarios: "How would you build a pipeline that ingests X and loads it into Y every hour?"
- Know basic cloud concepts for your target stack. If the job mentions Azure, know ADF, Synapse, and Databricks at a surface level.
- Walk through your pipeline project: what would break at scale, and how would you handle it?
AI/ML Engineer Portfolio Projects
These focus on getting models into something usable, a deployed demo beats a notebook every time.
Interactive portfolio examples
sentiment-api/ ├── model/ │ └── distilbert_finetuned/ ├── api/ │ ├── main.py │ └── schemas.py ├── tests/ │ ├── test_api.py │ └── locust_load_test.py ├── Dockerfile ├── model_card.md └── README.md
A junior portfolio should demonstrate the ability to take an existing model and make it production-ready. Projects should include wrapping in a REST API, containerisation, unit and integration tests, latency benchmarks under load, and a model card documenting inputs, outputs, and limitations. The emphasis is on engineering discipline. A reviewer should see that you understand the gap between a notebook and a deployed service.
def hybrid_retrieve(query, k=5): dense = chroma.similarity_search( query, k=k*2) sparse = bm25.get_top_n( query.split(), corpus, n=k*2) combined = reciprocal_rank_fusion( dense, sparse) reranked = cross_encoder.predict( [(query, d.page_content) for d in combined]) return [combined[i] for i in np.argsort(reranked)[::-1][:k]] # Context recall: 0.48 -> 0.79 # Faithfulness: 0.61 -> 0.89
hr-policy-rag/ ├── ingestion/ │ ├── chunker.py │ └── embed_and_store.py ├── retrieval/ │ ├── hybrid_retrieve.py │ └── reranker.py ├── generation/ │ ├── prompt_templates.py │ └── guardrails.py ├── evaluation/ │ └── ragas_eval.py ├── api/ │ └── main.py └── README.md
A mid-level portfolio should demonstrate end-to-end ML system design: experiment tracking, structured evaluation, RAG pipelines, fine-tuning workflows, or LLM development with guardrails. The portfolio should show that you can build systems that are measurable and improvable. RAGAS scores, latency benchmarks, and evaluation results tell a stronger story than a single accuracy figure. Reviewers want to see that you thought about failure modes -- hallucinations, out-of-scope queries, and edge cases.
ml-platform/ ├── registry/ │ └── mlflow_config.py ├── pipelines/ │ └── kubeflow/ │ └── retrain_pipeline.yaml ├── monitoring/ │ ├── drift_detector.py │ └── psi_alert.py ├── ci/ │ └── .github/ │ └── workflows/ │ └── model_ci.yaml ├── docs/ │ ├── model_governance_policy.md │ └── team_onboarding_guide.md └── README.md
A senior portfolio demonstrates platform and organisational impact -- infrastructure enabling teams to deploy, monitor, and iterate on models independently. Drift detection, canary rollouts, and model registries are expected. The portfolio should show that models are alive in production, not just deployed once and forgotten. Reviewers are asking whether you can design the ML platform for an organisation and set the standards for model governance.
Project ideas
1. Deploy a Model as an API
Train a simple classifier (e.g. on a Kaggle dataset), wrap it in a FastAPI app, and deploy it for free on Render or as a Hugging Face Space.
What "good" looks like: a live demo link that actually works, basic input validation, and a short write-up of the model's accuracy and limitations.
2. Image Classifier with Transfer Learning
Fine-tune a pretrained model (e.g. ResNet or a small vision transformer) on a small custom or Kaggle image dataset.
What "good" looks like: clear before/after accuracy reporting, example correct and incorrect predictions, and an honest discussion of where the model fails.
3. RAG Chatbot Over a Small Dataset
Build a retrieval-augmented chatbot over a focused dataset, for example, SA university admission requirements or bursary information, using an open-source model via Hugging Face.
What "good" looks like: a working demo, a clear explanation of the architecture (retrieval + generation), and an honest section on limitations and hallucination risks.
South African data sources
vulekamali.gov.za
National Treasury's budget data portal. National and provincial budget and expenditure data, ideal for government spending analysis.
Statistics South Africa
The authoritative source for unemployment, inflation (CPI), population and economic data. Free and regularly updated.
Kaggle
A large library of datasets including many South African and African datasets, plus free notebooks and tutorials to learn from.
SAPS Crime Statistics
SAPS publishes quarterly crime stats by province and category. Municipal open data portals like City of Cape Town cover services and infrastructure.
Tools and platforms
Hugging Face
Models, datasets, and deployment tools. The default starting point for most ML and NLP projects.
Render
Free tier hosting for deploying FastAPI or Flask model endpoints. No credit card required to start.
Papers with Code
Research papers with implementation code. Useful for understanding SOTA methods and benchmarks.
Masakhane
African NLP research community with datasets covering South African languages including isiZulu and Sesotho.
Why your portfolio matters
Almost nobody starts their career as an AI/ML Engineer. These projects show you can take a model from "it works on my machine" to "someone else can use it", which is exactly the gap most junior candidates miss.
Getting hired as a AI / ML Engineer
Skills and projects get you ready. This is how you turn that into interviews and offers.
Your CV
- A deployed model is worth more than 10 notebooks. Even a simple FastAPI endpoint on Render or Hugging Face Spaces counts.
- GitHub and Hugging Face profile are your portfolio. Link them before LinkedIn.
- Kaggle competition placements (even top 30%) show you can compete. Include your best result.
- If you have research publications or a thesis on ML/AI, list them with a one-line summary.
- Show the full stack: model training, API serving, and monitoring. Even a basic MLflow experiment log helps.
Where to apply in South Africa
- LinkedIn Jobs: search "ML Engineer", "AI Engineer", "NLP Engineer", "Computer Vision" in South Africa.
- OfferZen: growing number of SA AI-focused companies recruiting here.
- AI and ML research roles: CSIR (Council for Scientific and Industrial Research), UCT AISB, Wits School of AI.
- Large tech SA offices: Amazon, Google and Microsoft all have SA engineering teams with ML roles.
- Fintech and insurtech companies building credit or fraud models: PayJustNow, Jumo, OUTsurance data science teams.
Interview prep
- Expect a Python ML coding test. Be comfortable implementing models and pipelines from scratch, not just calling sklearn.fit().
- ML system design questions: "Design a real-time fraud detection system for a payment API."
- Deep learning concepts: be ready to explain backpropagation, optimizers, regularisation, and transformer attention.
- Model deployment and monitoring: how do you detect data drift, how do you version models, what does your CI/CD for ML look like?
- fast.ai and Hugging Face courses are your best prep resources.
Where to Showcase Your Portfolio
GitHub
The standard place to host your code, notebooks and READMEs. Recruiters and hiring managers expect to find a GitHub link on your CV or LinkedIn.
Notion
A great way to build a visual "portfolio page" that links to your projects, with summaries and screenshots, easy to set up and share as a link.
Personal Website
A simple personal site (even a single page) ties everything together, your story, your projects, and your contact details, all in one place.
What Hiring Managers Actually Look For
- Can you clearly explain your thought process, not just your code?
- Did you ask a meaningful question, or just run a tutorial?
- Is your work clean, documented and easy to follow?
- Do you show curiosity, did you dig deeper than the obvious question?
- Can you communicate findings to a non-technical audience?