Resume, Portfolio & GitHub Profile Module 2 – Structure and format
Resume sections, order and length
The sections a tech resume needs and their order for you, what the contact block holds and leaves out, one page or two by official guidance, and headings.
What you will learn
- Choose the sections a tech resume needs and their order for your situation
- Write a contact block that holds only what an employer needs
- Decide between one and two pages using official guidance
- Use standard headings so that people and parsers find each section
Before you start
What you’ll learn · Before you start
What you will learn
- Choose the sections a tech resume needs and their order for your situation
- Write a contact block that holds only what an employer needs
- Decide between one and two pages using official guidance
- Use standard headings so that people and parsers find each section
Before you start
On this page
MIT’s careers office tells students to stick to one page unless they have extensive experience or an advanced degree. Canada’s Job Bank allows up to two pages, and Google says it has no length requirement at all. Behind the different numbers is one rule: every section, and every line in it, has to earn its place for the reader you are writing to.
This lesson builds the skeleton of a tech resume: which sections it needs, their order for a student, an experienced engineer and a career switcher, what the contact block holds and what it leaves out, how long the whole page should be, and why standard headings help people and software alike.
A tech resume is built from a few core sections
The resume of Asha, the invented backend engineer this track follows, has six sections, and most tech resumes need the same ones. Each holds one kind of evidence:
| Section | What it holds | When to include it |
|---|---|---|
| Contact | Name, city, phone, e-mail and links to your work | Always, at the top |
| Summary | Two lines: the role you want and your strongest result | Optional: it helps experienced people and career switchers |
| Experience | Jobs and internships, newest first, each with results | Whenever you have them |
| Projects | What you built, with what, and what it did | Always for students and switchers, often for everyone |
| Skills | The languages and tools you can defend in an interview | Always, kept short |
| Education | Degree, institution, year and grade where it is asked for | Always |
Achievements, certifications, publications and volunteering get a section of their own only when they add evidence the core sections do not already hold. The UK’s National Careers Service lists the sections of a CV in much the same way: contact details, an introduction, education, work history and references. On the last one it sets a limit: no other person’s contact details belong on your CV, and it suggests saying that references are available on request instead. Canada’s Job Bank goes further and says to keep references on a separate sheet and give them only when asked, so the space is better spent on evidence.
A section for every kind of fact
Wrong: separate sections for hobbies, languages spoken, strengths, a declaration and references. Right: the core sections, plus an extra one only when it holds evidence for this job, such as a certification the posting asks for. Every heading costs space in a first screen that may end after a few dozen words.
Checkpoint
Check: The core sections of a tech resume
Order the sections by your strongest evidence
The order of sections is not fixed; it follows what is strongest about you. The National Careers Service puts education after the introduction early in a career and suggests moving work history first once you have plenty of it. Within each section the order is reverse-chronological order: Listing the most recent job, project or qualification first and earlier ones after it, the order most resumes and CVs use.: Europass, the EU’s CV format, says to “always list the most recent experience on the top”. Here are three skeletons built that way:
| Place | Final-year student | Engineer, three years | Mechanical engineer moving into data |
|---|---|---|---|
| 1 | Contact | Contact | Contact |
| 2 | Education | Summary | Summary: the move, in one line |
| 3 | Projects | Experience | Projects in data analysis |
| 4 | Experience: internships | Projects | Experience, dated, newest first |
| 5 | Skills | Skills | Skills |
| 6 | Education | Education |
The student leads with the degree and the projects, because they are the evidence. The engineer leads with three years of results. The switcher’s case is the subtle one: the projects in the new field come first, but the dated history stays, so a reader can see what the projects add to. Hiding the dates behind a skills-first, or functional, layout sends a reader looking for what is missing; Europass asks you to explain long gaps instead, and that is MySmartCoPilot guidance too.
Key idea
Put the section with your strongest evidence for this job first after the contact block, and order everything inside each section newest first.
Checkpoint
Check: Ordering sections by evidence
The contact block holds only what an employer needs
The National Careers Service lists what the contact block: The lines at the top of a resume that say who you are and how to reach you: your name, city, phone, e-mail and links to your work. needs: your name, phone number, e-mail address and a link to a work profile such as LinkedIn. Add your city, so an employer knows where you are, and a link to your work, such as GitHub or a portfolio. A full street address adds nothing a first reader needs, so the city is enough (MySmartCoPilot guidance).
What it leaves out is set out just as plainly. The National Careers Service says not to include your age, your date of birth, whether you are married or your nationality; Canada’s Job Bank adds weight, height, religious preference and political views, and says never to include your Social Insurance Number; MIT’s careers office adds health. The program checks a contact block against those lists, before and after Asha’s edit:
# Checks a resume's contact block against the official guides this lesson cites: what it needs (a name, a phone
# number, an e-mail address and a link to your work profile, as the UK's National Careers Service lists them) and what
# it should leave out (age and date of birth, marital status and nationality in the UK guide; weight, height, religion
# and political views in Canada's Job Bank, which also says never to include your Social Insurance Number, so no
# identity number goes on a resume). Every person, address and number below is invented. Press Edit, paste your own
# contact block into MINE, and run it again.
import re
BEFORE = """\
Asha Verma
D/O Rajesh Verma
Flat 12, Example Residency, Example Road, Pune 411001
Date of birth: (a full date) · Marital status: Single · Religion: (her religion)
Phone: +91 01234 56789 · asha.verma@example.com
"""
AFTER = """\
Asha Verma · Backend engineer
Pune · +91 01234 56789 · asha.verma@example.com
linkedin.com/in/asha-verma-example · github.com/asha-verma-example
"""
MINE = "" # your contact block, one line per line
# What to leave out, and the guide that says so.
LEAVE_OUT = [
(r"date of birth|\bdob\b|\bage\b|\bborn\b", "date of birth or age (National Careers Service)"),
(r"marital|married|single\b", "marital status (National Careers Service, Job Bank)"),
(r"nationality|citizen of", "nationality (National Careers Service)"),
(r"religion|caste|community", "religion (Job Bank)"),
(r"height|weight", "height or weight (Job Bank)"),
(r"\b[DSW]/O\b|father|mother|husband", "family details (no guide asks for them)"),
(r"aadhaar|\bpan\b|passport no|social insurance|\bsin\b|\bssn\b", "an identity number (Job Bank: never your SIN)"),
(r"\b\d{6}\b|flat|house no|lane|street", "a full postal address (the city is enough)"),
]
# What an employer needs, and how to recognise it.
NEEDS = [
(r"[\w.+-]+@[\w-]+\.[\w.]+", "an e-mail address"),
(r"\+?\d[\d ]{9,}\d", "a phone number"),
(r"linkedin\.com/|github\.com/|https?://", "a link to your work"),
]
def check(name, block):
print(f"{name}:")
for line in block.strip().splitlines():
problems = [why for pattern, why in LEAVE_OUT if re.search(pattern, line, re.IGNORECASE)]
print(f" {'leave out' if problems else 'keep':<10}{line}")
for why in problems:
print(f" {'':<10}↳ {why}")
missing = [what for pattern, what in NEEDS if not re.search(pattern, block, re.IGNORECASE)]
print(f" Needed and missing: {', '.join(missing) if missing else 'nothing'}")
print()
check("Before", BEFORE)
check("After", AFTER)
if MINE.strip():
check("Yours", MINE) Output
Before:
keep Asha Verma
leave out D/O Rajesh Verma
↳ family details (no guide asks for them)
leave out Flat 12, Example Residency, Example Road, Pune 411001
↳ a full postal address (the city is enough)
leave out Date of birth: (a full date) · Marital status: Single · Religion: (her religion)
↳ date of birth or age (National Careers Service)
↳ marital status (National Careers Service, Job Bank)
↳ religion (Job Bank)
keep Phone: +91 01234 56789 · asha.verma@example.com
Needed and missing: a link to your work
After:
keep Asha Verma · Backend engineer
keep Pune · +91 01234 56789 · asha.verma@example.com
keep linkedin.com/in/asha-verma-example · github.com/asha-verma-example
Needed and missing: nothing
Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 contact_check.py
Runs on this device, in your browser. The first run downloads Python (about 13.5 MB), which is kept for the next runs.
Your run, in this browser
The edit dropped three lines, the family details, the full address and the personal attributes, moved the phone and
the e-mail beside her city, and added a line with two links to her work. Press Edit and paste your own contact block
into MINE to check it the same way.
Aadhaar, PAN and other identity numbers
Identity numbers never go on a resume. The Aadhaar Act says that no Aadhaar number collected under it may be published, displayed or posted publicly (section 29(4)), and a resume is copied to people and systems you cannot see. Give an Aadhaar or PAN number only when an employer asks for it in its own verification process, after an offer.
Checkpoint
Check: What the contact block holds and leaves out
One page or two: what the official guides say
The guides agree more than their numbers suggest. MIT’s careers office keeps a resume to one page except for people with extensive experience or an advanced degree, and describes resumes as typically one to two pages. Canada’s Job Bank says to limit a resume to two pages and to cut or minimise experience that is more than 15 years old. Google has no length requirement but says that being clear and succinct is key. And an employer’s own limit, or a placement office’s, comes before all of them.
None of the guides puts a number on “extensive experience”. This track uses five years or more of relevant experience as the line for a second page; that is MySmartCoPilot guidance. Answer three questions about yourself, and the table marks the length that fits:
Answer the questions above: the table then marks what fits your case and says why the rest does not.
| Length | What the guides say | What the reader gets | When it backfires |
|---|---|---|---|
| One page Fits when: early career, or a short and focused history | Good MIT's default, unless experience is extensive | Good a short first screen sees most of the page | Poor when cramming shrinks the text below 10 pt |
| Two pages Fits when: extensive relevant experience or an advanced degree | Mixed Job Bank's limit; MIT allows it with extensive experience | Mixed page two is read only if page one earns it | Poor when page two holds old or minor work |
| The employer's limit Fits when: a posting, portal or placement office sets one | Good every guide gives way to the employer's own rule | Good exactly what this reader asked for | Good only when ignored: a file over a limit can be cut off |
How the answers decide
- “Does the posting, the portal or your placement office set a length?” Yes, it sets one: rules out One page and Two pages. The employer's rule decides this application, over any general advice, this lesson's included.
- “Does the posting, the portal or your placement office set a length?” No, nothing is set and “How many years of experience relevant to this role do you have?” Under five years and “Do you hold an advanced degree, such as an MSc or a PhD, with work to show from it?” No: rules out Two pages and The employer's limit. MIT's default is one page unless experience is extensive or you hold an advanced degree; under five years, one page usually holds your evidence.
- “Does the posting, the portal or your placement office set a length?” No, nothing is set and “How many years of experience relevant to this role do you have?” Five years or more: rules out The employer's limit and adds a caveat to One page. Two pages are within MIT's and Job Bank's guidance once experience is extensive. One page still works if it holds your strongest evidence; cut or shorten roles older than 15 years.
- “Does the posting, the portal or your placement office set a length?” No, nothing is set and “Do you hold an advanced degree, such as an MSc or a PhD, with work to show from it?” Yes: rules out The employer's limit and adds a caveat to One page. MIT allows more than one page with an advanced degree. A second page is allowed, not required, and must earn its place.
In short: one page early in a career, two once your relevant experience is extensive or you hold an advanced degree, and always the employer’s limit when there is one. Two pages are a ceiling, not a target: in the Ladders study, the time recruiters spent on a second page depended strongly on how compelling the first page was.
Checkpoint
Check: One page or two
Standard headings let people and parsers find each section
Greenhouse lists resumes “without clear sections” among the causes of a partial parse, and the best-performing resumes in the Ladders eye-tracking study had clearly marked section and title headers. A creative heading costs on both counts:
| Instead of | Write | Why |
|---|---|---|
| My journey | Experience | The word a reader scans for and a parser looks for |
| Toolbox | Skills | Recognised at once |
| Things I’ve built | Projects | Says what the section is |
| Where I studied | Education | The standard name |
| About me | Summary | Short, and expected under the contact block |
Use the same style for every heading and every entry, too. Greenhouse names “differing formats throughout each section” as a cause of partial parses, so one way of writing a job title line, and one way of writing dates, goes all the way down the page.
Resume Builder Start from standard sections in the usual order, and reorder them for your own case.Checkpoint
Check: Standard headings
Practise: plan the sections and the length of four resumes
Turn the rules of this lesson into a function that plans a resume for any person: its sections in order and its number of pages. The sample tests plan the people of the skeletons above, and two more:
Exercise · Easy · Python
Plan the sections and the length of four resumes
Write plan(person) in plan.py. A person is a dictionary with five keys: "student" (still studying), "years" (whole years of work in the field they are applying to), "switching" (moving into a new field), "advanced_degree" (a postgraduate degree, such as an MSc or a PhD) and "limit" (the number of pages the employer allows, or None). plan returns a pair (sections, pages) by the rules of this lesson:
sectionsalways starts with"Contact"."Summary"comes next for career switchers and for people with three years or more in the field (MySmartCoPilot guidance).- Students, and people with less than one year in the field who are not switching, continue with
"Education","Projects","Experience","Skills": education first early in a career, as the UK's National Careers Service advises. - Career switchers continue with
"Projects","Experience","Skills","Education": the projects in the new field are their strongest evidence (MySmartCoPilot guidance), and the dated history follows. - Everyone else continues with
"Experience","Projects","Skills","Education". pagesis the employer'slimitwhen there is one. Otherwise it is 2 for five years or more in the field or an advanced degree, and 1 for everyone else.
The sample tests plan the people of the lesson's skeletons and two more.
Starter code · plan.py
def plan(person):
"""Return (sections, pages) for a person: {"student", "years", "switching", "advanced_degree", "limit"}."""
sections = ["Contact"]
pages = 1
# Replace this comment with the rules of the prompt.
return sections, pages The sample tests · test_plan.py
from plan import plan
STUDENT = {"student": True, "years": 0, "switching": False, "advanced_degree": False, "limit": None}
ENGINEER = {"student": False, "years": 3, "switching": False, "advanced_degree": False, "limit": None}
SWITCHER = {"student": False, "years": 0, "switching": True, "advanced_degree": False, "limit": None}
SENIOR = {"student": False, "years": 7, "switching": False, "advanced_degree": False, "limit": 1}
def test_final_year_student():
"""puts education first for a final-year student, on one page"""
assert plan(STUDENT) == (["Contact", "Education", "Projects", "Experience", "Skills"], 1)
def test_engineer_with_three_years():
"""leads with a summary and experience after three years, still on one page"""
assert plan(ENGINEER) == (["Contact", "Summary", "Experience", "Projects", "Skills", "Education"], 1)
def test_career_switcher():
"""puts a switcher's projects in the new field before the dated history"""
assert plan(SWITCHER) == (["Contact", "Summary", "Projects", "Experience", "Skills", "Education"], 1)
def test_employer_limit_wins():
"""keeps a senior engineer to the one page the employer allows"""
sections, pages = plan(SENIOR)
assert sections == ["Contact", "Summary", "Experience", "Projects", "Skills", "Education"]
assert pages == 1
def test_two_pages_with_extensive_experience_or_a_degree():
"""allows two pages from five years in the field, or with an advanced degree"""
assert plan(dict(SENIOR, limit=None))[1] == 2
assert plan(dict(ENGINEER, advanced_degree=True))[1] == 2
assert plan(dict(ENGINEER, years=4))[1] == 1
def test_new_graduate_without_a_job_yet():
"""puts education first for a graduate who has not worked in the field yet"""
graduate = dict(STUDENT, student=False)
assert plan(graduate) == (["Contact", "Education", "Projects", "Experience", "Skills"], 1) A hint
Build the list in two steps: first ["Contact"] plus "Summary" when rule 1 says so, then one of three tails chosen with if and elif (students and new starters, switchers, everyone else). Work out pages separately: check limit first, because the employer's rule wins over everything else.
Results of the sample tests
| Test | Result | Details |
|---|
What your code printed
The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.
Then work through the questions on sections, order, contact details, length and headings; your shakiest topic is asked about first:
Practice that adapts to you
Practise this lesson
10 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.
Interview questions
Warm-up (fresher to mid-level): How do you decide the order of the sections on your resume?
By where my strongest evidence for the job is. The contact block always comes first. Early in a career that is usually education and projects, so they come next; with a few years of relevant work, experience moves up, as the UK’s National Careers Service suggests. Someone moving into a new field leads with the projects that prove the new skill but keeps the dated history below them. Inside every section the order is reverse-chronological, newest first. And if an employer or a placement office asks for a particular order or length, its rule wins.
Two questions of this module’s bank take the decisions further:
Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.
-
Fresher to senior
You left a job eight months ago to care for a parent. A friend suggests a skills-first "functional" resume with no dates, so the gap does not show. What do you do instead, and why?
-
Mid to staff
You have twelve years of experience and a three-page resume, and the employer sets no limit. Bring it to two pages: what do you cut, shorten or merge, and in what order?
Flashcards · 8 cards
Recall it, then check
Say the answer to yourself before you look: recalling it is what makes it stick.
-
Which sections does a typical tech resume need?
A contact block, experience, projects, skills and education. A short summary is optional, and an extra section such as certifications earns its place only when it adds evidence for the job.
-
Should a resume list your references?
No. The UK's National Careers Service says another person's contact details do not belong on your CV, and Canada's Job Bank suggests a separate sheet that you hand over only when asked.
-
How do you decide the order of a resume's sections?
After the contact block comes whichever section holds your strongest evidence for the job: education and projects early in a career, experience once you have a few years of it. Inside each section, put the newest item first.
-
Why should someone changing fields keep a dated work history?
A skills-first layout hides when things happened, and readers then hunt for what is missing. Put projects in the new field first, with the dated jobs below them.
-
What goes in a resume's contact block, and what stays out?
Your name, city, phone, e-mail and links to your work. Age, date of birth, marital status, nationality, religion, family details, a street address and identity numbers all stay out.
-
Why should an Aadhaar or PAN number never appear on a resume?
The Aadhaar Act bars publishing or publicly displaying an Aadhaar number collected under it, and a resume is copied to people and systems you never see. Give such numbers only in an employer's own checks after an offer.
-
When does a resume grow from one page to two?
MIT keeps it to one page unless you have extensive experience or an advanced degree; this track puts that line at five or more years of relevant work. Two pages are a ceiling, and an employer's own limit always wins.
-
Why write “Experience” rather than a creative heading such as “My journey”?
It is the word readers scan for and parsers look for. Greenhouse lists unclear sections, and formats that change within a section, among the causes of a partial parse.
Key takeaways
- A tech resume needs a contact block, experience, projects, skills and education, with a summary when it helps and extra sections only when they add evidence.
- Order the sections by your strongest evidence for the job, and everything inside them newest first; switchers lead with projects but keep the dated history.
- The contact block holds your name, city, phone, e-mail and links, and leaves out age, date of birth, marital status, nationality, religion, family details and identity numbers.
- One page early in a career and two at most with extensive experience or an advanced degree, unless the employer sets its own limit.
- Standard headings and one consistent style help people and parsers find each section.
Terms in this lesson
- contact block
- The lines at the top of a resume that say who you are and how to reach you: your name, city, phone, e-mail and links to your work.
- reverse-chronological order
- Listing the most recent job, project or qualification first and earlier ones after it, the order most resumes and CVs use.
References
- How to write a CV (National Careers Service (UK))
- How to write a good resume (Job Bank, Government of Canada)
- Resumes (MIT Career Advising and Professional Development)
- Curricula vitae (CVs) (MIT Career Advising and Professional Development)
- Our hiring process (How we hire) (Google Careers)
- Create your Europass CV (Europass, European Union)
- Unsuccessful resume parse (Greenhouse Support)
- Eye-Tracking Study (archived copy of the report) (Ladders)
- The Aadhaar Act, 2016, as amended: section 29 (Unique Identification Authority of India)
Related tools
Report a problem with this lesson
Kept only in this browser. Your Learn progress