Index Ai Academy
Phase 11 · Professional practice · Career

Interviews and your portfolio

Show your work, and solve interview problems the way professionals do.

About 40 minutes · A free account opens the whole lesson

Create a free account Try part of it here

Already have an account? Sign in to open this lesson

Why it matters

Skills only change your life if someone can see them. Hiring managers see hundreds of applicants who finished the same tutorials. What stands out is evidence that you can do the job: projects built like a professional would build them, and interviews where you think clearly out loud. Both can be learned, and you already have the raw material in the capstones you've built.

What you'll be able to do

  • Build a portfolio that shows professional work: a few deep projects with tests, evals and write-ups
  • Know the usual interview loop for AI and software engineering roles
  • Solve coding problems with a method: clarify, give examples, start simple, improve, test
  • Tell work stories with the STAR structure and real numbers

What it covers

  1. A portfolio that gets interviews
  2. A method for coding problems
  3. Test the awkward inputs
  4. Behavioral questions: STAR
  5. From a duty to a result
  6. Keep growing
  7. Brute force, then a hash map
  8. What gets people hired

A portfolio that gets interviews

An artist gets hired on a few finished paintings, not a hundred sketches. Three deep projects beat ten shallow ones. For each, show what a professional would:

  • a README with what it does, why, a quick start, and a screenshot or short demo;
  • tests, and for AI projects an eval set with results ("answers 87% of 200 test questions correctly; 1.2 s median latency; $0.004 per query");
  • a short write-up of decisions and trade-offs: what you tried, what failed, what you'd do next;
  • clean commits and a working deploy, if it's a web app.

Your capstones are a strong start: a RAG app, an MCP server, a coding agent, a production AI service. Extend one into something you care about, such as a tool for your old job, your hobby or a local business, and it stops looking like coursework.

Also valuable: contributions to open source, even small fixes and docs; blog posts explaining what you built; and talks at local meetups.

In plain words: show that you can finish something real, measure it and explain your choices.

The interview loop

An interview process is a series of separate tests, each looking for something different. Most loops for AI engineers and software engineers include:

stagewhat they check
recruiter callfit, interest, logistics
technical screena coding problem, 45 to 60 minutes
coding roundsproblem solving, clean code, testing
system designdesigning a service, often with AI parts (Phase 11)
AI or ML depthhow models, RAG, evals, agents work (Phases 1 to 6, 9, 10)
behavioralhow you work with people, handle conflict, learn from failure

Some companies use a take-home project instead of coding rounds. Treat it like a portfolio piece: tests, a README, and notes on trade-offs.

Quick check
Which portfolio project is likely to impress most?
  1. A deployed support-ticket triage tool with tests, an eval set, results and a write-up of trade-offs
  2. A repository with one large commit called "final"
  3. A list of courses completed
  4. Ten notebooks that follow popular tutorials
Show the answer

A deployed support-ticket triage tool with tests, an eval set, results and a write-up of trade-offs

It shows the whole job: building, measuring, deciding and explaining.

A method for coding problems

A good doctor asks questions before writing a prescription. Interviewers want to see how you think, not only the answer.

  1. Clarify. Restate the problem. Ask about input size, empty input, duplicates, negative numbers, ties, whether the input is sorted, what to return when there's no answer.
  2. Examples. Work one or two small examples by hand, including an edge case.
  3. Start simple. Say the brute-force idea and its cost, such as "check every pair, O(n²)".
  4. Improve. Look for the data structure that removes the repeated work: a hash map, sorting, two pointers, a heap. Say the new cost.
  5. Code clearly. Good names, small helpers. Talk as you write.
  6. Test. Run your examples through the code by hand, then edge cases. Fix bugs calmly; finding your own bug is a good sign, not a bad one.

It's the same habit as professional work: understand the problem, check with examples, and test.

Worked example

Test the awkward inputs

Most candidates test the example they were given. Say the awkward cases out loud too, because that's what interviewers listen for.

def best_gain(prices):
    """The most you could make buying once, then selling once later."""
    if len(prices) < 2:
        return 0
    lowest, best = prices[0], 0
    for price in prices[1:]:
        best = max(best, price - lowest)
        lowest = min(lowest, price)
    return best

cases = {"the example": [7, 1, 5, 3, 6, 4], "only falling": [9, 7, 5], "one price": [5], "empty": [], "all equal": [3, 3, 3]}
for name, prices in cases.items():
    print(f"{name:<12} {best_gain(prices)}")
It runs right here in your browser, with nothing to install.

One pass makes this O(n), and each awkward case has a sensible answer: if the price only falls, you don't buy. Running these before you say "done" shows the habit interviewers hope to see.

