Back to blog
Seasons2 min read

Ramadan moves 11 days a year and your comparison doesn't

Your report says revenue fell 22% year over year. Aligned properly, it rose 26%. Same data, from a comparison that matched dates instead of matching seasons.
Your report says revenue fell 22% year over year. Aligned properly, it rose 26%. Same data, from a comparison that matched dates instead of matching seasons.

Most analytics tools compare March to March. In a market whose biggest month moves about 11 days earlier every year, that comparison can flip the sign of your result from a decline to growth.

The arithmetic

Ramadan days in the monthRevenue
Last March20400,000 SAR
This March9310,000 SAR

Date-aligned: (400,000 − 310,000) ÷ 400,000 = a 22% drop. Read that on a Monday morning and you'll conclude the season failed.

Season-aligned: the first nine days of Ramadan against the first nine last year, 189,000 SAR against 150,000 SAR = a 26% rise.

Same data. The difference is that the first comparison put a month containing 20 season days against a month containing 9.

Why the error runs the same way every year

The Hijri year is roughly 11 days shorter than the Gregorian one, so the drift moves in one direction. A date-aligned comparison doesn't add random noise, it adds a steady bias that reverses about every 16 years as the seasons cycle through the calendar.

For several consecutive years your March comparisons will flatter you, then for several consecutive years they'll punish you. Neither run tells you anything about your store, and both feel like a real trend.

How to align it correctly

Match the season day, not the calendar date. Day 1 of Ramadan this year against day 1 last year, for the same number of days.

Use equal-length windows. Comparing 9 days against 20 isn't a comparison. If only 9 days have passed this year, compare them against last year's first 9. A running comparison during the season is valid and useful, as long as both sides stay the same length and you update it daily.

Decide the ranges before the season starts. Decide during it and you'll pick whichever alignment flatters the number without noticing you did.

Write the ranges down somewhere fixed. Next year someone will need to reproduce the same comparison, and "last Ramadan" isn't a reproducible range.

Season alignment and saved comparisons in Flowfy are on the roadmap and haven't shipped. Today you align it yourself by selecting both ranges, day 1 to day N this year against day 1 to day N last year. It takes a minute, as long as someone remembers to do it rather than accepting the default.

The other seasons, moving and fixed

The same logic applies to Eid al-Fitr and Eid al-Adha, because they move with Ramadan. It doesn't apply to National Day or White Friday, which are fixed to the Gregorian calendar.

So a store that compares all its seasons the same way will be right about two of them and wrong about three. That mixed situation belongs in whatever document defines your reporting, because it isn't obvious and the first person to inherit those reports will get it wrong.

The practical step

Fix the Ramadan dates for the last two years and write them down. Before any year-over-year read of the season, check that both sides cover the same number of days from the start of the month.