Author Archives: James Bradbury

Sleep: What am I trying to measure?

My last post about analysing my sleep data had plenty of caveats, but despite my caution I started to wonder whether I was taking an interest in the right variables.

I’m aiming to sleep better for health and to feel more alert during the day. My first thought was to find out what influences how many hours I sleep each night. This was a guesstimate of my hours of sleep based on roughly when I fell asleep and woke up, minus any trips to the bathroom or time spent starting at the ceiling in frustration. Then I’d compare this to various lifestyle measures like how much I’d eaten, exercise, screen time, etc to see what, if anything correlated with a long sleep. Despite buying a gadget to help measure it, I’m not sure I have a more accurate measure of sleep quality, so approximate time asleep is what I tried.

However, I’ve realised that there are several ways in which “Hours that night” as I call it might not be the most useful measure. For example, there are times when I can’t get a full night’s sleep no matter how well prepared my body is for it. Sometimes I have to get up early for work, to go on holiday or because I have an audax that starts at 6am. Occasionally my daughter is ill and will wake me up several times. These things are thankfully rare, but could skew the results. I could simply delete any results where my maximum possible sleep was less than six hours, but this leaves less extreme cases.

I also recorded the maximum possible hours I could get each night. In my spreadsheet I subtracted the “Hours that night” from this to get “Missed sleep”, thinking that would be a better measure. On the other hand, if I can only get three hours maximum and I miss none, is that really better than having a Saturday lie-in for up to nine hours, but only sleeping for eight, meaning missed sleep is one hour? Who knows how many hours I might have got if I’d tried to sleep for more than three hours?

So I tried working out some kind of scaling adjustment, so that “missing” one hour out of a possible nine gives a better score than missing one hour out of a possible seven. I could ignore anything over eight hours as most people are unlikely to sleep that long unless they’ve missed out on sleep the night before. But that makes a hard cut-off, which feels wrong.

So I’ve come up with a simple scaling algorithm which looks like this:-

def missed_sleep_scaled(row):
    useful_max = min(target_sleep, row['Max possible (hrs)'])
    if useful_max == float(0):
        # result is invalid.
        return -1
    max_expected_hours = min(target_sleep, row['Max possible (hrs)'])
    useful_missed_sleep = max_expected_hours - min(row['Hours that night'], target_sleep)
    if useful_missed_sleep <= hours_noise_threshold:
        useful_missed_reduced_noise = float(0)
    else:
        useful_missed_reduced_noise = useful_missed_sleep
    return float(10) * useful_missed_reduced_noise / useful_max

This “sleep score” correlates less strongly with “Max possible (hrs)” than “missed sleep” did (0.104 vs 0.198). That seems like a step in the right direction. I’m uncertain about whether I should tweak it until it doesn’t correlate with “Max possible (hrs)” at all.

Some sleep correlation data

You may have read my previous post that I’m trying to use data to work out why I’m sometimes not sleeping well and how I might sleep better. I’ve been doing that now for some 86 days and I’m excited enough to look at the data and see if anything interesting has shown up. Ideally I’d like a year’s worth of data to get reliable results, but I’m impatient.

You may be wondering why the title of today’s post is so undramatic, prosaic even. Well, I’m rather a newbie when it comes to data science and I don’t want to leap to conclusions from the first thing I try. As you’ll see from my GitHub project, all I’ve done so far is to read in the data and use Python Pandas to produce the correlation results. I then pasted this into a spreadsheet, sorted and highlighted some rows.

I used to think that correlation implied causation. Then I took a stats class. Now I don't. Sounds like the class helped. Well, maybe.

I’m also wary that correlation does not imply causation. But it does make for an interesting start.

With those caveats out of the way, this is what I’ve got so far.

Screenshot of spreadsheet showing potential influences on the "hours that night" variable.

Plain correlation from the first 86 days of data

The factor I’m hoping to maximise is “Hours that night” – how many hours I sleep on a night after all those potential influences have been measured. So I’m interested in things which might be positive or negative influences on that.

