Sertaç Yıldırım field notes

Home → Leadership

The Calendar: Focus Blocks, Not a Full Schedule

Tuesday, 17:20, the middle of a sprint. A senior engineer on the team shared their calendar on the screen: “The only place I have two free hours in a row this week is Friday at 14:00.” I checked meeting time per person: 11 hours a week. That did not look like a lot. Then I looked at the gaps between the meetings.

Summary
  • Meeting hours are the wrong measure. The same 11 hours can leave two uninterrupted blocks a week or seven, depending on where they sit.
  • Count two-hour blocks. Per person, per week: at least two hours with no meeting inside.
  • Move meetings, do not just delete them. When I cancelled meetings, hours went down but blocks only went from 2 to 3. When I grouped meetings in the afternoon, blocks went up to 7.
  • A meeting budget is a ceiling. A new recurring meeting only comes in if an old one goes out.
  • Collect interruptions in one person. A weekly shield rotation saves five people’s mornings at the cost of one person’s week.
  • The person breaking up the mornings is often the manager. My own calendar had 9 meetings in the team’s mornings.

Why a full calendar is the wrong measure

An engineer’s day has a core of 7 hours: 09:30–17:30, with lunch in the middle. That is 35 hours a week. If 11 of them are meetings, 24 hours of work are left on paper. That sounds fine.

But those 24 hours are not in one piece. A 30-minute meeting at 10:00, another one at 11:30. The hour between them looks “free”. In reality, the first 15 minutes go to messages from the first meeting and the last 15 minutes go to getting ready for the next one. In the half hour that is left, you do not start debugging a payment flow. You read email.

In our work the gap is even bigger. Debugging a race condition in an order routing service means holding the state of three services in your head at the same time. Building that picture takes 30–40 minutes. One meeting resets it.

A half-hour gap is not free time. It is a waiting room for the next meeting.

From the field: I cut the hours, the blocks did not come

That Tuesday evening my first reaction was the classic one: fewer meetings. I sent the team a message and we questioned every recurring meeting one by one. Of 14 recurring meetings, we deleted 5 and merged 2. Two weeks later, meeting time per person had gone from 11 hours to 7.5 hours. I proudly brought the result to the retrospective.

Then someone on the team asked: “So how many two-hour blocks did we gain?” I had to say I had not counted. That evening I exported six calendars and counted. The weekly median per person had gone from 2 to 3. I had deleted a third of the meetings and barely touched focus time.

The reason was where the remaining meetings were. Grooming was on Tuesday at 10:00. The weekly sync with the operations team was on Wednesday at 11:30. The meetings we deleted were mostly in the afternoon, because those were the most boring ones. The mid-morning meetings stayed where they were. And the worst part: I had put four of the six one-on-ones at 10:00, each on a different day.

I had asked the wrong question. The question was not “how many hours of meetings are there?” It was “where are the meetings, and what is left between them?”

You do not measure the sum of the meetings. You measure the space between them.

Maker and manager schedules

This idea has been known since Paul Graham’s 2009 essay, but I did not really understand it until I saw it in my own calendar. There are two kinds of days:

Manager schedule
  • The day is made of 30-minute slots
  • Adding a meeting costs one slot
  • Switching between meetings is cheap
  • “I will find half an hour” is always true

My calendar. 26 meetings a week, and that is normal.

Maker schedule
  • The day works in half-day units
  • A meeting also eats the time before and after it
  • Switching costs 30–40 minutes
  • “Half an hour” is almost nothing

The team’s calendar. A few uninterrupted mornings change everything.

The problem is not that two schedules exist. The problem is when someone on a manager schedule puts meetings into a maker schedule using their own scale. I kept saying “it is only 30 minutes”. For the other person, those 30 minutes were the whole morning.

How we set it up

1. Mornings without meetings, afternoons grouped

From Monday to Thursday, 09:30–12:30, nobody puts a meeting on the team’s calendar. The daily is at 09:15 and ends before the core hours start. All recurring meetings were packed into 13:30–16:30. After 16:30 it is free again. Friday morning is for sprint events and grooming.

