I Have a 398-Day Snap Streak With a Friend, and Last Night I Almost Let It Die

Dean
Streaks have become part of the daily routine for many of us. You wake up, check your snaps, send something back and move on with your day. Sometimes it is a proper photo of what you are doing. Other times it is your breakfast, the road on your way to work, a blurry ceiling, a black screen or anything you can send before the day ends. It may look small and meaningless from the outside, but over time it becomes one of the ways we keep up with the people we care about.
Not every friendship has the time or space for a phone call every day. You may live in different countries, work different hours or simply be too tired to have a long conversation. A streak gives you a small window into each other’s lives without having to plan anything. You see where your friend is, what they are eating, what the weather looks like around them or what kind of day they might be having. It is a low-effort way of saying, “I am still here,” and receiving the same message back.
In a world where many of our friends are scattered across different cities and countries, Snapchat streaks can feel like the glue holding those connections together. But what happens when that glue is not as strong as we think it is?
Before I dive deeper into this and suggest what type of Gorilla Glue we might need, let me introduce myself. My name is Dean N. I’m a web developer, ex-photographer trying to pick up my camera again, and I’m currently building a fitness accountability app. At the moment, I’m working on the app’s data model.
You may be wondering, what the f****** is a data model, and what does it have to do with Snapchat streaks being the glue holding together your failed friendships and situationships?

Fair question.
Think of a data model as the plan or guide for how information will be stored and how the different pieces of that information relate to one another. You have probably done a simple version of this before without calling it data modelling. When you plan a vacation, create a meal plan for the week or write down your weekly expenses, you decide what information you need and how each part connects to the others.
For a more technical example, think about a spreadsheet. A spreadsheet stores information about a particular thing. In a database, the spreadsheet would be called a table, each row would be a record and each column would hold a fact about that record.
While building my fitness accountability app, I had to design its data model and decide how the different parts of the app relate to one another. A user can log many workouts. A user can join many groups, and a group can have many users. I will go deeper into my app’s data model in another article, but this same way of thinking can help us understand how a Snapchat streak might work behind the scenes.
Let’s imagine Snapchat has a table called snaps. Every time someone sends a snap, a new record is added to that table. The record could contain details such as the sender’s ID, the recipient’s ID, the date the snap was sent and the exact time it was created. Snapchat probably stores more information than this, but these are the basic details we need for this example.
To maintain a streak with a friend, Snapchat needs to check whether both people sent a snap to each other within the required time period. It is a mutual, two-directional condition: Did A send a snap to B, and did B send a snap to A? 1
Only when both are true does the day count towards the streak. If one person goes quiet, the condition is not met, and you get the dreaded “streak died” moment that everyone knows.
A snap connects two users. “Dean sends a snap to Juls” and “Juls sends a snap to Dean” would be stored as two separate records. The streak logic then checks whether both records exist for that day.
For example, on June 11, Dean sends Juls a snap, but Juls is busy and does not send anything back.

In our simplified snaps table, we would expect to find two records:
| sender_id | recipient_id | sent_on | status |
| Dean | Juls | June 11 | Exists |
| Juls | Dean | June 11 | Missing |
The first record exists because Dean sent a snap to Juls. The second record is missing because Juls did not send one back. Since the day needs both directions to be present, June 11 does not count as a streak day, and the streak breaks.
Here is the thing, though. Snapchat streaks are considered low effort, but maintaining one still requires both people to be intentional every single day. I have been threatened not to kill a streak, and many of my relationships are hanging on by the tiny thread of keeping one alive. But are we maintaining these streaks just to see a fire emoji and a number beside someone’s name, or are they actually helping us strengthen the bond between us?
What does it mean when I send you a snap of my flooded area and you open it without saying a word? What does it mean when I send you a black screen, which might be my way of saying I am going through it, and you do not pause to ask whether I am okay?
As far as the database is concerned, both people sent a snap, so the day was successful. The streak continues. But what exactly continued: the connection between us or just the number?
Now that we know a streak needs both people to send a snap, let us go a little deeper into how this could work in a database.
I obviously do not know what Snapchat’s actual database looks like, but if I were building a simple version of the feature, I would need three main tables: a users table, a snaps table and a streaks table.
The users table would store each person using the app. The snaps table would store every photo or video sent from one person to another. The streaks table would store the relationship between two users, the current number of consecutive days, when the last streak day was completed and when the current streak is expected to expire.

