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.

IT Support & Help Desk Fundamentals  Module 1 – The support role and a troubleshooting method

A troubleshooting method that holds under pressure

Work any support fault in six steps: scope it, test likely and cheap causes first, halve the suspects, keep steps reversible and leave notes others can use.

  • Beginner
  • 25 minutes
  • Examples run with Python 3.14.8 and Pyodide 314.0.7
  • By MySmartCoPilot
Free lesson, Pro answers: 25 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Apply a six-step method to a support request, from the user's words to the notes
  • Choose between top-down, bottom-up, half-splitting and a known-good swap for a fault
  • Isolate one culprit among many suspects by halving them, and count the tests it needs
  • Test one change at a time, with reversible steps before anything you cannot undo
  • Record evidence that another technician can repeat or continue

Before you start

What you’ll learn · Before you start

What you will learn

  • Apply a six-step method to a support request, from the user's words to the notes
  • Choose between top-down, bottom-up, half-splitting and a known-good swap for a fault
  • Isolate one culprit among many suspects by halving them, and count the tests it needs
  • Test one change at a time, with reversible steps before anything you cannot undo
  • Record evidence that another technician can repeat or continue

Before you start

On this page

An accounting app crashes every time one laptop starts, and 64 programs and services start with it. Turning them back on one per restart can take 64 restarts; testing half of them at a time finds the one to blame in 6. With a user waiting and a queue behind them, a method is what keeps a technician from guessing.

The method has six steps: understand the symptom and say it back, scope it, list the likely causes with the cheapest tests first, test one change at a time, fix and then verify the user’s whole task, and document. You will choose between four strategies, top-down, bottom-up, half-splitting: Finding one faulty item by testing half of the suspects, or the middle of a path, at a time and keeping the half that still fails. n suspects need at most log2 n tests, rounded up: 6 for 64. and a known-good swap: Replacing one suspect part, such as a cable, a charger or a whole PC, with one of the same kind that is known to work, so that a single test shows whether that part is at fault., try reversible step: A troubleshooting step that can be undone without losing anything, such as a restart, a disabled startup item or an uninstalled update. Reversible steps come before ones with no way back, such as a reset. before anything you cannot undo, and write notes that another technician can pick up and continue.

Six steps, with a loop back when the fix falls short

A method earns its keep when the first idea is wrong, which happens often. These are the six steps of this track:

  1. Understand the symptom. Let the user describe it in their own words, then say it back as something you can test: what fails, on which device, during which task. Many lost hours start with a symptom nobody pinned down.
  2. Scope it. Ask who else has it (one user, one device, one site or everyone), since when, and what changed just before it started.
  3. List the likely causes. Rank them by how probable each is and how cheap it is to test.
  4. Test one change at a time. Make one change, repeat the same test, write down the result, and undo the change if it did not help.
  5. Fix, then verify the whole task. Ask the user to do what they called about, not only the step you touched. If it still fails, go back to step 3 with what you have just learned.
  6. Document. Write down the root cause: The condition that makes a fault happen. Fixing it stops the fault from coming back, while fixing only a symptom, or working around it, leaves the cause in place., the fix and how to stop it happening again, in words the next technician can follow.

Step through one ticket from the user’s first words to the notes. The drive letter is back after step 4, and step 5 shows why that was not the end:

Interactive · stage by stage Six steps on one ticket, with the loop back Step through one ticket, from the user's words to the notes. Watch step 5: the first fix passes its own test, and the user's task still fails.
Six steps on one ticket, with the loop back, step 9 of 9. Showing Understand the symptom (S: missing since sign-in), Scope it (one user, since today), List likely causes (access: a group is missing), Test one change (group dropped by the move), Fix and verify (opens, changes and saves), Document (cause, fix, prevention). In focus: Document.still failsUnderstand the symptomS: missing since sign-inScope itone user, since todayList likely causesaccess: a group is missingTest one changegroup dropped by the moveFix and verifyopens, changes and savesDocumentcause, fix, prevention

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

Every step as text
  1. The user's words. Meera calls: "My S drive has gone, and I need the budget file by noon." You say it back: since she signed in this morning, S: is missing from File Explorer, so she cannot open the budget workbook. She agrees, and now the symptom is something you can test.
  2. Scope it. Her neighbour still has S:, so the file server works and the fault is Meera's alone. It began this morning. What changed? Yesterday her account was moved to a new team.
  3. List the likely causes. Three causes fit, ranked by how likely each is and how cheap it is to test: the drive was not mapped at sign-in (map it by hand, a minute); the team move changed her access (read her groups, a few minutes); the server is down (unlikely, since her neighbour has S:).
  4. Test the cheapest first. You map S: by hand. The letter appears and the folder opens. One change, one result, written down: the first theory looks right, and it is tempting to close the ticket here.
  5. Verify the whole task. Verifying means the task she called about, not the step you touched. Meera opens the workbook, changes a cell and saves: "Access denied". The symptom you touched has gone, the task still fails, so the cause is still there.
  6. Back to the causes. The loop goes back to step 3 with new evidence. Opening works and saving does not, which points at the second cause, her access. Every member of staff may read the folder; only one group may change it.
  7. Test the new theory. Her groups now and before the move differ by one: the move dropped the group that may change the budget folder. That group also maps S: at sign-in, so one cause explains both symptoms.
  8. Fix, then verify again. Access is not yours to hand out: her manager, who owns the folder, confirms she still needs it, and the identity team adds the group back. You remove the hand mapping. She signs in again, S: appears by itself, and the workbook opens, changes and saves.
  9. Write it down. The note gives the next technician everything: the symptom in her words, the scope, each test and its result, the cause (the team move dropped a group), the fix and who agreed to it, and the prevention: the team-move checklist now lists the shared folders a person keeps.

The first theory was half right. The drive was not mapped, but that was a symptom of the cause, a group the team move dropped, and only the user’s own task, saving the workbook, brought it to light. That is what the loop back from step 5 is for.

Closing the ticket when your change works