The top two I’ve put in grey, as I think they’re not very interesting, except to show that the correlation function seems to be working as expected.

  • “Max possible” is low when I have to get up very early, say to travel somewhere, so it’s always going to limit my sleep.
  • “Av hrs past 5 days” is a rolling average of “Hours that night” over the last 5 days. That I’m more likely to sleep if I’ve built up a huge sleep debt recently is unsurprising, but also confirms that the model seems reliable.
  • ZMA and FOS are two supplements I’ve been taking recently which are said to help with sleep, the ZMA particularly for those doing a lot of exercise. Evidence is limited and I’m not keen on trying every eccentric treatment “because you never know”, but they’re cheap and the side-effects are trivial. However, I’ve only been taking these for a couple of weeks, so I don’t think there’s enough data to say if they have helped me.

Eating

If I had guessed I would’ve expected “Evening meal finish” – the time at which I finish dinner to have had the greatest negative effect on my sleep as I often wake early feeling boated if I’ve eaten late. It does seem to be a negative factor, along with “Evening meal size (0-5)”. I’ll aim to eat earlier and keep recording results.

Alcohol

This wasn’t a significant factor for me. This is supposed to make you fall asleep later but wake up too early, losing sleep overall. Anecdotally, I have found to be true for me. However, I drink quite rarely and haven’t had more than four units a day in any of the last 86 days, so my stats so far may not say much about that.

Daylight, Sugar, Screen time, Fasting

I’m recording these as they’ve either been blamed for bad sleep or hailed as a helpful thing. They don’t seem to be a big deal for me. I may consider stopping recording them so I have more time/space for other data.

Worry, Excitement

It interesting that these have some negative effect on my sleep, but as they’re all day values, there’s probably not a huge amount I can do to control them.

Exercise

I am surprised and, if I’m honest, disappointed to see “Exercise (1-5)” as such an apparently bad influence on my sleep. Studies have suggested that exercise should have a positive effect on sleep, but that may depend on intensity.

For me, and exercise score of 1 indicates a day where I didn’t walk for more than 15 mins and did no other exercise, 2 a normal day where I cycle to/from the station, about ten minutes each way, 3 is a bike ride of up to 3 hours or a 20-min weights/callisthenics session, 4 is a 3-6 hour bike ride, 5 is reserved for the all-day and sometimes all-night rides I occasionally do.

Perhaps this isn’t enough data on what, for me, may be an important question. Questions I’d like to answer might include.

  • Is morning exercise better or worse for sleep than evening exercise?
  • Is moderate exercise better for sleep than either extreme?
  • Does taking ZMA (or something else) mitigate the apparently negative effects of exercise on sleep?

Finally, instead of simply “Hours that night” should I be measuring the sleep I got as a fraction of the “Max possible” sleep? That might account for strange circumstances where I was still cycling at 1am and inevitably scored a 5 for “Exercise”.

Conclusions

I shouldn’t be drawing any firm conclusions yet, I think. 86 days is not that much data and there are many confounding factors that could be influencing things. I have a lot of thinking, learning and tweaking to do.

I plan to keep recording the data, expand my exercise data to include AM/PM and separate short intense efforts from longer endurance ones.

Volunteering at Thirsk for LEL

I recently volunteered for a few days at the Thirsk Control for London Edinburgh London. I put up banners, sorted out chargers for riders GPSs and phones, found beds for people, served food, fixed bikes and marshalled people into the control. It was tiring, but with a great bunch of people to work with it was also good fun.

Here are a few of my photos.

Lego ginger cat

Siobhan’s cat

Light green bags with LONDON EDINBURGH LONDON 2017 written on them

The bag drop has landed

Pens, space blankets, banners, signs, torches, etc laid out on a desk

A wide variety of kit is needed to run the control

LEL 2017 banner on school gate

Banners to guide the riders in

James standing in front of two LEL banners

Proud of my handiwork!

USB chargers on table.

Lots of charging for GPS and phones

Metal barriers in the car park

Parking for hundreds of bikes

School gym with mattresses laid out

A few beds in the overflow hall

Large school sports hall with many mattresses ready

160 more beds in the main hall

Three audax riders arriving at Thirsk school

An early group arrive before dark on Sunday

Boy on mountain bike

Not an audaxer

Woman on shopping bike with basket.

Also not an audaxer, but it’s hard to tell from a distance, OK?

Volunteers in school corridor

Edwin and Kate doing sleep running

Bikes parked at night

Plenty of bikes making use of the parking facilities

Volunteers in canteen

James and James learning how to serve food – it’s harder than it looks.

Pasta, Rice, Curry, Meatballs in canteen

Ja, I vill have ze pasta wiz ze curry. OK…