Behavioral questions: STAR

Tell it like a short story: set the scene quickly, say what you did, and end with how it turned out. Answer "tell me about a time when..." with Situation, Task, Action, Result. Keep the situation short, spend most of the time on your actions, and end with a concrete result: "cut response time from 4 s to 600 ms", "the team adopted it". Prepare five or six stories: a hard bug, a conflict, a failure and what you learned, a project you led, a time you changed your mind.

Worked example

From a duty to a result

Résumé bullets and interview stories both get stronger with a measured result. This quick check flags lines that only describe a duty.

import re

def has_result(line):
    return bool(re.search(r"\d", line)) and bool(re.search(r"\b(cut|raised|reduced|saved|grew|from|to)\b", line.lower()))

for line in ["Responsible for the checkout service",
             "Worked on improving API performance",
             "Cut p95 checkout latency from 2.1 s to 300 ms by adding a cache",
             "Reduced support tickets 30% with an agent that answers order questions"]:
    print("strong " if has_result(line) else "vague  ", line)
In the lesson you can change this and run it.

The first two could describe anyone. The last two say what changed and by how much, and they give an interviewer something to ask about. Don't overstate your numbers, though, since you'll be asked how you measured them.

Keep growing

This field changes monthly. Doctors keep reading journals long after medical school, and you'll need the same habit. Read release notes and docs from the tools you use, read a paper a month, rebuild something to understand it, and teach what you learn. The habits from this academy, building, measuring and explaining, are what keep you professional as the tools change.

Quick check
An interviewer asks you to remove duplicates from a list. What's your first move?
  1. Say it's impossible in Python
  2. Start typing a solution
  3. Clarify: does order matter, what types, how big, what about an empty list?
  4. Ask for the answer
Show the answer

Clarify: does order matter, what types, how big, what about an empty list?

The answer depends on these. Keeping order rules out a plain set, for example.

Worked example

Brute force, then a hash map

Find two numbers that add up to a target. Same answer, very different cost.

def pair_slow(nums, target):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return (i, j)
    return None

def pair_fast(nums, target):
    seen = {}
    for j, n in enumerate(nums):
        if target - n in seen:
            return (seen[target - n], j)
        seen.setdefault(n, j)
    return None

nums = [8, 3, 11, 5, 7]
print(pair_slow(nums, 12), pair_fast(nums, 12))
In the lesson you can change this and run it.

The slow version checks every pair, O(n²). The fast one remembers what it has seen, O(n). Saying both, and why, is what interviewers listen for.

Try it now

For each number, the loop asks whether its partner was already seen. At 7 it finds 5, stored at index 3, in one pass.

Quick check
setdefault keeps the first index of each number. What does this print?
seen = {}
for i, n in enumerate([4, 7, 1, 7]):
    seen.setdefault(n, i)
print(seen)
  1. {4: 0, 7: 1, 1: 2, 7: 3}
  2. {4: 0, 7: 3, 1: 2}
  3. {4: 0, 7: 1, 1: 2}
  4. {0: 4, 1: 7, 2: 1, 3: 7}
Show the answer

{4: 0, 7: 1, 1: 2}

The second 7 doesn't replace the first, because the key already exists, so the result is {4: 0, 7: 1, 1: 2}. Dicts keep one value per key.

What gets people hired

Depth beats number of projects. One project that's deployed, tested and written up teaches an interviewer far more than ten tutorials. Be ready to explain why you made each decision, and what you'd change now.

Clarify before you code. Jumping straight in looks keen, and it often means solving the wrong problem. Two minutes of questions shows the judgment interviewers are looking for.

Think out loud. A math teacher wants to see your working, not only your answer. An interviewer can't give you credit for what they can't see. If you go silent for ten minutes and present an answer, they've learned little about how you work. If you say "I'm stuck on the empty case", they can help, and that conversation is part of what they're assessing.

Finish your stories with a result. "We improved the API" could mean anything. "Latency fell from 2 s to 300 ms" is a story they'll remember.

Practice what you just read

  • 3 code examples you can edit and run
  • a practice exercise that checks your code
  • a 5-question quiz
  • 4 review cards for spaced repetition

Create a free account

Try a quiz question

What should you do first in a coding interview?

  1. Clarify the problem: inputs, edge cases, constraints and expected output
  2. Start typing the fastest solution you can think of, to show that you're quick
  3. Ask for the answer, and explain it back, to show that you can follow code
  4. Write tests for a different problem, to show that you care about testing

Answer it at the end of the lesson to see if you're right, and why.

Before this lesson