Wrong: “S: is mapped again, so the ticket is closed.” Right: “Please open the budget workbook, change a cell and save it while I am still here.” The wrong version tests your step; the right one tests the user’s task, which is where the access fault showed.

CompTIA’s A+ Core 1 (220-1201) V15 exam objectives print a troubleshooting method too, as a “competency standard”, and state that “the methodology itself will not be tested”. Troubleshooting still matters there: hardware and network troubleshooting is the exam’s largest domain, 28 % of it.

Not affiliated

MySmartCoPilot is not affiliated with CompTIA. The exam facts above come from CompTIA’s published exam objectives; the six steps and every case in this lesson are this track’s own.

Checkpoint

Check: The six steps and the loop back

  1. Question 1 of 2 A user reports that a payroll report prints with page 2 blank. You replace the toner, and the printer's own test page comes out perfect. What should happen before the ticket closes?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: The user prints the payroll report, and you check page 2 with them

    Step 5 verifies the user's whole task, not the step you touched. If the report still prints page 2 blank, the loop goes back to step 3 with that evidence, as the drive ticket in the figure did.

  2. Question 2 of 2 Which step comes straight after you have understood and restated the symptom?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Scope it: who else has it, since when, and what changed

    The six steps run in this order: understand and restate the symptom, scope it, list the likely causes, test one change at a time, fix and verify the whole task, document.

Scope the fault before you list its causes

Two questions narrow a fault faster than any test: who has it, and what changed? Who has it tells you what everyone affected has in common, and only a part they share can be the cause:

Who has the fault What they share Look first at
One user, on every device they use Their account Their groups, password, mailbox and profile
Every user of one device That device Its hardware, drivers, updates and settings
Everyone at one site or on one network The site Its network, printers, local servers and link
Everyone A central service Recent changes for everyone, and the service’s status

So the user’s own report is where scoping starts: ask a neighbour to try, try another device, try the same task from another site. “Since when” turns a vague fault into a moment, and a fault that began at a moment usually began with a change: an update, a new device, a moved desk, a password change, a team move, a new policy. Ask what changed even when the user says “nothing”, because an update that ran overnight is easy not to notice.

Scope also guards against the costliest trap: fixing one PC while the same cause hits hundreds more. Say the shared printer on the second floor goes offline for one user at 9:40. A technician removes it from her PC, adds it again by the print server’s new address, and she can print. Then the same ticket comes from a second user and a third: the print server moved that morning, and all 300 PCs that print through it still look for the old address. The fix belongs at the cause, in the printer setting every PC receives, made once. The hand-made copy on the first PC now differs from the other 299, so it has to be undone, or it will fail on its own the next time the server moves.

Checkpoint

Check: Scoping a fault

  1. Question 1 of 2 The laptop in a meeting room shows no picture on the projector for every person who signs in to it. Other laptops show a picture on the same projector with the same cable. Where do you look first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: That laptop: its display settings, its driver and its port

    Scope asks what the affected users have in common. One device for every user points at that device, and the laptops that work on the same projector rule the projector out.

  2. Question 2 of 2 Since this morning, 30 users at one branch cannot reach the intranet, while the other branches can. The users say nothing changed. What is the most useful next question?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: What changed at that branch overnight or this morning, such as its network, its router or its settings?

    The scope (one site) and the time (this morning) point to a change at that site at that time. Users often cannot see such a change, so ask the people who run the branch's network as well.

Test the likely and cheap causes first

Once the scope is known, the list of causes is usually short, and the order of the tests decides how long the user waits. Rank each cause on two things: how likely it is, given the scope and what changed, and what it costs to test, in minutes, money and risk. A likely cause that is cheap to test goes first; an unlikely, costly one, such as replacing a board, goes last, however dramatic it sounds.

The best first checks are cheap and also cut the problem in two. Step through a laptop that will not charge: the first look, at a single light, decides which of the later checks are worth making.

Interactive · stage by stage A laptop that will not charge, cheapest check first Step through the checks in the order of what they cost, from a ten-second look to a repair. Watch how one look decides which checks are worth doing.
A laptop that will not charge, cheapest check first, step 7 of 7. Showing Will not charge (charging again), Look: light and damage (light off, no damage), A lamp in the outlet (lamp lights: outlet fine), A known-good charger (charges: charger at fault), Battery report, Repair or replace. In focus: Will not charge.light is onWill not chargecharging againLook: light and damagelight off, no damageA lamp in the outletlamp lights: outlet fineA known-good chargercharges: charger at faultBattery report5 minutesRepair or replacedays, and money

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

Every step as text
  1. The ticket. Ravi's Surface laptop is plugged in, shows 8 % and is not charging. The checks are listed by what each costs, from seconds to days, and none of the first four changes anything for good.
  2. Look first. The light on the charging connector is off, and the cable, the plug and the port look undamaged. Microsoft's Surface guide says that light should be on when the connector is plugged in, and that an unlit one points at the power supply.
  3. What the light decides. One look split the power path in two. Had the light been on, power would be reaching the laptop and the battery report would come next. With it off, the fault is before the laptop: the outlet, the charger or its cable.
  4. The outlet. Unplug the charger and plug in a lamp you know works, as Apple's battery guide suggests for any outlet. The lamp lights, so the outlet delivers power and is cleared.
  5. A known-good swap. A colleague's charger for the same model is known to work. With it, the connector light comes on and the battery starts charging. One swap changed one part, so the charger or its cable is the fault.
  6. The checks not needed. The battery report would have come next: powercfg /batteryreport writes one on Windows, and System Settings shows Battery Health on a Mac. A repair, days without the laptop, comes last. Three checks in under ten minutes made both unnecessary.
  7. Close it properly. Order a charger that meets this model's charging requirements (Microsoft notes that a Surface can receive power that is not enough to charge its battery), check that the battery climbs past 8 %, and write down the cause and the swap.

Three checks in under ten minutes found the fault, and the two costly ones were never needed. The order came from cost as much as from likelihood: a failed charger and a worn battery may be about as likely as each other, but one is a five-minute swap and the other a report and perhaps a repair. The light on the connector was worth more than any of them, because one look ruled out half of the power path.