Bikes parked in daylight

A fairly busy time.

Red velomobile

Wow

Bike on stand being serviced

James looks into another gearing problem.

Light blue frame and front derailleur

Stiff shifting to the big ring, gunk in the cable duct. Lubed up and it was good enough.

Trouble sleeping

For a couple of years I’ve had some trouble sleeping. I’m not sure how much of this is due simply to age or the disruption of having a small child. However, lately I find that even when my daughter sleeps soundly, I often find myself waking too early.

I’ve taken the usual medical advice and found little improvement. GPs seem unwilling to investigate after they’ve done the standard checks and decided there’s nothing seriously wrong with me. Frustrated, I decided to do some work on it myself. Part of my day job is data analysis and I figured that if I can record the right data I might be able to write some code to work out what is causing me to lose sleep. Or, as Mark Watney might say,

I’m gonna have to data science the shit outta this!

Thumbnail image of Google docs spreadsheet

Sleep data Google docs spreadsheet

I started a couple of months ago, simply with a spreadsheet recording rather subjectively, thirteen different aspects of my day which I thought might influence my sleep. Things I thought might make a difference to my sleep but are hard to pin down without recording data due to the many confounding factors. 

Things like exercise, evening meal size, evening screen time, daylight hours, worry etc. Where no simple measurement scale exists, I estimate a number from one to five. So my ten minute cycle to the station and back counts as 2/5 for exercise. Only a 100km+ ride gets a 5/5. As I said, it’s a bit subjective, but hopefully enough to be useful. There’s no way I’m going to carry a light meter round with me or start weighing my meals. As it is, recording the data takes barely two minutes a day. The following morning I record roughly how much sleep I think I got, in hours. I have set the spreadsheet to calculate the average over the last five days.

What might be a bit more accurate is a gadget I’ve acquired recently, an EMFit QS. This intends to measure both my sleep and heart rate throughout the night, producing all kinds of numbers describing how well I’ve slept and recovered from exercise. I’m not sure I’ve fully understood how to use it or whether I’ve got it set up right yet, but I’m adding some of the numbers to my spreadsheet in the hope it will give me some clues.

I haven’t yet decided on what techniques I’ll use to analyse this data and spot patterns, but I intend to start with a straightforward correlation matrix before moving on to something more sophisticated that can look at results from previous days in case for example, the exercise or food I ate two days ago could influence my sleep tonight.

I’ll share any code I write on my github account and explain what I’ve tried here.

Knock Ventoux 2017

Few bike routes truly deserved the overused term “epic”, but I think Andy Corless’s Knock Ventoux 300km audax is a contender.

I rode this in June 2017 and here are my photos.

 

Tweaking the bike for Everesting

I’m planning my second Everesting, so thought that as well as climbing lots of hills to prepare my legs, I should do something to prepare my bike. I have one proper road bike which I use for club runs and audaxing. Audax is bikes are partly about comfort as over that kind of distance discomfort eventually becomes pain, which slows you down a lot. Anyway, it is supposed to be enjoyable, mostly. Maybe some type-2 fun, but hopefully not type-3.

I’ve pretty much decided on The Burway for my next Everesting, even though I won’t be the first.

Mods for Everesting

I’m conscious that with Everesting there’s a lot more climbing than even the hilliest audax. The Cambrian 200 is one of the hilliest and even that has under 4000m of climbing. Everesting means 8848m in as little as 180km. When climbing, weight makes a huge difference, so some of my modifications are to reduce weight. I’ve removed the mudguards, the bell and the pedal reflectors and swapped my dynamo hub wheel for a standard one. The weather looks good and I hope not to be riding too much into the dark, so hopefully this will be OK. I’ve also swapped out my Brooks leather saddle for a simpler and lighter Charge Spoon. If this isn’t quite as comfortable I’m hoping it won’t matter as I tend to stand up for the descents and maybe parts of the climbs.

I’ve switched to some 25mm Continental GP4000 tires I have but rarely use. These are fractionally lighter and also roll a bit faster, which is a bigger proportion of energy usage uphill when aerodynamics are negligible.

Scale showing 8.61kgI haven’t spent a huge amount of money to do this, just bought a couple of cheaper bits. No doubt you could save a bit more weight by spending more. The titanium frame is light, but not as light as some carbon ones. Still, I’ve got the weight down to 8.6kg.

