Take a service you can run locally, enable auto-instrumentation, and make it answer one question it cannot answer today. Pick the question from your incident history, not from this brief. Ship the trace that answers it, the test that proves the instrumentation exists, and the written gap list for everything auto-instrumentation could not see.
Pick the smallest service you have, not the most important one. If you have no incident history, use the questions your on-call rotation asks in the first five minutes of any page. The unaccounted gap between a parent span's start and its first child is the fastest way to find where your code is doing invisible work.
$ docker run --rm -p 16686:16686 -p 4317:4317 jaegertracing/all-in-one
$ OTEL_SERVICE_NAME=checkout GIT_SHA=a3f91c2 ENV=local \
opentelemetry-instrument python app.py
$ pytest tests/test_telemetry.py -q
.. 2 passed
trace 4bf92f3577b34da6a3ce929d0e0e4736 (jaeger UI)
POST /checkout 412ms SERVER
tenant.id = acme <-- the question, answered
service.version = a3f91c2
├─ (338ms unaccounted) <-- gap list item 1
├─ SELECT cart_items 11ms CLIENT
└─ POST /v1/charges 58ms CLIENT
gap-list.md
1. 338ms in pricing.compute() — which of 3 branches ran is invisible
2. cache lookup in cart.get() — hit or miss not recorded
3. the 3 retry attempts against /v1/charges collapse into one span