Category Archives: Logic

Scrum story points: how a Jedi mind trick saved my sprints

Remember the days when people were proclaiming that Scrum can cure cancer? Not as a joke but, like, seriously? Ah, those were the days šŸ¤¦ā€ā™‚ļø

Of course, that was all a bunch of… trying to sound professional here… nonsense. Yes, it helps if teams of all disciplines can organize their work efficiently. But, I’m sure you’ll be surprised to hear, their work organization before scrum wasn’t exactly a pile of papers thrown around randomly.

After the initial years of agile and scrum hype, the inevitable realization kicked in. That’s not to say scrum isn’t a useful way of organizing work; it definitely is. But parts of it were brought to reality. And a big one was story points.

Using fibonacci numbers to estimate story points
A terrible AI-generated image of hands, with varying number of fingers, holding cards with Fibonacci numbers. Yes, the “8” looks more like a Greek beta “β”.

People came to hate them so very, very much. You can read headlines like “Story Points Are Dead“, “5 Reasons Why Your Story Points Aren’t Working” and so on.

And for good reason. People feel so strongly against them because they are hard to estimate. I’ve been in exhausting hours-and-hours-long meetings trying to get them right. Plus, do they really work? If you’ve spent more than fifteen minutes in a Scrum environment, you’ve heard the “Classical Scrum” lecture: ā€œStory points measure complexity, not time!ā€ It’s a beautiful, noble sentiment. It’s also, quite frankly, a load of… trying to sound professional here… nonsense.

The Great Divide


On one side, you have the Dev team, trying to explain that a “3” is like a medium-sized cat: “it’s not about how long it takes to wash the cat, it’s about how many claws the cat has“.

On the other side, you have literally everyone else—Stakeholders, Project Managers, and probably their puppies—who only want to know one thing: ā€œWhen is this going to be finished?ā€

You can explain Fibonacci sequences until you’re blue in the face, but the business runs on calendars, not abstract integers. We techies need to answer the “when” question without losing our souls -or our weekends.

So, I stopped fighting human nature. Instead, I started using a mind trick.

The Trick: “Days” That Aren’t Days (But are) (Well, kind of) (But not really) (Eh, sort of)

Here is the system I use to bridge the gap between devs and, for a lack of better term, the real world.

I tell my team we are estimating effort in sizes: Small, Medium, and Large. But—and here’s the trick—I tell them to estimate those sizes using “Days of Effort.”

These are not the story points you’re looking for

For a 3-week sprint (15 working days), I only allow three choices:

  • Small: 2 “Days”
  • Medium: 5 “Days”
  • Large: 15 “Days”

Wait, a 15-day story in a 15-day sprint? Yes. Because we all know that “Large” actually means “This is the only thing I am doing, and I’ll probably still be screaming at my IDE on Friday afternoon.”

The “Phase 2” Maneuver (Handling the Unfinished)

Sprints are messy. When the clock runs out, i.e. on the last day of the sprint, and items aren’t done, we don’t just “carry them over” and pretend nothing happened. We follow two rules:

  • The “Zero Progress” Rule: If no work was done during the sprint, the item moves to the next sprint as-is.
  • The “Downgrade” Rule: If some work was done, we downgrade the effort by one grade (15 becomes 5, 5 becomes 2, 2 stays 2) and set it to “Done”. We then create a “Phase 2” copy of the ticket for the next sprint with the effort that we estimate is remaining -can be anything from Small to Large. If the item (usually a PBI) has unfinished tasks, we change their parent to the new PBI and move them to the next sprint as well.

Note: we only estimate PBIs, not Tasks. In our board, Tasks are welcome and encouraged, but not mandatory.

At the end of the sprint, we look at what was actually finished. We take the average of the last three sprints, and that is our Velocity. If our average is 90 “effort-days”, we don’t commit to 150. We aren’t heroes; we’re mathematicians (well, the good kind).

Why Does This Work? (The Science of Being Wrong)

To be clear, I’m not lying to anyone. I tell my team, the stakeholders, and their puppies (yes I actually tried once; the puppy seemed to nod in agreement though she may have thought I’ll give her a treat and was promptly disappointed) exactly how this works. And yet, it still works. Why?

No idea, I just want my treat

Because developers are notoriously terrible at estimation, but—and this is key—we are consistently terrible.

Think of it as the Mindset Coefficient μ.

When a developer estimates the effort E required to complete a piece of work, the real effort R can be calculated by:

R=μ×ER = μ Ɨ E