The other significant change I made was in gear ratios. The Burway has a 20-25% section which I can easily get up with 34×29 when I’m fresh. However recent training rides on a 18% climb make me think that will become very hard after a few repetitions. I’d like to have the option of standing or sitting to climb, even when my legs are tired. So I had a look at Spa Cycles and found a cheap triple chainring that would do the job. the smallest ring is 22 teeth, which gives a lowest gain ratio of 1.4 (or 18.1 inches), compared to the 2.1 (or 28 inches) I had previously. At 90 RPM that’s 7.8kph, probably a realistic speed for the steepest part of the climb, though I expect my cadence will drop further when tired.

Small 22-tooth chainring mounted on titanium frame, missing larger rings

Very low gears with a 22-tooth chainring

I only have a shifter for a double chainring and didn’t want the hassle/expense of buying and setting up a full triple at the moment. So I thought I might as well remove the two larger rings and for that matter the front dérailleur. A little extra weight saved.

I can still shift between 32 and 11 tooth cogs on the back, but this means I can’t pedal fast enough much beyond 25kph, so I may be a bit slower on the flatter bits of the descent. I’m not too worried about this as I think the climbs are more important to the overall time. Ideally my front ring would be about 28 teeth, but I don’t have one of those without spending more money or pulling apart my hybrid.

Maintenance

I’ve also replaced the chain as it was getting worn and set the length of the new one for the small chainring. I guess when I switch back to my double I’ll need a new, longer one.

Broken aluminium nipple

Broken aluminium nipple

Horrible aluminium nipple with damaged head.

Horrible aluminium nipple with damaged head.

 

 

 

 

 

 

 

 

I’ve also noticed recently that the fairly cheap wheels I bought about a year ago have had several nipple breakages, two when the wheel was just sitting in the garage. It looks like the nipples are made of aluminium rather than brass. Brass ones are a bit heavier (1g vs 0.4g by my measuring), but also more reliable. I don’t enjoy the prospect of nipples breaking while out on even a short ride, so I’ve laboriously replaced them all.

Hopefully all this will help me complete the Burway Everesting tomorrow!

 

 

Preparation for Everesting

A couple of years ago I everested Bowden hill in Wiltshire and found it a good challenge. I was the first person daft enough to do it. Since then I’ve been thinking about another hill to Everest.

For a long time I had my eye on Bwlch-y-groes aka Hellfire pass in North Wales, but last year Ian Barrington did it before me. More recently I’ve been thinking seriously about The Burway in Shropshire, but a couple of weeks ago Chris Winn did that one. Huge kudos to both these guys for amazing efforts on these famous climbs. However, I was a bit annoyed that I couldn’t be the first up either of these, which is what the Everesting.cc hall of fame focuses on.

Why?

I started wondering about whether I really needed to be the first to Everest a particular hill and for that matter why I do it at all – something which I feel I often have to explain to puzzled friends and family. Last time I was doing it for charity, but this time I’d rather do it for me. Partly because I don’t like asking people for money.

One reason I do these kind of challenging rides is that it adds a definite goal to aim for. Whether I’m training or modifying my bike or working out the route and logistics, it’s all more enjoyable with an aim in mind. If you don’t have a goal you can’t fail, but success is also rather meaningless. There’s no sense of anticipation or achievement. Some cyclists use racing or aiming for KOMs on Strava segments as goals, but I’ve never been much of a racer. I’ve assumed that, having only started cycling seriously in my thirties I was a bit old to be really fast over a short distance. But I feel I might be better suited to these longer and quite frankly, weirder challenges. If I really feel the need to get the “first ascent” on the hall of fame, am I doing it for bragging rights? A lot of people I know find my challenges more eccentric than impressive, so perhaps I am doing it for my own satisfaction. I’ve said before that everyone’s challenges are individual and in some ways hard to compare. I’ve judged that Everesting will be a challenge for me. Despite having done something similar before, I’m not sure I’ll be able to complete it with my current level of fitness, a different hill, different conditions, etc. That’s part of what makes it interesting.

So I’m still undecided about redoing a famous climb or trying to be first on a new one. Either way, I’ll need to prepare my bike.

Let me help you commute by bicycle

I regularly use my bike to get to work. Usually only for the short journey across town where I leave it at the station and take the train the rest of the way. Once every week or two I ride the full 25 miles to Bristol. It’s a nice way to start the day, saves the train fare and on at least one occasion has been quicker than waiting for severely delayed trains.

