Skip to content
Test Types & Methods

Burn-In Testing for Electronics

Learn how to set up burn-in tests for electronic assemblies, log results to TofuPilot, and use burn-in data to catch infant mortality defects.

JJulien Buteau
intermediate10 min readMarch 14, 2026

Burn-In Testing for Electronics: A Complete Guide

Burn-in testing operates products under stress for an extended period to catch infant mortality failures before they reach customers. It's the hardware equivalent of "let it run overnight and see if it crashes." TofuPilot tracks burn-in results alongside your other production tests for complete unit traceability.

What Burn-In Testing Is

The bathtub curve describes electronic failure rates over time:

  1. Infant mortality (early life): High failure rate, decreasing. Caused by manufacturing defects, weak solder joints, marginal components.
  2. Useful life: Low, constant failure rate.
  3. Wear-out: Increasing failure rate at end of life.

Burn-in targets the infant mortality region. By operating the product under stress for hours or days, you accelerate the aging process and force weak units to fail in the factory instead of in the field.

Burn-In Parameters

ParameterTypical rangePurpose
Temperature55-85°C (elevated)Accelerate thermally-activated failures
Voltage10-20% above nominalStress power supply and regulators
Duration24-168 hoursEnough time for weak units to fail
Monitoring intervalEvery 1-4 hoursCatch failures as they happen
Functional checkBefore and after, plus periodicVerify unit still works

Setting Up Burn-In with TofuPilot

Pre-Burn-In Functional Test

Always run a functional test before burn-in to establish a baseline.

burn_in_workflow.py
from tofupilot import TofuPilotClient

client = TofuPilotClient()

def pre_burn_in_test(serial):
    vcc = measure_voltage()
    current = measure_current()
    temp = measure_temperature()

    client.create_run(
        procedure_id="BURN-IN-PRE-CHECK",
        unit_under_test={"serial_number": serial},
        run_passed=True,
        steps=[{
            "name": "Pre-Burn-In Baseline",
            "step_type": "measurement",
            "status": True,
            "measurements": [
                {"name": "vcc_3v3", "value": vcc, "unit": "V", "limit_low": 3.25, "limit_high": 3.35},
                {"name": "current_ma", "value": current * 1000, "unit": "mA", "limit_low": 30, "limit_high": 60},
                {"name": "board_temp_c", "value": temp, "unit": "°C"},
            ],
        }],
    )

Periodic Monitoring During Burn-In

Log measurements at regular intervals during the burn-in period.

burn_in_monitor.py
import time

def burn_in_monitor(serial, duration_hours=48, check_interval_hours=4):
    checks = int(duration_hours / check_interval_hours)

    for check in range(1, checks + 1):
        elapsed = check * check_interval_hours

        # Measure without removing unit from burn-in chamber
        vcc = measure_voltage()
        current = measure_current()
        temp = measure_temperature()

        passed = 3.20 <= vcc <= 3.40 and current * 1000 <= 80

        client.create_run(
            procedure_id="BURN-IN-MONITOR",
            unit_under_test={"serial_number": serial},
            run_passed=passed,
            steps=[{
                "name": f"Hour {elapsed} Check",
                "step_type": "measurement",
                "status": passed,
                "measurements": [
                    {"name": "hours_elapsed", "value": elapsed, "unit": "h"},
                    {"name": "vcc_3v3", "value": vcc, "unit": "V", "limit_low": 3.20, "limit_high": 3.40},
                    {"name": "current_ma", "value": current * 1000, "unit": "mA", "limit_high": 80},
                    {"name": "chamber_temp_c", "value": temp, "unit": "°C"},
                ],
            }],
        )

        if not passed:
            print(f"FAIL at hour {elapsed}: {serial}")
            return False

        time.sleep(check_interval_hours * 3600)

    return True

Post-Burn-In Functional Test

After burn-in, run the same functional test as before. Compare pre and post measurements.

post_burn_in.py
def post_burn_in_test(serial):
    vcc = measure_voltage()
    current = measure_current()

    client.create_run(
        procedure_id="BURN-IN-POST-CHECK",
        unit_under_test={"serial_number": serial},
        run_passed=True,
        steps=[{
            "name": "Post-Burn-In Verification",
            "step_type": "measurement",
            "status": True,
            "measurements": [
                {"name": "vcc_3v3", "value": vcc, "unit": "V", "limit_low": 3.25, "limit_high": 3.35},
                {"name": "current_ma", "value": current * 1000, "unit": "mA", "limit_low": 30, "limit_high": 60},
            ],
        }],
    )

Analyzing Burn-In Data

Pre vs. Post Comparison

TofuPilot lets you compare pre-burn-in and post-burn-in measurements for the same unit. Look for:

ChangeWhat it means
No changeUnit is stable, burn-in passed
Small shift (< 1%)Normal thermal aging, acceptable
Large shift (> 5%)Component degradation, investigate
Failure during burn-inInfant mortality defect caught

Burn-In Failure Rate Tracking

Track the percentage of units that fail during burn-in over time.

MonthUnits burned inFailuresBurn-in failure rate
Jan1,00080.8%
Feb1,200121.0%
Mar1,100252.3%

If the burn-in failure rate increases, something changed in your manufacturing process. The burn-in is doing its job by catching these defects, but you need to find and fix the root cause.

When to Skip Burn-In

Burn-in costs time and money. Not every product needs it.

FactorBurn-in recommendedBurn-in optional
Safety-critical productYes
High field failure costYes
Mature, high-yield processYes
Consumer electronics (cost-sensitive)Yes
Medical/aerospace/defenseYes

Use TofuPilot data to make this decision. If burn-in catches 2% of units and field failure costs $5,000 per incident, burn-in pays for itself. If burn-in catches 0.01% and field failure costs $50, it doesn't.

Burn-In Rack Monitoring

For high-volume burn-in, you may have racks with dozens of units burning in simultaneously. Monitor them all through TofuPilot.

Each slot in the rack uploads periodic measurements. The dashboard shows:

  • Which slots currently have units
  • Current temperature and power consumption per slot
  • Any failures that occurred during the burn-in period
  • Historical burn-in yield per rack position (catches rack-specific issues like bad power connections)

If rack position 12 has a higher failure rate than other positions, the rack needs maintenance, not the product.

More Guides

Put this guide into practice