Skip to content
Search lessons, topics, tests…
Esc

    ↑ ↓ moveEnter openEsc close

    Guided course · AI and Career Skills for .NET Developers

    Behavioral and Senior-Round Playbook: back to the course

    Module 1 · Stories and the Interview Loop · Lesson 2 of 11

    STAR Stories That Land: Situation, Task, Action, Result, and How to Check Your Balance

    Learning outcome

    You can tell a behavioral story in STAR form with most of the time on your own actions, a result that can be checked, and a clear "I" inside the team's "we". You can also measure a written draft (words per section, "I" versus "we", whether the result is measurable, speaking time) so you fix the story before the interview instead of during it.

    Intuition

    The interviewer needs to write down three things: what the problem was, what you did, and what changed because of it. STAR is a container that makes those three easy to find. Most weak stories are not untrue; they are all setup and no action.

    flowchart LR
        S["Situation: just enough context"] --> T["Task: what you owned, the constraint"] --> A["Action: your decisions, in order, with reasons"] --> R["Result: what changed, measured, and what you learned"]

    Deep dive

    • Situation: one or two sentences. Name the system, the problem, and why it mattered. Skip company history.
    • Task: your responsibility and the constraint: the deadline, the scope, or "without a rewrite". This is where the interviewer learns your role.
    • Action, the core:
      • Several concrete steps, each with a reason: "I profiled ... because ...".
      • Include one moment of judgment (a trade-off or a person you had to persuade); that is where seniority shows.
      • Use "I" for what you did and "we" for what the team did, and be honest about which was which.
    • Result:
      • What changed, measured if you can: latency, failures, time saved, incidents avoided, adoption by other teams. Use numbers you can defend if asked how they were measured. Never invent or round them up.
      • Add what you learned, or what you would do differently.
    • Length: keep the first telling short and let the interviewer pull detail with follow-ups. A story that runs long with no pause leaves no room for the questions that score you.
    • Follow-ups to expect: "What would you do differently?", "What did your manager think?", "How did you measure that?", "What was the hardest part?" Prepare one sentence for each.
    • Variants: some guides use STAR-L (with Learning) or CAR (Challenge, Action, Result). The content is the same; what matters is action-heavy and measurable.

    Code example

    A small checker for written drafts. Both stories are fictional samples written for this lesson. The speaking pace is an example value; time yourself reading aloud and put in your own. The digit check is only a heuristic for a measurable result: a digit alone does not prove measurement, and a measurable outcome can be written without digits.

    C#
    // STAR story checker: splits a story into Situation / Task / Action / Result, then reports the balance,
    // "I" versus "we", whether the result is measurable, and the speaking time at a pace you choose.
    using System.Text.RegularExpressions;
    
    const double WordsPerMinute = 140;   // an example pace: time yourself reading aloud and put your own number here
    
    var weak = """
    S: Our team had a big project at my last company and there were a lot of problems with the old system, which was a monolith that had been built over many years by many different teams and nobody really understood all of it, and deployments were painful and slow and the database was overloaded most days.
    T: We needed to make it better.
    A: We worked on it together and we decided to split some parts out and we used Azure.
    R: It went well and everyone was happy.
    """;
    
    var strong = """
    S: Checkout in our .NET monolith timed out during sales; p95 latency was 4.2 s against a 1 s target, and 3% of orders failed.
    T: I owned the checkout path for the quarter and had to bring p95 under 1 s before the next sale, without a rewrite.
    A: I profiled the slowest requests with OpenTelemetry traces and found one query issued 38 times per order. I replaced it with a single batched query, added a Redis cache for the price list, and wrote a load test that reproduced the sale traffic. I asked the payments team to review the cache invalidation because they owned the price rules, and they found an edge case we fixed before release. I rolled it out behind a feature flag to 10% of traffic first.
    R: p95 dropped to 0.6 s, failed orders fell to 0.2%, and the next sale ran with no incidents. I wrote the profiling steps into our runbook, and two other teams used it the following month.
    """;
    
    Report("weak", weak);
    Report("strong", strong);
    
    static void Report(string name, string story)
    {
        var parts = story.Split('\n', StringSplitOptions.RemoveEmptyEntries)
                         .Select(l => (Key: l[0], Text: l[2..].Trim()))
                         .ToDictionary(p => p.Key, p => p.Text);
        int Words(string s) => Regex.Matches(s, @"[\w'.%]+").Count;
        int total = parts.Values.Sum(Words);
        Console.WriteLine($"== {name} story: {total} words, about {total / WordsPerMinute * 60:0} s at {WordsPerMinute} wpm");
        foreach (var (k, label) in new[] { ('S', "Situation"), ('T', "Task"), ('A', "Action"), ('R', "Result") })
            Console.WriteLine($"   {label,-9} {Words(parts[k]),4} words  {100.0 * Words(parts[k]) / total,5:0}%");
        string all = string.Join(' ', parts.Values);
        int i = Regex.Matches(all, @"\bI\b").Count, we = Regex.Matches(all, @"\b[Ww]e\b").Count;
        bool measurable = Regex.IsMatch(parts['R'], @"\d");
        Console.WriteLine($"   'I' {i} times, 'we' {we} times; measurable result: {measurable}");
        var flags = new List<string>();
        if (Words(parts['A']) * 2 < total) flags.Add("Action is under half the story");
        if (Words(parts['S']) > Words(parts['A'])) flags.Add("more setup than action");
        if (i == 0) flags.Add("your own role is invisible");
        if (!measurable) flags.Add("no measurable result");
        Console.WriteLine($"   flags: {(flags.Count == 0 ? "none" : string.Join("; ", flags))}");
    }

    Output (.NET 10, Release)

    Text
    == weak story: 86 words, about 37 s at 140 wpm
       Situation   56 words     65%
       Task         6 words      7%
       Action      17 words     20%
       Result       7 words      8%
       'I' 0 times, 'we' 4 times; measurable result: False
       flags: Action is under half the story; more setup than action; your own role is invisible; no measurable result
    == strong story: 164 words, about 70 s at 140 wpm
       Situation   24 words     15%
       Task        23 words     14%
       Action      82 words     50%
       Result      35 words     21%
       'I' 6 times, 'we' 1 times; measurable result: True
       flags: none

    Code walkthrough

    • The weak story has 86 words, and 65% of them are Situation. The Action is 20% and contains no decision, only "we worked on it together".
    • "I" appears 0 times and "we" 4 times, so the interviewer cannot tell what the candidate did. The result ("everyone was happy") has no number, and the checker raised all four flags.
    • The strong story has 164 words (about 70 s at the example pace of 140 wpm). Action is 50% of it, and the Situation is down to 15%.
    • "I" appears 6 times for the candidate's own steps, and "we" once for shared work. The result is measurable (p95 from 4.2 s to 0.6 s, failed orders from 3% to 0.2%), and there were no flags.
    • The strong Action contains the senior signals: evidence first (traces), a trade-off (cache plus invalidation), influence (asking the payments team, who found an edge case), and risk control (a 10% rollout behind a feature flag).

    Failure modes

    • Long setup and a one-line action.
    • "We" all the way through, so your role is invisible.
    • A vague result ("it went well"), or numbers you cannot explain.
    • A story with no tension: nothing was hard, so nothing shows judgment.
    • Memorised wording that falls apart at the first follow-up question.
    • Criticising former colleagues to make yourself look better.

    Interview angle

    "Tell me about a time you improved the performance of a system." Answer with the strong sample's shape:

    • one sentence of context with the number that hurt;
    • your ownership and the constraint;
    • three or four actions with reasons, including who you involved;
    • the measured result and what you made reusable.

    Then stop and let the interviewer ask.

    Practice questions

    1. What share of a STAR story should be Action?

    Answer: The largest share, about half is a good target; the checker flags anything under half.

    1. You did the work with two teammates. How do you tell it?

    Answer: "We" for the shared parts and "I" for what you personally decided or did, said plainly.

    1. You do not have exact numbers. What do you say?

    Answer: The measure you had, how it was measured, and its direction ("p95 roughly halved on our dashboard"). Never invent precision.

    1. Name two follow-ups to prepare for every story.

    Answer: "What would you do differently?" and "How did you measure the result?"

    Revision checklist

    • S and T: short; T states your ownership.
    • A: about half; steps with reasons; one judgment call; "I" versus "we".
    • R: measured, defensible, plus the lesson learned.
    • Rehearse out loud; time yourself; leave room for follow-ups.

    Analogy

    Everyday picture

    A good bug report

    Steps to reproduce (situation and task), what you did (action), expected versus actual (result). A bug report with three paragraphs of background and no steps gets closed; so does a story.

    Quick reference

    STAR in four lines

    • S: system, problem, why it mattered (1-2 sentences).
    • T: your ownership + constraint.
    • A: 3-5 steps, each with "because"; one trade-off; who you involved.
    • R: measured change + what you learned.
    Sign in to mark lessons done and keep your place in the course.Sign in