Hybrid bike with rack bag by canal

Hybrid bike set up for winter riding

However, I can remember a time when this kind of distance and the logistics of riding in to work seemed intimidating. How long would it take? Where could I secure my bike? Will I need lights? How do I carry my laptop and work clothes? Can I shower at work? What if I get a puncture?

I’ve now resolved these questions and my 18-year old hybrid is now my go-to form of transport for short journeys and sometimes longer ones.

Have you thought about making some or all of your journey to work by bike and never quite got around to it?

Cycling UK‘s Bike Week event is coming up (10th to 18th June) and in the spirit of encouraging more people to cycle, I’d like to offer to help those friends and colleagues who’ve never commuted by bike to give it a go.

I can give some advice on the practicalities, safety, route planning and, if you need a bit of extra motivation and you live or work nearby, I may even get up early to escort you to and from work the first time. Just ask and I’ll see if I can help. My guess is that when you give it a go, it won’t be as difficult as you think.

James in a white jersey with tandem in a country lane, rear seat is unoccupied.

Don’t have a suitable bike? How about joining me in the tandem sometime?

If you’re​ already comfortable commuting by bike, then have a think about how you could encourage others to do so.

Why you may not want to hire passionate people

In my industry, “Passionate” is one of the most overused words in job adverts. Recruitment blogs are overflowing with advice on how to find these precious employees. It seems every company wants to hire people who are not just enthusiastic, but passionate about their work. The assumption is that people who describe themselves this way will produce better quality work and go the extra mile to get things done. A person’s passion can often be infectious, boosting morale for the team. In my experience these differences in attitude are real and I can see why they’re attractive to an employer, but they’re not the whole story.

There’s already some debate about whether it’s reasonable or healthy to expect passion from employees or if it is simply a way to demand more work for less remuneration. Maybe “we’re looking for passionate people” is code for “unpaid overtime is expected”. Could the idea of passion for a job be counter to achieving a healthy work-life-balance? I’m sure most modern companies would say that people can and should be passionate about their work and have a fulfilling home life. Hence well worn phrases like “work hard, play hard”.

Let’s assume employees can be “harmoniously passionate“, have a healthy lifestyle and devote a good portion of their time to friends and family. Would you necessarily want to employ them?

Passionate employees care more about what they do. They care about how it’s done. They may even care about the overall mission of the company. Often companies encourage people to get involved and to care deeply about these things. Not everyone takes this to heart, of course. For some this kind of talk is like water off a duck’s back. They roll their eyes as the CEO stands in front of PowerPoint slides depicting the moon landing or how they’re going to use quantum computing to cure cancer.

But some people do feel passionate about their company’s mission or technical vision. They will understandably have stronger feelings about how things are done or whether they are done at all. It’s unlikely that they’ll always agree with leadership on the direction the company takes or decisions that are made in their behalf. Sometimes the inspiring promises that the company makes don’t pan out.

“Sorry, but the quantum computing solution turned out to be too expensive, so we’ll be using 1970s mainframes instead.”

Any​ employee who is professional and responsible would say, “we’re doing this wrong, this is what we should do instead”. If management decide to ignore their advice many would shrug their shoulders and get on with the next task. A truly passionate employee will campaign for change, research the best options in their own time and make the case for improvement as forcefully as they can.

“It looks like we won’t be directly curing cancer, but gathering statistics on the cancer drugs prescribed over the last ten years.”

Whether it is the leaders or the employee who has the better argument, the difference of opinion can become a serious impediment to progress and morale. The employee may become disgruntled and start looking for a new job or, if they’re making a lot of noise about it, be forced leave the company.

This is unlikely to happen with less passionate employees. Those who work to live rather than living to work. Plenty of my valued colleagues over the years are not at all passionate about their work and I don’t think they should feel guilty about that. I would say they are professional. They want to do a good job, because doing a good job is more satisfying than doing a shoddy one. Being liked by your colleagues means being helpful and responsible. However, they’re not so wedded to the company mission that they’ll feel any great loss if the decisions of senior management put the project or even the company at risk.

The professional rather than passionate person may move on, of course, but it will likely be for more practical reasons – salary, benefits, location or career development. Those things are probably easier to measure and manage than factors like how realistic the company mission is or how inspiring the technical challenges.