The value of μ depends on the specific people in the room. As long as the team remains the same, μ stays remarkably constant. They might think they’re estimating “days,” but they’re actually providing a consistent unit of “their own personal version of time.”

No, not this version of time

By using the downgraded “Phase 2” tickets and the 3-sprint average, we are effectively solving for μ using real-world data. We aren’t trying to force developers to be “correct”; we are calibrating our planning to account for their specific brand of optimism. The famous developer’s optimism is the reason why μ is always always always >1.

An Example

Let’s say we start the sprint with 4 PBIs:

  • PBI S1 and S2 are estimated at 2 “days”.
  • PBI L3 is estimated at 15 “days”.
  • PBI M4 is estimated at 5 “days”.
  • In the middle of the sprint, as it often happens, there’s an urgent issue. So we add a PBI M5 which we estimate at 5 “days”.

At the end of the sprint, we’ve finished S1, M4 and M5. So we set them to done (obviously this can be done earlier, doesn’t have to be on the last day).

For S2, we set it to Done. It’s at 2 “days” so this stays the same. We then create a copy “S2 – Phase 2” which we estimate at 2 “days” for the remaining work and assign it to the next sprint.

For L3, we set it to Done. It’s at 15 “days” so we change it to 5 (downgrade by one grade, remember?). Note that the change, in Azure Devops at least, has to be made before setting it to Done. We then create a copy “L3 – Phase 2” which we estimate at 5 “days” for the remaining work and assign it to the next sprint.

So what’s our velocity? For this sprint it’s:

  • Finished S1, M4 and M5 = 2 + 5 + 5 = 12 “days”.
  • Unfinished S2 and L3 = 2 + 5 = 7 “days”.
  • Total 19 “days” of effort.

Of course that’s for a single sprint; we need to average over the last 3, but even if it’s the first sprint of the team, it’s still a useful indicator.

The Result

The team stops sweating the “Complexity vs. Time” debate. Estimation becomes an easy exercise because the options are both relatable and limited. The business gets a velocity they can actually use to project a release date.

It’s a Jedi mind trick because even though everyone knows the “days” aren’t literal, their brains start treating them that way. They think in days, we plan in days, and the “Mindset Coefficient” handles the translation to reality.

Want more “honestly-it-works” advice? Check out my previous post on How to store secrets the right way. Because your API keys shouldn’t be as public as your estimation errors 😊

My problem with history debates online

If you’re in any social medium, I’m sure you’ve come upon one. Would USSR have lost WW2 if not for US’s lend-lease program? Did Mao really kill 50 million people? Were Native Americans peaceful land-loving bison hunters? Were the Turks genocidal? Were the Greeks? Were the Spanish?

Here I’m not going to try and give an answer to these, and many other, questions that I encounter online. Rather, I need to express my deep distaste for the majority of them.

You see, when one does start such a debate online, usually in the context of a social medium, it’s not exactly the case that an impartial scholar wants to discuss historical facts (exceptions do exist; albeit, sadly, few and far between).

No, what happens in the vast majority of cases is that one is trying to express their current preferences, be it ideological, political, social, economic, whatever. And they’re using history as a vehicle.

You can see it everywhere. A debate starts whether “USSR beat Nazi Germany”, which, although wrongly stated in such an absolute way, has undoubtedly some basis in fact. But hidden behind it, not far away, is the projection to modern-day Russia and an attempt to excuse genocidal crimes.

Or take another debate, beloved in US twitter, that somehow the main reason South fought the Civil War was not defending their right to own slaves. Thinly veiled behind it is the american political divide between Republicans and Democrats, usually referred to as “red-blue” divide.

And there lies my deep dislike for such discussions, pleasant exceptions notwithstanding. Far from being truth-seeking, fact-based discourse, they’re disingenuous attempts to impose one’s beliefs unto others.

Or, of course, straight up state propaganda.

This is the great ideological battle of our time

It used to be capitalism vs. communism, free markets vs. central planning

When people talk about ideologies and political beliefs, the mind usually goes to the left/right political divide, commonly referred to as the “political spectrum“. On one side -and I’m obviously oversimplifying here for the sake of brevity- are the proponents of ideas like central planning, social welfare, big government and redistributive taxation. Names like Marx, Lenin, Rosa Luxemburg, Olof Palme and many others come to mind. On the other side one can find ideas like free markets (and their invisible hand), the law of supply and demand, laissez-faire, entrepreneurship and, generally speaking, as small a government as possible. People mention names like Adam Smith, Keynes, Hayek, Milton Friedman and at the extreme end, Ayn Rand.