Let us say Dean and Juls already have a 397-day streak. On June 11, Dean sends Juls a snap in the morning and Juls sends one back later that evening. Two new records are added to the snaps table.
| id | sender_id | recipient_id | sent_at |
| 501 | Dean | Juls | June 11, 10:12 a.m. |
| 502 | Juls | Dean | June 11, 8:48 p.m. |
The streak logic checks whether there is at least one qualifying snap from Dean to Juls and at least one from Juls to Dean within that daily streak window. Because both records exist, the condition is complete and the streak count moves from 397 to 398.
The row in the streaks table might now look like this:
| user_one | user_two | current_count | last_completed_at | status |
| Dean | Juls | 398 | June 11 | Active |
The number beside the fire emoji is not the total number of snaps we have exchanged. We could send each other twenty snaps that day and the streak would only increase by one. The number represents how many consecutive days the streak has been kept alive. Snapchat officially describes it as the age of the streak in days.
Now imagine that I send Juls a snap on the next day, but they sends nothing back. The database has one direction, but the other direction is still missing. My snap alone is not enough to move the count from 398 to 399.
As the streak moves closer to its expiry time, Snapchat shows the hourglass emoji. In our simplified database, the streak could have an expires_at value. If the current time is getting close to that value and the system is still missing a snap from one of us, the app displays the hourglass as a warning.
Snapchat does not tell us exactly how long the hourglass stays there. It only says that it means the streak is about to expire and that both people should send each other a photo or video snap as soon as possible.2
Technically, the hourglass is just a warning that the streak is about to expire. But when keeping it alive depends on someone you care about, it can feel like waiting to see whether they will show up for you.

A Snapchat streak can be anxiety-inducing because keeping it alive does not depend on you alone3. It depends on someone else choosing to show up every day too. When you are close to someone, or still trying to understand what your relationship with them is, that small action can start to carry more meaning than it should.
It can feel like waiting for a reply. You know they may be busy. You know they have a life outside their phone. Still, you notice that they have not sent anything. Then the hourglass appears and suddenly you are wondering whether they forgot, whether they are going through something or whether they simply do not care about keeping the streak anymore.
Snapchat itself has admitted that some people feel pressure to respond because they do not want to lose their streak. That pressure is part of why it introduced the option to restore recently expired streaks.4
That restore button gives us some grace, but it also raises another question: what exactly are we trying to restore?
What happens when your friend is going through a difficult time and accidentally kills the streak? What happens when they kill it on purpose? I have had people become angry with me because I ended a streak. I have also had people stop speaking to me after I stopped streaking with them.
When that happens, what does ending the streak signify? Was the friendship already fading, or did the streak ending make it feel official?
A streak measures consistency, not connection. You can have a 398-day streak with someone you have not had a real conversation with in months. You can exchange black screens every day without knowing what is happening in each other’s lives. The database sees the two records and counts the day as a success. It cannot tell whether anyone felt seen, heard or cared for.
Is the streak keeping the friendship alive, or is it standing in for it?
Reference:
- Snapchat Support, “How Do Streaks Work and When Do They Expire?” Read the official Snapchat explanation. ↩︎
- Snapchat Support. “What Do My Friend Emojis Mean on Snapchat?“ Read the official Friend Emoji guide ↩︎
- Snap Inc. “Best Friends, Streaks, and the Solar System.” 5 April 2024 Read the official Snap Newsroom post ↩︎
- Snapchat Support. “I Lost My Streak. How Do I Restore It?” Read the official restoration guid ↩︎
Tap the heart if this landed