Team week (template)
          MON       TUE       WED       THU       FRI
09:15     daily     daily     daily     daily     daily
09:30  +---------+---------+---------+---------+ sprint events
       |  FOCUS  |  FOCUS  |  FOCUS  |  FOCUS  | / grooming
12:30  +---------+---------+---------+---------+
12:30     lunch
13:30     meeting window (all recurring meetings go here)
16:30     free: no meetings, no required channel

# FOCUS = no meetings, channel not read, only the shield can interrupt
# One exception: an incident in production. Nobody calls that a meeting.

The first objection came from operations: their sync had to be in the morning, because they discussed problems from the first hour after the market opened. The solution: nobody from the team goes to that meeting. I go, and I post what comes out of it in the channel at 12:30. The rule protects the team’s morning, not mine.

2. A meeting budget

Deleted meetings come back. Within three weeks, two new recurring meetings were in the calendar, both with good intentions. So we applied the idea of a no list to the calendar: a ceiling and a swap rule.

Meeting budget (per engineer, per week)
daily                  5 x 15 min      = 1 h 15 min
grooming               weekly          = 1 h
sprint events          3 h per 2 weeks = 1 h 30 min
one-on-one             weekly          = 30 min
-------------------------------------------------
total recurring                        = 4 h 15 min
ceiling                                = 6 h

RULE 1 : A new recurring meeting comes in only if one goes out.
RULE 2 : All recurring meetings sit in the 13:30-16:30 window.
RULE 3 : If the ceiling is passed, it is the first retro item.
RULE 4 : One-off meetings are outside the budget, but they
         cannot go into the morning.

There is nothing scientific about 6 hours. What matters is that a ceiling exists. When someone suggests a new meeting, the conversation moves from “is this useful?” to “which one do we delete instead?” Every meeting is useful. But every meeting takes the place of something else.

3. Collecting interruptions in one person

A morning without meetings does not help if channel messages keep coming. Operations and support sent dozens of questions a day: “Why was this order rejected?”, “Why is this customer’s statement missing a line?” Everyone asked everyone.

We set up a weekly shield rotation. For one week, one person takes all the questions in the channel. Everyone else reads the channel only at 12:30 and 16:30. About 35 questions come in a week, and the shield closes 28 of them alone. The rest wait in a queue for the afternoon.

This has a cost and we do not hide it: in their shield week, that person’s block count drops to 2. In sprint planning we count them as half capacity. Five people’s mornings are worth one person’s week.

4. The manager’s own calendar

I put this last, but it is where I changed the most. When I looked at my own calendar, 9 of my 26 weekly meetings were in the team’s mornings: one-on-ones, “let us talk for two minutes” calls I started, short meetings I set up to ask an architecture question in the morning.

I moved all one-on-ones to the afternoon. I turned the “two minutes” calls into written questions: an answer in the afternoon is enough. The only urgent thing is an incident in production. Apart from that, I had no question that needed an answer at 10:00 in the morning.

There was a side effect: a block opened in my own calendar too. When I stopped putting meetings into the team’s mornings, my mornings got emptier as well. I kept Thursday morning for myself: written decisions, the roadmap, messages that need a long answer. A manager sometimes needs a maker schedule too. They just do not notice it, because a full calendar makes them feel productive.

A manager with a full calendar fills the team’s calendar on the same scale.

Counting the blocks

If you do not measure blocks, things go back to the old state within two months. We wrote a small script that counts daily blocks for each person from the calendar export. The definition is simple on purpose:

Block counter (Python)
from datetime import time, timedelta, datetime, date

CORE = (time(9, 30), time(17, 30))
LUNCH = (time(12, 30), time(13, 30))
THRESHOLD = timedelta(hours=2)   # a gap under 2 hours is not a block

def gap(a, b):
    # time between two clock times
    return datetime.combine(date.min, b) - datetime.combine(date.min, a)

