# T-shaped Signals

Semantic Conventions approaches observability with a T-shaped mindset. This
splits signals into two types of a "T" shape:

```mermaid
block-beta
        columns 3
          Broad["Broadly Applicable Signals"]:3
        columns 3
          space:1
          Deep("Rich,\nDeep\nSignals")
          space:1
```

This matches an 80-20 rule, where 80% of users (or use-cases) can leverage the
broadly applicable signals and 20% of users (or use-cases) will dive deeply into
a problem with deep signals.

## Broadly Applicable Signals

These are conventions meant to provide a baseline observability experience
across a domain. An example includes HTTP semantic conventions that allow
general-purpose dashboarding, alerting, and diagnostics for HTTP
(micro-)services. These signals should provide "horizontal" coverage for
observability.

Examples include:

- Golden Signals / RED metrics (Saturation, Rate, Error, Duration)
- High Level Spans
- Error logs, Crash reports
- Request/Response logs

## Rich, Deep Signals

These are conventions meant to provide deep understanding of a specific
system, library, module, application or service. These are used to diagnose
issues specific to that system.

Examples include:

- Linux slab memory usage
- Specific database signals, e.g MySQL index usage
- Language-specific Garbage Collection metrics (JVM, Go, .NET, etc.)

## Recommendations

Defining semantic conventions is a balance between generating
broadly applicable signals and ensuring rich observability for a specific
technology. It is recommended to start with the *broad* use cases and signals
for a particular domain first. After providing a baseline set of signals for
that domain, then explore deeper integrations that may be vendor or
implementation specific.

For example, see [Database semantic conventions](/docs/database/README.md) where
there is general guidance for spans about communicating with a database, and
additionally there is database-specific guidance as an extension of the general.