“I know you guys are master carpenters hired to carve unique furniture, but we urgently need you to assemble flat pack wardrobes.”

To be clear, I’m happy to work with anyone who is responsible and ethical at work, whether they’re passionate or not. I think it takes all sorts to make a good team. What I dislike is the obsession with passion at the expense of the merely professional.

Passion may be a great motivator, but it is hard to manage properly and can become a destructive force when it is not.

What is the point of code reviews?

In most of the jobs I’ve had peer code review was an essential and regular part of the software development process. My experience is that it improves code quality and is well worth the effort. I’d also say that at least half of what I learnt in that time was through code review. Either someone would suggest improvements to my code, or I’d discover new ways of doing things from reviewing other people’s work. It’s a great way to share knowledge. This is not only true in specialist domains where the answers are not always easily found by searching the web, but any time someone is not aware of a better way of doing things. You won’t search for something if you don’t know it exists.

That’s my opinion, but there is also plenty of evidence that code review improves code quality, helps find bugs early and ultimately saves money. The numbers vary between studies, but finding bugs early is not just cheaper, it’s significantly cheaper.

What about testing?

No doubt some people will say that the purpose of unit testing is to find bugs early or, in the case of TDD, prevent them ever being created. So why do we need code review as well?

I agree that unit testing is powerful, indeed I’ve used TDD thoroughly to tame some seemingly intractable problems, but I still highly value code review. I think testing and code review achieve different things. Both are important.

Unit tests are great for quickly checking that everything that worked previously still works after a recent change. They provide confidence to refactor or experiment with code in the knowledge that the essential functionality can be quickly checked and rechecked. Achieving this via a code review would be slow, boring and error-prone.

Code reviews on the other hand can ask bigger questions, like:-

  • Is the code understandable?
  • Are the unit tests testing the right requirements?
  • Is there a more efficient way to do this?
  • Does it increase unplanned technical debt?

In fact, any check that can’t be automated. Coding style, static analysis, spell checking etc can all be automatic and the most a human reviewer should do is check the results.

Code review suggestions

Others have already written good things about how to conduct code reviews without annoying people or what tools you should use, so I won’t repeat that. Here are my observations and suggestions about how to get the most out of code review:-

  • The most important thing for a code review to check is whether the code is functionally correct. Does it do exactly what it says on the tin? Are the code and tests fully implementing the requirements of the story/ticket? Or has the developer misunderstood what’s needed in some way? If so then they’ve probably written the unit tests with the same misunderstanding, so they all pass fine. Yes, this is a hard thing to check – it takes some time to fully understand, but it is important. Get this wrong and nothing else matters.
  • Code review is a great way to share knowledge. Again, this does mean you have to take the time to properly understand the change, but it develops the team and mitigates risk.
  • There should be no reviewer hierarchy. Different perspectives are useful. More than once a more “junior” developer has reviewed my code and asked a “naïve” question only for me to scratch my head and say, “You’re right, I’ve done that totally wrong”. Even when it doesn’t happen quite like that, reviews tend to stimulate questions and the transfer of ideas.
  • That said, it can be worth making sure the local domain expert is one of the reviewers of any important change, but they don’t have to be the only reviewer.
  • Applying more engineer hours to the review does find more bugs, but each additional hour will be slightly less valuable on average than the last, so there’s a balance to be struck.
  • Don’t get bogged down in matters of opinion. When it comes to how to make code understandable and maintainable, there’s a big slice of judgement involved. “I wouldn’t do it that way” is not sufficient justification for raising a comment. There’s a danger of getting into “tomayto/tomahto” arguments. Be open-minded, take a step back and think about how important your point is.
  • Following on from the last point, it’s OK to have no comments. It might seem like you haven’t done your job as a reviewer, but it’s better than nitpicking for the sake of feeling productive.
  • If possible, do not manually check anything that can be automated. Style guidelines should be agreed across the project and checked quickly and automatically. Reviewers are human beings; they’re above that stuff and anyway they’re not very good at it.
  • Pair programming can function as a kind of instant review, but there are also risks. The reviewer can be too “close” to the code to be impartial or may make the same false assumptions about the requirements. A slower or more timid engineer might not want to question the other’s work without the time to think it through properly. So, while pairing can find bugs very early, I don’t think it should be the only kind of review a change receives.