In addition to the above, if you follow a more holistic school of thought like e.g. the political compass, you would note that there’s more to politics than the way the state handles people’s money. The social behaviours that are or are not allowed are at least as important, if not more. On one hand you have progressive, permissive societies, like Denmark or the Netherlands, and on the other conservative, authoritarian ones like China or Russia.

So clearly both the economic and the societal dimensions of politics are important. People have not only hotly debated the differences between different forms of government, they have literally given their lives for it.

Today, it’s… a bit different.

It’s not that these differences do not exist, or have been ironed out. There are still people that believe that “workers should own the means of production” (a Marxist thesis), others that “a man’s ego is the fountainhead of human progress” (an Ayn Rand thesis) and others of course everything in between.

But everyone that takes even a casual look at talk shows, or the social networks, actually any medium that hosts public discourse will note that the lines are increasingly being drawn in a different way: those that base their opinions on reason -or at least try- and those that advance or fall prey to conspiracy theories and other instances of unfounded beliefs.

I’ve first come to this realization some months ago, when I noted that, during discussions in a social network, I kept agreeing with a left-leaning doctor while being more of a free-market person myself (though I’m nowhere near to being an Ayn Rand fan). At the same time, the doctor kept disagreeing with people that belonged to the same party -or at least were clearly left-leaning. Why? Both of us were defending government policies that, no matter how much you liked or hated the current Greek government, were based on the medical research that was available at the time. The “others” were bashing the actions of the government… because they were convinced that there’s a conspiracy by a video in Youtube.

This is commonly described as a “systemic vs antisystemic” view.

I’ve since tried to follow this a bit more closely, and by now it’s clear to me. You see distinguished members of the US Republican Party distance themselves or even denounce Donald Trump (2025 update: that didn’t age very well). You have virologists that present solid, peer reviewed evidence on COVID-19, and others that rely on unscientific gobbledygook, even flat-out schoolboy math errors, just so they can advance that “COVID is mostly harmless” or “it’s no worse than the flu” (which it bloody isn’t).

Are there always two sides of the story?

Look, let’s be honest here: the last man described as “universalist”, an all-knowing polymath, was Henri PoincarĆ©, and he died more than 100 years ago. Since then, all of us have to please our trust somewhere. We have to believe that someone, in certain areas, tells the truth -and build up on that.

But reducing the matter to just “I believe A, you believe B, why is your belief better than mine?” misses a very big point. At the very minimum, there are beliefs that are validated by reality and ones that are not. To take a simple example: many of us regularly use GPS to help us drive through our city. If you believe that earth is flat, it’s… a little strange to be able use the signal from satellites, isn’t it?

Seems legit

So the conclusion I’ve drawn from all this is the following: sometimes I find myself agreeing with people that normally don’t share my political opinions. Conversely, I might disagree with people that do. That’s fine. At the end, we share the most important political thesis of all: there exists an objective reality and the best way to discover it is to use the scientific method. And yes, reality imposes constraints on us, often unpleasant, and until we find a way to work around them, we need to accept them.

And no amount of YouTube videos can change that.

I’m a translator for Skeptical Science

Short version: I’m honoured to be accepted as a volunteer translator for the Debunking Handbook and skepticalscience.com.

Hoaxes, myths, fake news. Unless you’ve been living under a rock (which is mildly unlikely given you’re reading a blog right now) you’ve encountered at least one, probably many. Is fluoridated water a plan to impose a communist government in the US? (no). Do airplanes spray us with chemicals to make us obedient? (no). Are the members of the UK Royal Family lizards? (no). Do vaccines cause autism? (hell no).

THEY are watching YOU (?)

Over the years, the issue has gotten me both fascinated and to the brink of despair. I’m genuinely fascinated in the way people think –or, as is unfortunately often the case, don’t. And I frequently despair when witnessing how easy it is for people, even ones that I think very highly of, to fall victims to the stupidest of conspiracy theories.

Hard as I try, I’m not immune to this myself –why would I? As a recent example, when reading that “people who curse are smarter” (yes I’m painfully aware of the irony) I immediately fell for it. It was only later that I found out that this is an existing but brutally misrepresented piece of research [link, in Greek].

Many times, when discussing with friends or family, I’ve heard yet another hoax, myth or conspiracy theory. I have then tried, and completely failed, to make my friend or relative aware of the misinformation or fallacy; and not for a lack of well-founded arguments. So I started looking for a way to effectively communicate science and, ultimately, truth.

That’s how I found the Debunking Handbook and skepticalscience.com. Upon reading it, in English, I immediately knew that that’s what I was looking for. The decision to help this effort by translating the handbook in Greek was almost a no-brainer.