The five-minute rule: when to ask for help

Junior engineers ask too late. Senior engineers ask sooner. The five-minute rule lands the right balance and respects everyone's time.

There is a moment in every stuck engineer’s day where the right move is to stop typing, take a breath, and ask somebody. Knowing when that moment is, exactly, is one of the most undervalued skills. Ask too soon and you outsource your thinking, learn nothing, and become the person nobody wants to pair with. Ask too late and you have wasted half a day on something a teammate could have unstuck in thirty seconds. The five-minute rule lives in the gap between those two failure modes.

The shape of the rule is simple. When you hit a wall, give yourself a fixed budget of focused effort. Five minutes for the small stuff, fifteen or thirty for the medium stuff, half a day for the genuinely hard stuff. If the timer runs out and you are still stuck, ask. Do not bargain with yourself. Do not “just try one more thing for an hour”. The timer is the whole point.

I learned this rule the hard way, by ignoring it for years.

Why “I’ll figure it out myself” is usually false economy

There is a version of professional pride, especially common in juniors and especially common in people who have been told they are smart, that says asking for help is a confession of weakness. So you grind. You read the docs again. You google the error message and click through pages of Stack Overflow that do not quite match. You restart your laptop. You blame Docker.

I once watched a junior on my team spend almost six hours stuck on an Airflow DAG. The DAG was failing on import with a syntax error that, once you saw it, was obvious: a stray comma at the end of a default_args dict, in a place where Python was perfectly happy with it but the Airflow scheduler choked because of the way it parsed the file. He did not ask. He thought asking would make him look bad. He spent the morning rebuilding the Docker image, the early afternoon downgrading Airflow versions, and the late afternoon, finally, in our team channel, where someone replied within a minute and a half.

Six hours minus ninety seconds. Five hours and fifty-eight minutes thirty seconds wasted. And not just his time: the morning standup the next day was tense because his ticket had not moved. His tech lead was annoyed. The whole picture was worse than if he had typed “hey, my DAG is failing on import with this error, here is the trace, I have tried X and Y, what am I missing?” at minute twenty.

The hidden math here is that the cost of being stuck is almost never just your own time. It is also the time of the people downstream of you, the timeline of the project, the trust you build (or fail to build) with your team. A junior who asks well, after a real attempt, looks competent. A junior who suffers in silence and misses a deadline looks the opposite, even if they were technically working very hard the whole time.

There is also a quieter, more insidious cost. The longer you stay stuck on the wrong path, the more sunk-cost reasoning kicks in. After three hours, you are no longer trying to solve the problem, you are trying to justify the three hours. That is when bad code gets shipped.

How to ask well

The five-minute rule only works if the question you ask, when the timer runs out, is a good one. A bad question gets a bad answer or, more commonly, a tired silence. A good question often gets answered in seconds.

The template I use, lifted in spirit from the Stack Overflow guidelines and from the “Don’t Ask to Ask” community page, is roughly four lines.

First, the goal. What are you trying to do? “I’m trying to make the daily ETL DAG kick off the downstream dbt run when it succeeds.”

Second, what you tried. Two or three concrete things, with enough detail that the reader can tell you actually tried. “I added a TriggerDagRunOperator after the final task and pointed it at dbt_daily. I also tried using a cross_dag_dependency sensor on the dbt side.”

Third, the error or the unexpected behaviour. The actual stack trace, copy-pasted, in a code block, not paraphrased. “It triggers, but the dbt run starts immediately even when the upstream DAG is in a failed state. Logs attached.”

Fourth, your current hypothesis. “I think the trigger is firing on schedule rather than on success, but I can’t figure out where to set the rule.”

That fourth line is the one most people skip, and it is the most powerful. Stating your hypothesis does two things. It tells the responder where to start (so they don’t waste time explaining things you already know), and it forces you to actually think about the problem one more time before pressing send. About a third of the time, writing the hypothesis is when I realise what is wrong. The question never gets sent. That is the rubber-duck effect, and it is the underrated step in the whole flow.

Public channel or DM?

There is a judgement call about where to ask. The default, for almost anything technical, should be the public team channel, not a DM.

A public question is searchable. The next person who hits the same problem finds your thread. The answer becomes part of the team’s collective memory. It also distributes the load: any of three or four people can answer, instead of pinning one specific person. And, crucially, it makes the team smarter, because half the people who see the thread learn something they did not know they needed to know.

The exceptions are narrow. DM if it is genuinely sensitive (a security incident, a personnel issue, an outage you don’t want to broadcast yet). DM if you have already pinged the channel and nobody has answered in a reasonable time, and you specifically need this one person. DM if the question is about that person’s own work and would be weird in public. Otherwise, public.

A small extra: when you do post in public, do not start with “Hi, are you free?” or “Quick question, can I DM you?” That is the “Don’t Ask to Ask” pattern, and it adds a round trip for no reason. State the question. The right people will respond.

Calibrating the timeout

The five minutes in “five-minute rule” is a placeholder, not a literal number. The real version of the rule is: pick a timeout proportional to the cost of being stuck, and stick to it.

For a typo or a missing import in a language you use every day, five minutes is generous. If you have not figured it out in five, you are reading the wrong screen. Ask.

For a config issue, an environment problem, a tool you use occasionally but not daily, fifteen to thirty minutes feels right. You have time to read the error properly, check the docs, try one or two reasonable fixes. If you are still stuck after that, somebody on the team has hit this exact issue before, and your thirty seconds in Slack will save the next thirty.

For a bug in code you wrote, where you actually understand the system, an hour or two is fair. You should be the one who untangles your own mess most of the time. But when the hour runs out and the bug is still there, get a second pair of eyes. Pair-programming for fifteen minutes will out-perform another two hours of solo grinding, almost always.

For an architectural question, the kind where you are deciding whether to use a queue or a stream or whether the new feature should be its own service, the timer is more like a day, sometimes more. You should write a short doc, sketch the alternatives, identify what you do not know, and then bring it to the team. Asking too early on these is its own failure mode: you have not done the thinking, the team cannot help you because you cannot articulate the question, and the conversation goes in circles.

The rule of thumb: smaller, more local problems should make you ask faster. Bigger, more strategic problems need you to do more groundwork before the question is well-formed.

The senior who never asks

The opposite failure mode is real and worth naming. Some senior engineers, especially the ones who built their reputation in the era of “asking for help is weakness”, never ask. They will spend a week stuck on something the new hire could solve in a meeting because the new hire happens to know the framework. They will rewrite an internal library from scratch rather than reach out to the team that owns it. They will ship something subtly broken because they did not want to admit, on a Slack thread, that they did not understand a piece of the system.

This is just as expensive as the junior who never asks. It is just better camouflaged, because senior engineers have enough skill to make slow progress on almost anything, so the cost is hidden inside the timeline rather than on a single ticket. If you are senior, the five-minute rule applies to you too. The bar to ask is lower, not higher, because the cost of your stuck time is bigger.

The healthiest engineering cultures I have worked in had senior engineers who asked questions in public channels constantly. Not for show. Because they had calibrated, over many years, that asking is almost always the right move. Their teams modelled themselves on that, and the place ran better for it.


The five-minute rule is not really about five minutes. It is about agreeing with yourself, in advance, that you are not going to suffer in silence. You try, you set a timer, and when the timer runs out, you write a real question to a real person. The whole game is removing the ego from the loop. The next time you are stuck, the decision is already made. You do not have to be brave; you just follow the rule.

Search