# rpc error: code = NotFound desc = resource not found: order 998877

- **ID:** `go/grpc-not-found-service-method`
- **Domain:** go
- **Category:** data_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The requested resource does not exist on the server. NotFound is a legitimate application-level response, but it is frequently confused with Unimplemented when the method itself is missing.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.x | active | — | — |

## Workarounds

1. **** (90% success)
   ```
   Handle NotFound as a normal application outcome and map it to your domain error:

resp, err := client.GetOrder(ctx, &pb.GetReq{Id: id})
if status.Code(err) == codes.NotFound {
    return nil, ErrOrderNotFound
}
   ```
2. **** (80% success)
   ```
   When eventual creation is expected, poll with a bounded retry and backoff:

backoff := time.Second
for i := 0; i < 10; i++ {
    _, err := client.Get(ctx, req)
    if status.Code(err) != codes.NotFound { return err }
    time.Sleep(backoff); backoff *= 2
}
   ```

## Dead Ends

- **** — Without an explicit wait/backoff and an expectation of eventual creation, retrying a NotFound just repeats the same lookup. (80% fail)
- **** — Many NotFound responses are expected (deleted resources, bad user input); paging on-call for them causes alert fatigue. (60% fail)
