A check engine light names a circuit, not a part
A check engine light means the engine control module saw a reading outside the range it expects and stored a code identifying that circuit. It does not identify the failed part. This is the single most expensive misunderstanding in car ownership, because the code often shares a name with a component, and people buy that component. A P0171 says the engine is running lean; it does not say the oxygen sensor is bad, and most of the time the sensor reporting the problem is working perfectly.
by the technicians at Instant Auto Repair, Detroit, MI.

Steady light versus flashing light
A steady light means a fault is stored and the car can generally be driven to a shop. It is not an emergency, but it also is not something to leave for six months, because a small fault often causes a larger one downstream.
A flashing light is different and means stop driving. It signals an active misfire severe enough that raw fuel is passing into the exhaust, and raw fuel in a catalytic converter destroys it quickly. What starts as a coil pack turns into a converter, which is a much larger bill.
Why a free code read is not a diagnosis
A parts counter reads the stored code and prints it. That is a starting point, and a genuinely useful one, but it is the beginning of the process rather than the end.
A diagnosis takes that code and tests the circuit it names. For a lean code, that means checking fuel trims at idle and at load, smoke testing the intake for vacuum leaks, checking fuel pressure and looking at whether the readings are consistent with a sensor problem or with unmetered air getting in. Those tests separate a $30 fix from a $600 one.
The reason this matters financially is that parts are usually not returnable once fitted. Guessing wrong twice costs more than diagnosing once.
The codes people most often misread
P0420, catalyst efficiency below threshold. Frequently blamed on the converter. Just as often it is an exhaust leak ahead of the sensor, a lazy downstream sensor, or an engine running rich enough to overwhelm a healthy converter. Replacing the converter without fixing the cause kills the new one too.
P0171 and P0174, system too lean. Usually unmetered air entering after the mass airflow sensor, which means a split intake boot, a failed PCV hose or a leaking gasket. Rarely the oxygen sensor doing the reporting.
P0300 series, misfire codes. These name the cylinder, which is genuinely useful, but the cause can be a coil, a plug, an injector, a vacuum leak or low compression. Swapping the coil to a different cylinder and seeing whether the misfire follows it is a two-minute test that settles it.
If the light went off by itself
The fault stopped repeating, but the code stays in memory as history and the readiness monitors record it. Intermittent faults almost always return, and usually in worse weather, since heat and cold change the resistance in a marginal connection.
For a Michigan emissions retest this matters practically: clearing codes right before a test does not work, because the monitors then read as not ready and the test cannot be completed until a full drive cycle has run.