Snowplow is implemented as a unidirectional data pipeline:<p><pre><code>    tracking -&gt; collection -&gt; enrichment -&gt; storage
</code></pre>
Between each step there is typically some kind of persistent queue (mostly S3&#x2F;Kinesis), and data won&#x27;t be lost if a downstream component is not operational. Examples:<p>* If your event collector is unavailable, raw events will be cached in the tracker in localStorage, SQLite or similar<p>* If your Redshift database is read-only for maintenance, enriched events will be held back until Redshift is writeable again