Key idea

Order the tests by how likely each cause is and how little it costs to check, and prefer a check that rules out half of the problem in one look.

Checkpoint

Check: Likely and cheap tests first

  1. One question A desktop PC shows no sign of power at all when its button is pressed. Which check comes first?

    Choose one answer.

    Show the answer: One question

    Answer: Check that the power cable is in, and test the outlet with a lamp

    Rank the causes by how likely each is and what it costs to check. With no power at all, the cable and the outlet are both likely and the cheapest to test; the lamp is the outlet test of Apple's battery guide.

Four strategies, chosen by the clue you have

The clue in front of you also picks a strategy, and there are four:

  • Top-down starts where the user sees the fault, the app, the web page or the print job, and works down through the layers it depends on. It is fastest when an error message names a layer, since everything under that layer must at least have started.
  • Bottom-up starts at the physical end, power, cables and link lights, and works up. It is slow when the fault is high up, but it never skips a layer, so it is the choice when nothing works at all or there is no clue.
  • Half-splitting tests in the middle of the path, or of the list of suspects, and keeps the half that still fails. With many alike suspects, such as startup items, add-ins or updates, it needs far fewer tests than the others.
  • A known-good swap replaces one suspect part with one of the same kind that is known to work: a cable, a charger, a keyboard, a whole PC. One test then settles that part, as long as the spare really is good and the swap changes nothing else.

Answer three questions about a fault from your own work, and the table marks the strategies that fit it:

Interactive · answer and compare Which strategy fits the fault in front of you? Answer three questions about one fault. The table marks the strategies that fit and says why the others do not.
Does an error message or a failing step tell you roughly where the fault is?
Is the cause likely one of many alike suspects, such as startup items, add-ins or updates?
Is a part known to work at hand: a cable, a charger, a test account or a spare PC?

Answer the questions above: the table then marks what fits your case and says why the rest does not.

Four troubleshooting strategies against what each needs, how many tests it takes and where it misleads
Strategy What it needs With many suspects When nothing works Where it misleads
Top-down Starts from: what the user sees: the app or the task Good an error or a failing task, nothing else Mixed one layer at a time, from the top down Poor a dead screen or plug leaves the top nothing to show Mixed a long look at an app while a cable is out
Bottom-up Starts from: the plug, the cable and the link light Good nothing: it starts at the plug Poor tests every layer, even the ones that work Good finds a dead plug, cable or link first Mixed slow when the fault is in the app
Half-splitting Starts from: the middle of the suspects, or of the path Mixed a yes-or-no test, and suspects you can switch on and off Good 6 restarts for 64 startup items Mixed splits a path at its middle, once you know the path Mixed two culprits at once spoil the yes or no
Known-good swap Starts from: one part, replaced by one known to work Poor a spare of the same kind that is known to work Poor one part per swap Good a known-good cable or charger settles that part in one test Mixed a spare that is not good, or a swap that changes two things
How the answers decide
  • “Does an error message or a failing step tell you roughly where the fault is?” Yes: no power, no picture or no link light: rules out Top-down. With no power, picture or link, the top layer has nothing to show: start at the plug, or swap the part that looks dead.
  • “Does an error message or a failing step tell you roughly where the fault is?” Yes: an app or a service shows an error: adds a caveat to Bottom-up. An app error says the layers below it mostly work, so starting at the plug spends tests on parts that are fine.
  • “Does an error message or a failing step tell you roughly where the fault is?” No clue yet: adds a caveat to Top-down. Without a clue, top-down can spend a long time on an app while a cable is out; bottom-up never skips a layer.
  • “Is the cause likely one of many alike suspects, such as startup items, add-ins or updates?” Yes, many alike suspects: adds a caveat to Top-down, Bottom-up and Known-good swap. One suspect per test can mean 64 tests for 64 startup items, where halving needs 6.
  • “Is the cause likely one of many alike suspects, such as startup items, add-ins or updates?” No, only a few: adds a caveat to Half-splitting. With two or three suspects, testing each one directly takes as many tests as halving and is simpler to follow.
  • “Is a part known to work at hand: a cable, a charger, a test account or a spare PC?” No spare: rules out Known-good swap. A swap needs a part that is known to work; without one, it would only add a second unknown.

In short: an error message points top-down, a dead device points bottom-up or to a swap, and a long list of alike suspects points to half-splitting. The strategies also combine. A webcam that shows only black in a meeting app is a path of two parts, the camera and the app, and the webcam test uses the camera in the browser without the app. If the picture appears there, the camera and its driver work, and the fault lies with the app or the permission it was given: one test halved the path. Network faults have a chain of their own, which a method for network troubleshooting follows from the link to the application.

Checkpoint

Check: Choosing a strategy

  1. Question 1 of 2 A user's desk phone and PC lost the network at the same moment, and the link light on the PC's network port is off. Which strategy fits first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Bottom-up: the cable, the wall port and the switch port

    A dead device or a dark link light points bottom-up, or to a known-good swap of the cable. Two devices failing at the same moment say that the fault is in what they share.

  2. Question 2 of 2 The cause of a browser crash is one of 40 add-ins. Which strategy needs the fewest tests?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Half-splitting: turn half of the add-ins off at a time

    With n alike suspects, halving needs at most log2 n tests, rounded up: 6 for 40 add-ins, because 2 to the power 5 is 32, too few, and 2 to the power 6 is 64.

Halving finds one culprit among 64 in six restarts

For the laptop of the opening, Microsoft’s support article on a clean boot: Starting Windows with only essential drivers and startup programs, with the services and startup apps of other software turned off, to show whether that software causes a fault. More in “Windows admin tools: Settings, MMC, msinfo32” gives the first move: turn off every non-Microsoft service and startup app, restart, and run the app. If it now works, one of the items turned off is the culprit, and to find it the article calls testing “half of them at a time” the most efficient way. On a Mac, On a Mac, a way of starting up that keeps login items, extensions macOS does not need and fonts it did not install from loading, and checks the startup disk. plays the same part: Apple describes it as a way to tell whether software that loads at startup causes an issue.

