Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

Professional English for Developers  Module 3 – Grammar that changes meaning at work

Tenses at work: updates, changelogs and stories

Choose the present perfect or the past simple for finished work, the right forms for plans, and one pattern each for changelogs, timelines and stories.

  • Beginner
  • 20 minutes
  • Examples run with Node.js 24.21.0 and quickjs 0.32.0
  • By MySmartCoPilot
Free core, Pro depth: 7 of 20 minutes free
Free: Finished work: the present perfect, unless you say when · Work in progress and plans: continuous, going to or will. With a pass: 3 in-depth parts and 3 interview answers, about 13 minutes.

What you will learn

  • Choose the present perfect or the past simple when you report finished work
  • Describe work in progress, plans and schedules with the right present and future forms
  • Avoid continuous forms with state verbs, as in "I am knowing the cause"
  • Write changelogs, incident timelines and stories about past projects with consistent tenses

Before you start

What you’ll learn · Before you start

What you will learn

  • Choose the present perfect or the past simple when you report finished work
  • Describe work in progress, plans and schedules with the right present and future forms
  • Avoid continuous forms with state verbs, as in "I am knowing the cause"
  • Write changelogs, incident timelines and stories about past projects with consistent tenses

Before you start

On this page

“I have fixed the login bug yesterday” asks the listener to hear two things that English keeps apart: have fixed says that the result matters now, and yesterday says when it happened. In one week of 15 stand-up lines, checked below, five lines had a tense slip, and three of them were this one.

This lesson shows which tense each kind of work report takes. Finished work takes the present perfect: The verb form have or has with a past participle, as in "I've fixed the bug": a finished action whose result matters now, with no finished time named. or the past simple: The verb form for an action finished at a time in the past, as in "I fixed the bug yesterday". Regular verbs add -ed., work in progress the -ing form, and what comes next going to or will. Commit subjects take the imperative: The form of a verb that gives an instruction or an order, as in "Fix the crash" or "Open the app". Commit subjects and how-to steps use it., and changelog entries keep one form. Incident timelines and stories take the past simple, with the past continuous for background and the past perfect for what happened earlier.

Finished work: the present perfect, unless you say when

Compare three lines from a Monday stand-up:

  • “I’ve fixed the login bug.” The present perfect: the fix is done, and its result, a working login, matters now.
  • “I fixed the login bug yesterday.” The past simple: the line says when.
  • “I have fixed the login bug yesterday.” A slip: the two forms pull in different directions.

The British Council’s grammar pages draw the line at time: once you say when something happened, or treat that period of your life as finished, use the past simple. The present perfect is for a past action with a result now, and for a period that is not over yet, such as today or this sprint. How long is a third case: with since and for, an activity that goes on takes the present perfect continuous, “I’ve been working on the refund API since Monday”, and a count of results the simple form, “I’ve closed four tickets since Monday”.

Step through the questions that choose the verb form of one line:

Interactive · stage by stage Choosing the verb form for one line of an update Step through six lines of one week of stand-ups. Each line answers one question, and the answer gives its verb form.
Choosing the verb form for one line of an update, step 7 of 7. Showing One line of your update (next), Done: do you say when? (no time: present perfect), Doing: for how long? (since: have been + -ing), Next: how settled? (decided now: will), The verb form (I'll pair with Ravi). In focus: Next: how settled?.the next lineOne line of your updatenextDone: do you say when?no time: present perfectDoing: for how long?since: have been + -ingNext: how settled?decided now: willThe verb formI'll pair with Ravi

The drawing shows the whole scene; its 7 steps are listed below.

Every step as text
  1. Finished, with a time. The first line, "I have fixed the login bug yesterday", reports finished work, and it says when: yesterday. A finished time takes the past simple.
  2. Finished, no time. Without the time, "I have fixed the login bug" is right: the present perfect reports a past action whose result, a working login, matters now.
  3. In progress now. "Today I work on the refund API" describes work going on now. Work in progress takes be and the -ing form: "Today I'm working on the refund API."
  4. In progress, how long. "I am working on it since Monday" says how long. How long, with since or for, takes the present perfect continuous: "I've been working on it since Monday."
  5. An arrangement. "We are releasing it on Friday" is agreed with other people, with a known day. An arrangement takes be and the -ing form, so the line is already right.
  6. A plan made earlier. "I'm going to look at the flaky test next" is an intention you formed before the stand-up, so it takes going to.
  7. Decided as you speak. Asked who can pair on the migration, you answer "I'll pair with Ravi after lunch": a decision made at the moment of speaking takes will.

The program checks one week of stand-up lines for these slips and for one more, the present simple for work in progress. Press Edit and add a line of your own to WEEK:

One week of stand-up lines, checked for tense slips JavaScript · standups/standup_week.mjs
// A week of stand-up lines checked for three tense slips this lesson names: the present perfect next to a finished
// time ("I have fixed it yesterday"), the present simple for work in progress ("Today I work on ..."), and a present
// form with since or for ("I am working on it since Monday").

const PERFECT = /\b(?:have|has|'ve|'s)\s+(?:\w+ly\s+)?(?:\w+ed|written|done|seen|made|sent|built|run|found|given|taken|gone|begun|broken)\b/i;
const FINISHED_TIME = /\b(?:yesterday|last (?:night|week|month|sprint|Monday|Tuesday|Wednesday|Thursday|Friday)|\w+ ago|at \d{1,2}:\d{2}|on (?:Monday|Tuesday|Wednesday|Thursday|Friday))\b/i;
const NOW_SIMPLE = /\b(?:today|now|currently|this week),?\s+(?:I|we)\s+(?:work|fix|write|test|build|review|migrate)\b/i;
const HOW_LONG = /\b(?:am|is|are|'m|'re)\s+\w+ing\b[^.]*\b(?:since|for (?:\d+|a few|two|three) \w+)\b/i;

function slips(line) {
  const out = [];
  if (PERFECT.test(line) && FINISHED_TIME.test(line)) out.push(`says when (${line.match(FINISHED_TIME)[0]}): past simple`);
  if (NOW_SIMPLE.test(line)) out.push('work in progress: be + -ing');
  if (HOW_LONG.test(line)) out.push('says how long: have been + -ing');
  return out;
}

const WEEK = [
  ['Monday', [
    ['I have fixed the login bug yesterday.', 'I fixed the login bug yesterday.'],
    ['Today I work on the refund API.', "Today I'm working on the refund API."],
    ['No blockers.'],
  ]],
  ['Tuesday', [
    ['I am working on the refund API since Monday.', "I've been working on the refund API since Monday."],
    ['I have reviewed two pull requests.'],
    ["The staging database is down, so I'm writing unit tests instead."],
  ]],
  ['Wednesday', [
    ['I finished the refund API yesterday evening.'],
    ['We are releasing it on Friday.'],
    ["I'm going to look at the flaky checkout test next."],
  ]],
  ['Thursday', [
    ['I have deployed the fix to staging at 11:00.', 'I deployed the fix to staging at 11:00.'],
    ['QA is testing it now.'],
    ["I'll pair with Ravi on the migration after lunch."],
  ]],
  ['Friday', [
    ['The release went out at 16:00 IST.'],
    ['I have written the release notes last night.', 'I wrote the release notes last night.'],
    ["Next week I'm starting the billing work with Meera."],
  ]],
];

let lines = 0;
let before = 0;
let after = 0;
for (const [day, items] of WEEK) {
  console.log(day);
  for (const [line, fixed] of items) {
    lines++;
    const found = slips(line);
    before += found.length ? 1 : 0;
    after += slips(fixed ?? line).length ? 1 : 0;
    console.log(`  ${line}`);
    for (const f of found) console.log(`      ${f}`);
    if (fixed) console.log(`    -> ${fixed}`);
  }
}
console.log(`\n${lines} lines: ${before} to fix before, ${after} after`);

Output

Monday
  I have fixed the login bug yesterday.
      says when (yesterday): past simple
    -> I fixed the login bug yesterday.
  Today I work on the refund API.
      work in progress: be + -ing
    -> Today I'm working on the refund API.
  No blockers.
Tuesday
  I am working on the refund API since Monday.
      says how long: have been + -ing
    -> I've been working on the refund API since Monday.
  I have reviewed two pull requests.
  The staging database is down, so I'm writing unit tests instead.
Wednesday
  I finished the refund API yesterday evening.
  We are releasing it on Friday.
  I'm going to look at the flaky checkout test next.
Thursday
  I have deployed the fix to staging at 11:00.
      says when (at 11:00): past simple
    -> I deployed the fix to staging at 11:00.
  QA is testing it now.
  I'll pair with Ravi on the migration after lunch.
Friday
  The release went out at 16:00 IST.
  I have written the release notes last night.
      says when (last night): past simple
    -> I wrote the release notes last night.
  Next week I'm starting the billing work with Meera.

15 lines: 5 to fix before, 0 after

Recorded with Node.js 24.21.0 on macOS 26 arm64. To run it yourself: mise exec node@24.21.0 -- node standup_week.mjs

Five of the 15 lines needed a fix, and three of the five were the same slip: a present perfect next to yesterday, at 11:00 or last night. The other ten were right as written, including “I have reviewed two pull requests”, which names no time.

Key idea

Use the present perfect for finished work whose result matters now, and switch to the past simple the moment you say when it happened.

Checkpoint

Check: Present perfect or past simple for finished work

  1. Question 1 of 2 Which line is right in a Wednesday stand-up?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: I deployed the fix to staging yesterday.

    Once you name a finished time, use the past simple: "I deployed the fix to staging yesterday." Without the time, "I've deployed the fix to staging" is right.

  2. Question 2 of 2 The sprint ends next Tuesday. In Thursday's review you report what the team has done so far. Which line fits?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: We've closed 14 tickets this sprint.

    For a period that is still running, such as this sprint, today or this week, the present perfect reports what is done so far, and the simple form says how many: "We've closed 14 tickets this sprint."

Work in progress and plans: continuous, going to or will

For work going on now, English uses the present continuous, be and the -ing form: “I’m migrating the tests”, “QA is testing the fix”. “Today I work on the refund API” sounds like a habit, not today’s task. For what comes next, the British Council’s page on future forms separates three cases, and a stand-up uses all three:

Line Form It fits
We’re releasing the fix on Friday. be + -ing an arrangement agreed with others, with a known time
I’m going to look at the flaky test next. going to a plan you made before you spoke
I’ll pair with Ravi after lunch. will a decision you make as you speak

Documentation follows its own rule. Google’s style guide asks for the present tense for general behaviour, as in “The server sends an acknowledgment”, and keeps will for something that happens later.

Three more patterns have parts of their own below. state verb: A verb that describes a state rather than an action, such as know, belong or prefer. It is not usually used in the -ing form: "I know", not "I am knowing". such as know and belong keep the simple form: “I know the cause”, not “I am knowing”. Commit subjects take the imperative, and changelog entries keep one form under headings such as Added and Fixed. Timelines and stories of past work take the past simple, with the past continuous for background and the past perfect for earlier events.

Checkpoint

Check: Work in progress and plans

  1. Question 1 of 2 The release day is agreed with QA and the client. Which line tells the channel that it is already arranged?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: We're releasing the fix on Friday.

    The British Council's page on future forms keeps the present continuous for arrangements, already confirmed with at least one other person, with a known time: "We're releasing the fix on Friday."

  2. Question 2 of 2 In the stand-up, the lead asks who can pair with Ravi. You decide on the spot. What do you say?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: I'll pair with him after lunch.

    A decision you make as you speak takes will. Going to is for a plan made earlier, and be + -ing for an arrangement.

State verbs: I know, not I am knowing, with a checker Pro: opens with a Pro, Premium or Ultimate pass

Some verbs describe a state rather than an action, and English rarely puts them in the -ing form. This part lists the state verbs you will use at work, shows the verbs that are states in one meaning and actions in another, and checks ten sentences with a program.

In this part:

  • State verbs at work, from know to belong
  • Verbs that are states in one meaning and actions in another

1 runnable example (JavaScript) · about 3 minutes

Opening this part with your pass…

This part opens with any MySmartCoPilot pass.

  • Pro pass · 1 week₹79$2.99
  • 30 days₹179$5.99
  • 1 year₹1,699$45

One payment; a pass never renews. The price shown is the total you pay: no fees or charges are added at checkout.

It also opens every other in-depth part in Learn and every Pro tool. Sales are final, except where the law gives you a right to withdraw, for example in the EU and the UK (refund policy).

Commit subjects, changelogs and release notes in one pattern Pro: opens with a Pro, Premium or Ultimate pass

Commit subjects, changelog entries and reference docs each follow their own convention, and most messy histories come from mixing them. This part gives each one its form, from Git’s guidance and Keep a Changelog, and regroups a mixed changelog with a program that counts its forms.

In this part:

  • Commit subjects in the imperative, as if you give the code an order
  • Changelog entries grouped under one set of headings

1 runnable example (JavaScript) · about 4 minutes

Opening this part with your pass…Pro part. It opens with the same pass as the part above.

Incident timelines and project stories, in the past Pro: opens with a Pro, Premium or Ultimate pass

Notes written during an incident are in the present, and the timeline and the story you tell later are in the past. This part turns live notes into a timeline with times in two zones, and builds a project story with the past simple, the past continuous and the past perfect.

In this part:

  • Incident timelines: past simple, a time and its zone
  • Project stories: past simple, past continuous and past perfect
  • Three rules to keep from the parts on state verbs, changelogs and stories

1 diagram · 1 runnable example (JavaScript) · about 4 minutes

Opening this part with your pass…Pro part. It opens with the same pass as the part above.

Practise: fix the tenses of a status update

The exercise holds eight lines of a status update with the slips of the first two sections. Fix them until the sample tests pass:

Exercise · Easy · JavaScript

Fix the tenses of an eight-line status update

update.mjs holds a status update of eight lines. Six of them have a tense slip from this lesson; two are right and must stay as they are. Fix the six by editing the text inside the quotes:

  • a line that says when something finished (last week, at 09:30, two days ago) takes the past simple;
  • work going on now takes be + -ing: QA is testing it now;
  • how long, with since or for, takes the present perfect continuous: I've been waiting since Tuesday;
  • keep each line's verb and change only its form;
  • every fact stays: the names, the version, the times and the days.

Run the sample tests after each line. When they pass, read the update aloud once, as you would in a stand-up.

Starter code · update.mjs

// Fix the tenses of this status update: edit the words inside the quotes, keep every fact, and leave the two lines
// that are already right as they are.
export const lines = [
  'I have finished the search API last week.',
  'Today I review the payment PRs.',
  'I am waiting for the database team since Tuesday.',
  'We have released 3.9 to staging at 09:30.',
  'QA tests it now.',
  'I have written the migration guide two days ago.',
  'We are releasing to production on Thursday.',
  "I've closed six tickets this week.",
];
The sample tests · update.test.mjs
import { test, assert } from 'mysmartcopilot:test';
import { lines } from './update.mjs';

// The lesson's checks, as its stand-up checker applies them.
const PERFECT = /\b(?:have|has|'ve|'s)\s+(?:\w+ly\s+)?(?:\w+ed|written|done|seen|made|sent|built|run|found|given|taken|gone)\b/i;
const FINISHED_TIME = /\b(?:yesterday|last (?:night|week|month|sprint)|\w+ ago|at \d{1,2}:\d{2}|on (?:Monday|Tuesday|Wednesday|Thursday|Friday))\b/i;
const NOW_SIMPLE = /\b(?:today|now|currently|this week),?\s+(?:I|we)\s+(?:work|fix|write|test|build|review|migrate)\b/i;
const NOW_SIMPLE_THIRD = /\b(?:tests|reviews|works|checks|fixes|builds)\b[^.]*\bnow\b/i;
const HOW_LONG = /\b(?:am|is|are|'m|'re)\s+\w+ing\b[^.]*\b(?:since|for)\b/i;

test('the update still has eight lines', () => {
  assert.equal(lines.length, 8, 'keep eight lines');
});

test('a line that says when takes the past simple', () => {
  for (const line of lines) assert.ok(!(PERFECT.test(line) && FINISHED_TIME.test(line)), `says when, so past simple: "${line}"`);
});

test('work going on now takes be + -ing', () => {
  for (const line of lines) assert.ok(!NOW_SIMPLE.test(line) && !NOW_SIMPLE_THIRD.test(line), `work in progress: "${line}"`);
});

test('how long takes the present perfect continuous', () => {
  for (const line of lines) assert.ok(!HOW_LONG.test(line), `since or for with a present form: "${line}"`);
  assert.ok(/\b(?:have|'ve|has)\s+been\s+waiting\b/.test(lines[2]), 'line 3: have been waiting since Tuesday');
});

test('each fixed line has the form its rule asks for, with the same verb', () => {
  // The past simple has no helper verb in front of it: "I finished", not "I have finished" or "I had finished".
  const pastSimple = (line, verb) => new RegExp(`\\b${verb}\\b`).test(line) && !/\b(?:have|has|had|'ve|'d)\b/i.test(line);
  assert.ok(pastSimple(lines[0], 'finished'), 'line 1: the past simple, finished');
  assert.ok(/\b(?:I'm|I am)\s+reviewing\b/.test(lines[1]), "line 2: be + -ing, I'm reviewing");
  assert.ok(pastSimple(lines[3], 'released'), 'line 4: the past simple, released');
  assert.ok(/\bis\s+testing\b/.test(lines[4]), 'line 5: be + -ing, QA is testing');
  assert.ok(pastSimple(lines[5], 'wrote'), 'line 6: the past simple, wrote');
});

test('the two lines that were right stay as they are', () => {
  assert.equal(lines[6], 'We are releasing to production on Thursday.');
  assert.equal(lines[7], "I've closed six tickets this week.");
});

test('every fact stays', () => {
  const facts = ['search API', 'last week', 'payment PRs', 'database team', 'since Tuesday', '3.9', '09:30', 'QA', 'migration guide', 'two days ago'];
  const all = lines.join(' ');
  for (const fact of facts) assert.ok(all.includes(fact), `the update no longer says "${fact}"`);
});
A hint

Find the time words first. Lines with last week, at 09:30 and two days ago say when, so their present perfect (have finished, have released, have written) becomes the past simple: finished, released, wrote.

The sample tests run on this device, in your browser (QuickJS): nothing is sent to mysmartcopilot.com. The first run downloads JavaScript (about 0.6 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 check yourself on finished work and on plans. Miss a question, and the next one on the same idea is a step simpler:

Practice that adapts to you

Practise this lesson

6 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 6 When does the British Council's rule send you to the past simple?

    Choose one answer.

    Show the answer: Question 1 of 6

    Answer: When you say when something happened, or that part of your life is finished

    Say when, or treat the period as over, and you need the past simple. Otherwise a finished action with a result now takes the present perfect.

  2. Question 2 of 6 You started fixing flaky tests on Monday and are still at it. Which line says that?

    Choose one answer.

    Show the answer: Question 2 of 6

    Answer: I've been fixing flaky tests since Monday.

    For an activity that started in the past and goes on, with since or for: "I've been fixing flaky tests since Monday." For a count of results: "I've fixed four of them."

  3. Question 3 of 6 Rewrite this update: "I have merged the PR at 10:00 and I am waiting for QA since then."

    Choose one answer.

    Show the answer: Question 3 of 6

    Answer: I merged the PR at 10:00 and I've been waiting for QA since then.

    Two slips, two fixes: a named time takes the past simple, and how long, with since, takes the present perfect continuous.

  4. Question 4 of 6 Which form describes work going on now?

    Choose one answer.

    Show the answer: Question 4 of 6

    Answer: be + -ing, as in "I'm migrating the tests"

    Work in progress takes be + -ing: "I'm migrating the tests." "Today I work on …" is the slip the lesson's checker flagged on Monday.

  5. Question 5 of 6 A how-to page says: "When you click Save, the server will send a confirmation." What does Google's style guide suggest?

    Choose one answer.

    Show the answer: Question 5 of 6

    Answer: When you click Save, the server sends a confirmation.

    In documentation, use the present tense for general behaviour: "the server sends a confirmation". Keep will for something that happens later, such as a job that runs the next time a backup starts.

  6. Question 6 of 6 On Friday you and your lead planned the billing work, and you booked a kick-off with the billing team for Monday. Which line is best in Monday's stand-up?

    Choose one answer.

    Show the answer: Question 6 of 6

    Answer: I'm starting the billing work today, with a kick-off at 11:00.

    An arrangement with other people and a known time takes the present continuous: "I'm starting the billing work today, with a kick-off at 11:00."

Interview questions

Warm-up (fresher to mid-level): When do you use the present perfect instead of the past simple in a status update?

Use the present perfect for finished work whose result matters now, when you do not say when it happened: “I’ve fixed the login bug”, “I’ve reviewed two pull requests today”. Use the past simple as soon as you name a finished time, such as yesterday, last week or 11:00: “I fixed it yesterday”. Combining the two, “I have fixed it yesterday”, is a common slip. For how long something has been going on, use the present perfect continuous: “I’ve been working on it since Monday”.

Three longer questions on tenses at work wait in this module’s bank:

  1. Mid to senior

    During an incident you wrote notes such as "10:42 deploy failing", "checking logs" and "rolling back". The team now needs the timeline for the postmortem, read in India, Germany and the US. How do you turn your notes into it?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Mid to senior

    Your project's commits and changelog mix "Fixed", "Fixes", "Fixing" and "Fix". You are asked to propose one convention for commit subjects, changelog entries and release notes. What do you propose, and how do you defend it?

    Model answer, Pro. First step and follow-ups

  3. Fresher to senior

    In an interview you tell the story of a migration you worked on. Afterwards the interviewer says it was hard to follow what had already happened and what was still going on. How would you tell it again?

    Model answer, Pro. First step and follow-ups

Key takeaways

  • Report finished work with the present perfect when its result matters now, and with the past simple as soon as you say when it happened.
  • Say how long with since or for and the present perfect continuous: “I’ve been working on it since Monday.”
  • Use be + -ing for work in progress and for arrangements, going to for plans you made earlier, and will for decisions you make as you speak.

Terms in this lesson

imperative
The form of a verb that gives an instruction or an order, as in "Fix the crash" or "Open the app". Commit subjects and how-to steps use it.
past simple
The verb form for an action finished at a time in the past, as in "I fixed the bug yesterday". Regular verbs add -ed.
present perfect
The verb form have or has with a past participle, as in "I've fixed the bug": a finished action whose result matters now, with no finished time named.
state verb
A verb that describes a state rather than an action, such as know, belong or prefer. It is not usually used in the -ing form: "I know", not "I am knowing".

References

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.