The first shape is two implementations of one idea: different languages, different rounding, different time windows, or different handling of missing values. This is the fraud example above, and it is the most common. It hides on the serving side: a live request usually carries only an id, and the server fetches the feature values from a store before calling the model. If that store computes a feature differently from the training job, every request is affected.
The second is time leakage in training data. When you attach feature values to past labelled events, a careless join uses today's value instead of the value at the event's time. Say an event happened at 10:05, when the user's 7-day order count was 3, but the join attaches 11, the value at 16:00. The model learns from information that did not exist at prediction time, so it trains on a world it will never see live.
The third is two pipelines for the same feature. In the Lambda architecture, one batch job recomputes accurate values from full history while a separate streaming job keeps the newest values fresh, so a feature like 'seven-day purchase count' is written twice, in two engines. If a change reaches one and not the other, the values disagree. A smaller fourth shape is order: if the serving code assembles the feature vector in a different order from training, each value lands in the wrong slot.