Step through the search on eight apps, one of which, cloud, makes the app crash. Each pass turns on the first half of the suspects still in doubt and restarts:

Interactive · line by line Eight suspects, three restarts Each pass turns on the first half of the suspects still in doubt, apps[lo:hi], and restarts. Watch lo and hi close in on the culprit.

Program · halve.py

apps = ["sync", "vpn", "chat",
        "pdf", "audio", "cloud",
        "print", "backup"]
bad = "cloud"  # unknown to you
lo, hi = 0, len(apps)
restarts = 0
while hi - lo > 1:
    mid = (lo + hi) // 2
    on = apps[lo:mid]  # enabled
    restarts += 1
    if bad in on:  # still fails
        hi = mid
    else:
        lo = mid
    print(restarts, apps[lo:hi])
print(apps[lo], "after", restarts)

Variables

After line 16: apps is ['sync', 'vpn', 'chat', 'pdf', 'audio', 'cloud', 'print', 'backup']; bad is 'cloud'; lo is 5; hi is 6; restarts is 3; mid is 5; on is ['audio'].apps'sync'0'vpn'1'chat'2'pdf'3'audio'4'cloud'5'print'6'backup'7bad'cloud'lo5hi6restarts3mid5on'audio'0
  • changed in this step

Printed so far

1 ['audio', 'cloud', 'print', 'backup']
2 ['audio', 'cloud']
3 ['cloud']
cloud after 3

Every step was recorded from a run with Python 3.14.8 on macOS 26 arm64.

The drawing shows the variables when the program ends, and the program's 28 steps are listed below.

Line run 16
Next line end
Loop pass –
Every step as text
  1. Start. No line has run yet, so there are no variables. Python starts with line 1.
  2. Line 1. apps = ["sync", "vpn", "chat", "pdf", "audio", "cloud", "print", "backup"] makes apps a list of 8 items.
  3. Line 4. bad = "cloud" sets bad to 'cloud'.
  4. Line 5. lo, hi = 0, len(apps) sets lo to 0 and sets hi to 8.
  5. Line 6. restarts = 0 sets restarts to 0.
  6. Line 7. while hi - lo > 1: tests its condition: it is true (hi is 8 and lo is 0), so the body runs.
  7. Line 8. mid = (lo + hi) // 2 sets mid to 4.
  8. Line 9. on = apps[lo:mid] sets on to ['sync', 'vpn', 'chat', 'pdf']. Restart 1 turns on the first half of the eight suspects: sync, vpn, chat and pdf. The other four stay off.
  9. Line 10. restarts += 1 changes restarts from 0 to 1.
  10. Line 11. bad in on is false (bad is 'cloud' and on is ['sync', 'vpn', 'chat', 'pdf']), so the else block runs.
  11. Line 14. lo = mid sets lo to 4 (it was 0). Key point The app ran with those four on, so none of them is the culprit. lo moves to 4, and one restart has cleared half of the list.
  12. Line 15. print(restarts, apps[lo:hi]) prints 1 ['audio', 'cloud', 'print', 'backup'].
  13. Line 7. while hi - lo > 1: tests its condition: it is true (hi is 8 and lo is 4), so the body runs again (pass 2).
  14. Line 8. mid = (lo + hi) // 2 sets mid to 6 (it was 4).
  15. Line 9. on = apps[lo:mid] sets on to ['audio', 'cloud'] (it was ['sync', 'vpn', 'chat', 'pdf']).
  16. Line 10. restarts += 1 changes restarts from 1 to 2.
  17. Line 11. bad in on is true (bad is 'cloud' and on is ['audio', 'cloud']), so the block under if bad in on: runs.
  18. Line 12. hi = mid sets hi to 6 (it was 8). With audio and cloud on, the app crashed, so the culprit is one of those two. hi comes down to 6, which clears print and backup.
  19. Line 15. print(restarts, apps[lo:hi]) prints 2 ['audio', 'cloud'].
  20. Line 7. while hi - lo > 1: tests its condition: it is true (hi is 6 and lo is 4), so the body runs again (pass 3).
  21. Line 8. mid = (lo + hi) // 2 sets mid to 5 (it was 6).
  22. Line 9. on = apps[lo:mid] sets on to ['audio'] (it was ['audio', 'cloud']).
  23. Line 10. restarts += 1 changes restarts from 2 to 3.
  24. Line 11. bad in on is false (bad is 'cloud' and on is ['audio']), so the else block runs.
  25. Line 14. lo = mid sets lo to 5 (it was 4). Only audio was on, and the app ran, so audio is cleared as well. One suspect is left, and it needs no restart of its own.
  26. Line 15. print(restarts, apps[lo:hi]) prints 3 ['cloud'].
  27. Line 7. while hi - lo > 1: tests its condition: it is false (hi is 6 and lo is 5), so the loop ends.
  28. Line 16. print(apps[lo], "after", restarts) prints cloud after 3. That was the last line, so the program ends. Three restarts for eight suspects: 8 became 4, then 2, then 1. Turning on one app per restart would have taken six, since cloud is the sixth app.

Each restart halved the suspects, 8, then 4, then 2, then 1, so three restarts were enough. That is half-splitting: a test whose answer is yes or no rules out half of what is left, so n suspects need at most log₂ n tests, rounded up. Eight need 3, 64 need 6 and 1,000 need 10. The next program searches 64 startup items for three hidden culprits, chosen by a seeded random number generator, and counts its restarts against turning one item on per restart:

64 startup items, three hidden culprits, two ways to search Python · bisect_startup.py
"""Find the one startup item that makes an app crash, by halving the suspects.

A clean boot (every non-Microsoft service and startup app turned off) lets the app run, so one of the N items turned
off is the culprit. Each round turns on half of the items still under suspicion, restarts and runs the app once:
if it crashes, the culprit is in the half that is on; if not, it is in the other half. A seeded random choice hides
the culprit, so every run is the same, and checking one item per restart is counted for comparison.
"""