def daily_blocks(meetings):
    # lunch breaks a block just like a meeting does
    busy = sorted(meetings + [LUNCH])
    start, count = CORE[0], 0
    for m_start, m_end in busy:
        if gap(start, m_start) >= THRESHOLD:
            count += 1
        start = max(start, m_end)
    if gap(start, CORE[1]) >= THRESHOLD:
        count += 1
    return count   # at most 2 a day, at most 10 a week

The script is not perfect. It does not see interruptions that are not in the calendar, such as channel messages. But it sees the interruptions that are in the calendar, and that is most of the part we can fix.

After six weeks, the table looked like this:

StartTry 1: cancelTry 2: move
Meeting hours / person / week117.58
2+ hour blocks / person / week (median)237
Meeting-free mornings / week014
Stories unfinished at sprint end (avg. of 3 sprints)43.51.5

Two things to notice. First, in the second try meeting hours went up, from 7.5 to 8. Some conversations turned into separate meetings once they were squeezed into the afternoon. Blocks still more than doubled. Second, I do not credit the calendar with the whole drop in unfinished stories; in the same period we also made sprint scope smaller. The only row I am sure about is the blocks row.

How it breaks

Setting a rule is easy. Keeping it for two months is hard. In week seven, the median fell from 7 to 5. When I looked at the reasons, three stood out:

  • Copies of one-off meetings. Someone set up a “one-time” meeting on Thursday morning, then copied the invite the next week. Three weeks later it was a recurring meeting in practice, and it did not show up in the budget.
  • Invites from other teams. The rule lived inside our team. The risk and operations teams did not know about it, and 10:00 invites kept coming. We made the “morning window” note in the calendar visible to everyone, and I took on the job of declining.
  • A busy week. In the end-of-quarter reporting week, everyone said “this week is an exception”. The exception lasted two weeks. A rule is only a rule if it holds in a busy week too.

What the three have in common: none of them is bad intent. A calendar fills up by itself if nobody pushes back. That is why we show the block count in every retrospective; if it drops, it becomes the first item.

What to track

WhatWhy
2+ hour blocks per person per week (median)The real measure; for us, below 5 is an alarm
The person with the fewest blocksThe median can look good while one person is stuck at 1; usually the most senior one
Recurring meeting hours vs. budgetIf it is close to the ceiling, the “what do we delete” talk starts early
Meetings placed in the morning (and by whom)Often the answer is “me”
Questions coming to the shieldIf it grows, the problem is in the documentation, not the calendar

What did not work for me

  • Meeting-free Wednesday. My first try was one full day. Meetings piled up on Tuesday and Thursday, and Wednesday went to reading two days of messages. Blocks went from 2 to 3, and that was all. Four short mornings worked better than one long day.
  • Fake “Focus” meetings in the calendar. Everyone put them in their own calendar, and nobody respected them. A fake meeting looks movable; people booked over it, and the owner accepted. It worked only when it became a team rule, not a personal choice.
  • Setting the Slack status to “focusing”. The status was visible, and the questions still came. If the person asking has nowhere else to go, a status message changes nothing. The shield rotation gave them that place.

Checklist

Does the calendar leave room to focus?
  • Do I know how many two-hour blocks each person on the team has per week?
  • How many meetings went into the morning window this week, and how many did I put there?
  • Are recurring meetings in one window, or spread across the day?
  • Is the meeting budget ceiling written down, and when was it last passed?
  • Which meeting did the last new recurring meeting replace?
  • Who is the shield this week, and are they counted as half capacity in the sprint?
  • Who has the fewest blocks, and why?
  • Do my one-on-ones fall into the team’s mornings?

Conclusion

What the senior engineer said that Tuesday evening was not a complaint about meetings. It was a measurement: “the only place I have two free hours in a row.” I heard it as meeting hours and spent two weeks fixing the wrong thing.

Today our meeting time is down from 11 hours to 8, but that is not the real change. Everyone now has four uninterrupted mornings in the same week, and we count them every week. Fewer meetings was never the goal; it was a side effect.

The test: can the most senior person on your team say where they have two free hours in a row this week without opening their calendar? If not, the calendar is not full. It is broken into pieces.