import math
import random

N = 64  # startup items and services left after a clean boot
MINUTES_PER_RESTART = 3  # an assumption: one restart plus one run of the app
SEEDS = [1, 2, 3]

items = [f"item-{i:02d}" for i in range(1, N + 1)]


def half_split(suspects, culprit):
    """Halve the suspects until one is left; return it with one line per restart."""
    rounds = []
    while len(suspects) > 1:
        on = suspects[: len(suspects) // 2]
        crashed = culprit in on  # the restart and the test, simulated
        before = len(suspects)
        suspects = on if crashed else suspects[len(on) :]
        result = "crashes" if crashed else "runs   "
        rounds.append(f"  restart {len(rounds) + 1}: {len(on):>2} of {before:>2} on, app {result} -> {len(suspects):>2} left")
    return suspects[0], rounds


def one_by_one(suspects, culprit):
    """Turn on one item per restart, in list order, until the app crashes."""
    for restarts, item in enumerate(suspects, start=1):
        if item == culprit:
            return restarts
    raise ValueError("no culprit among the suspects")


print(f"{N} startup items, one culprit; a restart and a test take {MINUTES_PER_RESTART} minutes")
for seed in SEEDS:
    culprit = random.Random(seed).choice(items)
    found, rounds = half_split(items, culprit)
    slow = one_by_one(items, culprit)
    print(f"\nSeed {seed}: the culprit is {culprit}")
    print("\n".join(rounds))
    print(f"  halving found {found} in {len(rounds)} restarts ({len(rounds) * MINUTES_PER_RESTART} minutes)")
    print(f"  one at a time: {slow} restarts ({slow * MINUTES_PER_RESTART} minutes)")

average = sum(range(1, N + 1)) / N
print(f"\nHalving: at most {math.ceil(math.log2(N))} restarts, wherever the culprit hides (log2 of {N}, rounded up).")
print(f"One at a time: 1 to {N} restarts, {average} on average ({average * MINUTES_PER_RESTART} minutes).")

Output

64 startup items, one culprit; a restart and a test take 3 minutes

Seed 1: the culprit is item-18
  restart 1: 32 of 64 on, app crashes -> 32 left
  restart 2: 16 of 32 on, app runs    -> 16 left
  restart 3:  8 of 16 on, app crashes ->  8 left
  restart 4:  4 of  8 on, app crashes ->  4 left
  restart 5:  2 of  4 on, app crashes ->  2 left
  restart 6:  1 of  2 on, app runs    ->  1 left
  halving found item-18 in 6 restarts (18 minutes)
  one at a time: 18 restarts (54 minutes)

Seed 2: the culprit is item-08
  restart 1: 32 of 64 on, app crashes -> 32 left
  restart 2: 16 of 32 on, app crashes -> 16 left
  restart 3:  8 of 16 on, app crashes ->  8 left
  restart 4:  4 of  8 on, app runs    ->  4 left
  restart 5:  2 of  4 on, app runs    ->  2 left
  restart 6:  1 of  2 on, app runs    ->  1 left
  halving found item-08 in 6 restarts (18 minutes)
  one at a time: 8 restarts (24 minutes)

Seed 3: the culprit is item-31
  restart 1: 32 of 64 on, app crashes -> 32 left
  restart 2: 16 of 32 on, app runs    -> 16 left
  restart 3:  8 of 16 on, app runs    ->  8 left
  restart 4:  4 of  8 on, app runs    ->  4 left
  restart 5:  2 of  4 on, app runs    ->  2 left
  restart 6:  1 of  2 on, app crashes ->  1 left
  halving found item-31 in 6 restarts (18 minutes)
  one at a time: 31 restarts (93 minutes)

Halving: at most 6 restarts, wherever the culprit hides (log2 of 64, rounded up).
One at a time: 1 to 64 restarts, 32.5 on average (97.5 minutes).

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 bisect_startup.py

Halving took 6 restarts every time, 18 minutes at the program’s assumed 3 minutes a restart. One item per restart took 18, 8 and 31 restarts for these three culprits; over all 64 places a culprit could be, that averages 32.5 restarts (97.5 minutes), and the worst case is 64. Doubling the suspects adds one restart to halving and doubles the work of checking them one by one.

Search a list of 1,000

Press Edit, set N to 1000 and run the program again. Halving needs 10 restarts for each culprit, while turning on one item at a time needs 138, 979 and 244.

Halving needs two things: a single culprit, since two would spoil the clean yes or no of each half, and a test that gives the same answer every time it runs. Microsoft’s article adds a habit worth keeping, “Keep track of which items have been Disabled”, because the list of what is on and off is the state of the search. Developers run the same search on a program’s history: Git documents git bisect as a way to “use binary search to find the commit that introduced a bug”.

Key idea

Every yes-or-no test that splits the suspects in two halves the work left: 64 suspects need 6 tests, and twice as many need only one more.

Checkpoint

Check: Half-splitting the suspects

  1. Question 1 of 2 After a clean boot, 128 startup items and services are turned off, and one of them crashes an app. At most how many restarts does halving need to find it?

    Type a number.

    A hint

    How many times can you halve 128 before one item is left?

    Show the answer: Question 1 of 2

    Answer: 7 restarts

    128, 64, 32, 16, 8, 4, 2, 1: that is seven halvings, so 7 restarts, one more than the 6 that 64 items need. Turning on one item per restart could take up to 128.

  2. Question 2 of 2 You are halving 64 startup items. On restart 1, items 1 to 32 are on and the app runs normally. Which items do you turn on for restart 2?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Items 33 to 48, half of the 32 still in doubt

    Each test keeps the half that still holds the culprit. After restart 1 that is items 33 to 64, so restart 2 turns on 33 to 48 and leaves 49 to 64 off.

One change at a time, and a note for each

A test means something only when exactly one thing changed since the last. Here is the log of a ticket about lost sound in video calls on one laptop, one change per line and the same test after each:

Time (UTC+05:30) Change made Test Result
10:02 None Test call in the meeting app No sound in the headset
10:05 None A video and the mic test in the browser Both work: the headset is fine
10:09 App’s speaker: Default to Headset Test call Sound works
10:11 Speaker back to Default (undo) Test call No sound again: the setting is the cause
10:13 Speaker set to Headset again A real call with the user Sound works; the user confirms

The line at 10:05 split the path: the headset works outside the app, so the fault is in the app. The line at 10:11 is the one most people skip: putting the old setting back and watching the fault return proves the setting was the cause, not a coincidence. Anyone who reads this log tomorrow can repeat a line and get the same result, which is the test of a good note. A note that someone else can continue holds:

  • the symptom in the user’s words, and how you restated it;
  • the scope: who has it, since when, and what changed;
  • every test with its exact steps, its result and its time, with its UTC offset;
  • every change, and whether it was kept or undone;
  • what is still unknown, when the ticket moves on;
  • the cause, the fix, the user’s confirmation and the prevention.

When a ticket goes to another tier, this note lets them continue instead of starting again; the lesson on IT support roles, tiers and channels shows where it goes.

Changing two things before the next test

Wrong: update the audio driver and change the app’s speaker setting, then test once. The sound works and nobody knows which change fixed it, so the next ticket like it gets a driver update it may not need. Right: one change, one test, one line in the log, and put back any change that made no difference before trying another.

Checkpoint

Check: One change at a time, recorded

  1. Question 1 of 2 A laptop shows no picture on an external monitor. Before testing, a technician replaces the cable, updates the display driver and switches the display mode from duplicate to extend. Now the picture appears. What can the note say about the cause?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Nothing certain: any one of the three changes may have fixed it

    One change, then the same test, then a line in the log: only that order ties a result to a change. To recover here, undo the changes one at a time and test after each.

  2. Question 2 of 2 Which of these belong in a note that another technician can continue from? Choose every one that does.

    Choose every answer that is right.

    Show the answer: Question 2 of 2

    Answer:

    • What is still unknown
    • Each test with its steps, its result and its time, with its UTC offset
    • Every change made, and whether it was kept or undone

    A good note lets another technician repeat any test and get the same result: the symptom, the scope, every test and change with its result, what is still unknown, and at the end the cause, the fix and the prevention.

Reversible steps first, and a way back before the rest

Some steps cost nothing to undo, and some cannot be undone at all, so try them in that order. The table runs from the first kind down to the second; for the recovery options among them, the keeps-and-loses column is what Microsoft’s documentation says:

Step What it keeps, and what it loses The way back
Restart, re-seat a cable, swap in a known-good part Everything saved; a restart clears memory Nothing to undo, or put the old part back
Turn off a startup item or an add-in Everything; the item stops loading Turn it on again
Test in a new user account The user’s own account, untouched Delete the test account
Uninstall an update Files, apps and settings; some updates cannot be uninstalled Install it again
System Restore Personal files; later system changes are undone Reinstall what it removed
Edit a registry value The old value, only if you saved it Export the key first (File > Export); File > Import restores it
Reset this PC Personal files if you choose; apps and settings go None: back up first
Clean reinstall or reimage Nothing on the drive None: back up first

Read the table from the top: the lower a row, the more it takes to undo, and the last two have no way back at all. Apple’s safe mode article suggests the third row on a Mac, because a new account does not have the old one’s startup software and settings. Before any step without a way back, make one: a backup of the user’s files, an exported registry key, or a snapshot: A saved state of a virtual machine, its settings, its disks and, if it was running, its memory, to which the VM can be restored later. Hyper-V calls it a checkpoint. It is not a backup. More in “Build a practice lab with virtual machines” of a virtual machine when you practise. A step that cannot be undone is sometimes right, but choose it with the evidence in hand, never because the queue is long. The practice lab lesson builds a virtual machine to try the bottom rows on.

Key idea

Try every step you can undo before one you cannot, and make a way back, a backup, an exported key or a snapshot, before a step that has none.

Checkpoint

Check: Reversible steps first

  1. Question 1 of 2 An app on one PC has crashed since this morning's Windows update. Of these fixes, which do you try first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Uninstall that update

    Work down the table from the top: a step that undoes the change and keeps everything comes before steps that remove apps, settings or files.

  2. Question 2 of 2 Nothing milder has fixed a laptop, and you decide to reset it. What must be in place before you start?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: A backup of the user's files that you have checked

    Before any step without a way back, make one. For a reset that is a backup of the user's files, checked by opening a few of them; on a practice machine, a snapshot does the same job.

Practise: find the culprit with the fewest restarts

Write the search of this lesson as a function. The sample tests count every restart your code asks for, so a version that checks one item at a time finds the culprit and still fails:

Exercise · Easy · Python

Find the culprit by halving the suspects

Write find_culprit(items, still_fails). One item of items, such as a startup app, a browser add-in or a font, makes a problem happen. still_fails(subset) restarts the computer with only the items of subset turned on and returns True when the problem still happens. Return the culprit, calling still_fails no more than ceil(log2(len(items))) times, as the lesson's half-splitting does.

  • Among the eight apps ["sync", "vpn", "chat", "pdf", "audio", "cloud", "print", "backup"], it returns "cloud" after 3 calls when "cloud" is the culprit, and finds any of the eight in at most 3.
  • 64 items need at most 6 calls, 5 items at most 3 and 100 items at most 7.
  • One item needs no call at all, and two items need one.
  • items itself must not change.

The starter turns on one item per restart. It finds the culprit, but it needs 6 restarts for "cloud", and up to 64 for 64 items.

Starter code · culprit.py

def find_culprit(items, still_fails):
    """Return the one item of items that makes the problem happen.

    still_fails(subset) restarts with only the items of subset turned on and
    returns True when the problem still happens. Call it no more than
    ceil(log2(len(items))) times: 3 for 8 items, 6 for 64.
    """
    # This version turns on one item per restart: the right answer, but far
    # too many restarts. Halve the suspects instead.
    for item in items:
        if still_fails([item]):
            return item
    return None
The sample tests · test_culprit.py
from culprit import find_culprit

APPS = ["sync", "vpn", "chat", "pdf", "audio", "cloud", "print", "backup"]


def restarts(bad, budget):
    """A pretend restart: still_fails(subset) is True when the bad item is on."""
    calls = []

    def still_fails(subset):
        calls.append(list(subset))
        assert len(calls) <= budget, f"more than {budget} restarts"
        return bad in subset

    return still_fails, calls


def test_finds_cloud():
    """finds cloud among the eight apps in 3 restarts"""
    still_fails, calls = restarts("cloud", 3)
    assert find_culprit(list(APPS), still_fails) == "cloud"
    assert len(calls) == 3


def test_every_position_of_eight():
    """finds the culprit wherever it is among the eight apps"""
    for bad in APPS:
        still_fails, calls = restarts(bad, 3)
        assert find_culprit(list(APPS), still_fails) == bad


def test_sixty_four_items():
    """finds one item among 64 in at most 6 restarts"""
    items = [f"item-{i:02d}" for i in range(1, 65)]
    for bad in ["item-01", "item-08", "item-18", "item-31", "item-32", "item-33", "item-64"]:
        still_fails, calls = restarts(bad, 6)
        assert find_culprit(items, still_fails) == bad


def test_uneven_halves():
    """keeps to the budget when the halves cannot be equal: 3 items in 2, 5 in 3, 100 in 7"""
    for n, budget in [(3, 2), (5, 3), (100, 7)]:
        items = [f"app-{i}" for i in range(n)]
        for bad in items:
            still_fails, calls = restarts(bad, budget)
            assert find_culprit(items, still_fails) == bad


def test_one_and_two_items():
    """needs no restart for one suspect and one restart for two"""
    still_fails, calls = restarts("only", 0)
    assert find_culprit(["only"], still_fails) == "only"
    for bad in ["first", "second"]:
        still_fails, calls = restarts(bad, 1)
        assert find_culprit(["first", "second"], still_fails) == bad


def test_keeps_the_list():
    """leaves the list of items it is given unchanged"""
    items = ["sync", "vpn", "chat", "pdf", "audio", "cloud", "print", "backup"]
    still_fails, calls = restarts("pdf", 3)
    find_culprit(items, still_fails)
    assert items == ["sync", "vpn", "chat", "pdf", "audio", "cloud", "print", "backup"]
A hint

Keep the suspects still in doubt as one slice, items[lo:hi], and test only its first half each round. If the problem still happens with that half on, the culprit is in it; if not, it is in the half you left off. Keep that half, drop the other, and stop when one suspect is left: it needs no test of its own.

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 lesson’s self-check. Its questions follow your answers, beginning with the idea you are least sure of, and every choice carries its reason:

Practice that adapts to you

Practise this lesson

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

  1. Question 1 of 14 What does the last of the six steps, document, write down?

    Choose one answer.

    Show the answer: Question 1 of 14

    Answer: The cause, the fix and how to prevent it, in words the next technician can follow

    The method ends by documenting the cause, the fix and the prevention, so the work helps the next ticket as well as this one.

  2. Question 2 of 14 You set a user's default printer, and a test page prints. The user then runs the monthly invoices from the accounts app, and it fails with "access denied". What do you do?

    Choose one answer.

    Show the answer: Question 2 of 14

    Answer: Go back to listing causes with the new evidence, since printing itself works

    Verification of the whole task is what sends you round the loop. The new symptom, access denied, is evidence for a different cause, as the failed save was on the drive ticket.

  3. Question 3 of 14 Everyone in a company, at every site, has had no email since 11:00. What does that scope point to?

    Choose one answer.

    Show the answer: Question 3 of 14

    Answer: Something central that everyone shares, such as the mail service or a change made for everyone

    The wider the scope, the more central the cause. Everyone at once points at a shared service or a change made for everyone, and at the service's status before any single PC.

  4. Question 4 of 14 A user's laptop opens no websites at all at home, but it works normally in the office. What does this scope tell you?

    Choose one answer.

    Show the answer: Question 4 of 14

    Answer: The cause is in what differs at home, such as the home network or a laptop setting used only away from the office

    Scope compares where it works with where it fails. The same laptop working in one place and failing in another points at whatever differs between the two places.

  5. Question 5 of 14 A wireless mouse stopped working. Three causes fit: its USB receiver has come loose (likely, 10 seconds to check), its batteries are flat (likely, 1 minute), the mouse is broken (less likely, 5 minutes to find a spare). In which order do you test?

    Choose one answer.

    Show the answer: Question 5 of 14

    Answer: The receiver, then the batteries, then a spare mouse

    Order the tests by likelihood and by cost together: likely and cheap first, unlikely and costly last.

  6. Question 6 of 14 Why was the light on the charging connector the first check for the laptop that would not charge?

    Choose one answer.

    Show the answer: Question 6 of 14

    Answer: It took seconds and showed at once whether power reached the laptop, ruling out half of the power path

    The cheapest checks that cut the problem in two come first. With the light off, the outlet, the charger and its cable were left, and the battery report was not needed.

  7. Question 7 of 14 An app shows "Cannot connect to the licence server", while the web browser on the same PC works. Which strategy fits?

    Choose one answer.

    Show the answer: Question 7 of 14

    Answer: Top-down: the error names a layer, and the working browser shows the network under it works

    Top-down fits when an error names a layer. Here the app says what failed, and the browser shows the network works, so the search starts at the app and its route to the licence server.

  8. Question 8 of 14 Print jobs from one user's PC never come out of the shared printer, and both the PC and the printer are suspects. Which single test settles the most?

    Choose one answer.

    Show the answer: Question 8 of 14

    Answer: Print to the same printer from another PC that is known to work

    Strategies combine: a print from another PC known to work is a known-good swap that also halves the path between the user's PC and the printer, in one test.

  9. Question 9 of 14 At most how many restarts does halving need to find one culprit among 1,000 startup items?

    Type a number.

    A hint

    Find the smallest power of 2 that reaches 1,000.

    Show the answer: Question 9 of 14

    Answer: 10 restarts

    2 to the power 9 is 512, too few, and 2 to the power 10 is 1,024, so 10 restarts, as the program printed when N was set to 1000. One item per restart took 138, 979 and 244 restarts for the same three seeds.

  10. Question 10 of 14 You are halving 16 browser add-ins. With add-ins 1 to 8 on and the rest off, the browser crashes; with 9 to 16 on and the rest off, it crashes too. What does that tell you?

    Choose one answer.

    Show the answer: Question 10 of 14

    Answer: There is more than one culprit, or the cause is something on in both runs, so test with all 16 off first

    Two crashes with no add-in in common break halving's first condition, one culprit. A run with all 16 off shows whether the cause is outside the add-ins; if that run is clean, look for two culprits.

  11. Question 11 of 14 In the sound ticket's log, why was the speaker set back to Default at 10:11, although the sound already worked?

    Choose one answer.

    Show the answer: Question 11 of 14

    Answer: Watching the fault come back proves that the setting was the cause, not a coincidence

    A fault that returns when the change is undone, and goes when it is redone, ties the result to that change. That line is what lets the note name the cause.

  12. Question 12 of 14 What is the test of a good troubleshooting note?

    Choose one answer.

    Show the answer: Question 12 of 14

    Answer: Another technician can repeat any line of it and get the same result

    The lesson's test is repeatability: each line holds the change, the test and the result, so anyone can run it again and compare.

  13. Question 13 of 14 Which of these steps can be undone without losing anything?

    Choose one answer.

    Show the answer: Question 13 of 14

    Answer: Turning off a startup item

    The top rows of the lesson's table keep everything and are undone in seconds; the bottom rows remove apps, settings or files and need a way back made beforehand.

  14. Question 14 of 14 A vendor's support article says that changing one registry value fixes its app. What do you do before you change it?

    Choose one answer.

    Show the answer: Question 14 of 14

    Answer: Export the key in Registry Editor (File > Export), so that File > Import can put it back

    Before any step that has no way back of its own, make one. For a registry edit that is an exported key, as Microsoft's article on backing up the registry describes.

Interview questions

Warm-up (fresher): what is half-splitting, and why does it beat checking suspects one at a time?

Half-splitting finds one faulty item among many by testing half of them at a time. You turn on, or connect, half of the suspects and run a test whose answer is yes or no: if the fault appears, the culprit is in that half, and if not, it is in the other one. Each test rules out half of what is left, so n suspects need at most log₂ n tests, rounded up: 8 startup items need 3 restarts, 64 need 6 and 1,000 need 10. Checking one at a time needs up to n tests, 32.5 on average for 64 items. It works when there is a single culprit and the test gives the same answer every time, and it needs a written record of which half was on for each test.

Two harder questions start where this lesson stops: a fault that reaches many PCs at once, and a freeze that never happens while you watch. Plan an answer to each before you open its page.

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Mid to senior

    After an overnight Windows update, 40 of a company's 250 PCs show a black screen after sign-in, and more tickets keep arriving. A colleague has already fixed two of them by uninstalling the update by hand. What do you do in the next hour, and what happens to those two PCs?

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

  2. Fresher to mid

    A user says her laptop freezes for about ten seconds "a few times a day", but it never happens while you are watching, and a restart did not help. How do you find the cause?

    Model answer, Pro. First step and follow-ups

Flashcards · 6 cards

Recall it, then check

Say the answer to yourself before you look: recalling it is what makes it stick.

  1. What are the six steps of the troubleshooting method?

    Restate the symptom, scope it, list the likely and cheap causes, test one change at a time, fix and verify that the whole task works, then document it. When the fix falls short, go back to the list of causes.

  2. Which three questions scope a fault before you guess at its cause?

    Who has it, since when, and what changed. A fault shared by many users is fixed at its source rather than one PC at a time.

  3. Which troubleshooting strategy suits which clue?

    Top-down when there is an error message, bottom-up when nothing works at all, half-splitting when there are many similar suspects, and a known-good swap when a spare part is at hand.

  4. How many restarts does half-splitting need to find one bad startup item among 64?

    Six. Each yes-or-no test halves what is left, and 2 to the power 6 is 64. Twice as many suspects, 128, need only one restart more.

  5. Why make only one change per test and write each test down?

    So that a result points at one cause, and so that another technician can repeat or continue the work. Undo every change that did not help.

  6. When does a step you cannot undo come, and what do you make before it?

    After every step that can be undone, such as a restart or a disabled startup item. Before a reset, a reimage or a registry edit, make a way back: a backup, an exported key or a snapshot.

Key takeaways

  • Work every ticket through six steps: understand and restate the symptom, scope it, list likely and cheap causes, test one change at a time, fix and verify the whole task, then document.
  • Scope before you guess: who has the fault, since when and what changed decide where to look, and a fault that hits many users is fixed at its source, not one PC at a time.
  • Choose the strategy by the clue: top-down from an error message, bottom-up when nothing works, half-splitting for many alike suspects, and a known-good swap when a spare is at hand.
  • Halving needs at most log₂ n tests, rounded up: 6 restarts for 64 startup items, against 18, 8 and 31 one at a time in the lesson’s three runs.
  • Make one change per test, write each test and result down as you go, and undo what did not help, so another technician can repeat or continue your work.
  • Try every step you can undo before one you cannot, and make a way back before a reset, a reimage or a registry edit.

Terms in this lesson

half-splitting
Finding one faulty item by testing half of the suspects, or the middle of a path, at a time and keeping the half that still fails. n suspects need at most log2 n tests, rounded up: 6 for 64.
known-good swap
Replacing one suspect part, such as a cable, a charger or a whole PC, with one of the same kind that is known to work, so that a single test shows whether that part is at fault.
reversible step
A troubleshooting step that can be undone without losing anything, such as a restart, a disabled startup item or an uninstalled update. Reversible steps come before ones with no way back, such as a reset.
root cause
The condition that makes a fault happen. Fixing it stops the fault from coming back, while fixing only a symptom, or working around it, leaves the cause in place.

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.