Kyle Bennison

  • Mahomes Isn’t The Only One Flag-Baiting

    Mahomes Isn’t The Only One Flag-Baiting

    There was a lot of noise this weekend—and rightly so—about Patrick Mahomes baiting defenders into late hits in hopes of drawing flags. He was able to get one early on in the game, but didn’t fool the refs later on when he loitered on the edge of the boundary and then flopped out of bounds once defenders arrived.

    For a lot of fans, I think the frustration came fast because it was reminiscent of another moment earlier in the season when Mahomes drew a foul on another (questionably) late hit.

    This was in the 3rd quarter:

    And then the no-call in the 4th quarter:

    This was a similar play that went viral earlier in the season where Mahomes danced near the sidelines and turned it into a big gain:

    To be fair to Mahomes, there were many more examples (just search “Patrick Mahomes late hit” on your favorite social media platform) throughout the season where flags were not thrown for hits near the sideline.

    Interestingly, if you search the same terms with “Josh Allen”—probably the second most popular quarterback in the NFL—it returns a lot less results. So it does seem like Mahomes is a bit of an anomaly due to his outsized celebrity (maybe from all the State Farm commercials).

    But I did want to try to find out if there was truly some bias towards Mahomes and the Kansas City Chiefs in general when it comes to these late hit fouls. So I took a look at the play-by-play data from nflfastR and FTN Data via nflverse, which charts certain movement data like whether a QB went outside the pocket.

    Before we begin, there are two terms to define here. A QB scramble is defined by nflverse and is always a run play. It’s basically anytime a pass turns into a QB run. The QB being out of the pocket is anytime the QB exits the pocket.

    A QB scramble almost always means the QB is out of the pocket, but a QB being out of the pocket does not imply a QB scramble. In fact, a QB being out-of-the-pocket is a pass 68% of the time to a run 24% of the time, and is a QB scramble 25% of the time.

    The base dataset is all plays where a penalty was called on the defense that were not interceptions or fumbles lost.

    First off, I looked at unnecessary roughness and roughing the passer penalties specifically since these are the two penalties commonly called for late or illegal hits. According to the NFL rulebook, roughing the passer can be called inside or outside the pocket. If a QB is outside the pocket and on the move, they are allowed to be hit low or high (unlike when they are in the pocket), however if they stop moving and return to a “passing posture”, they can no longer be hit low or high again.

    The findings were interesting. Looking at plays where the QB was out of the pocket, Buffalo actually led the way with five unnecessary roughness or roughing the passer calls on the defense. KC only had one recorded.

    Unsurprisingly, some of the teams leading the way in this area have very dynamic, mobile quarterbacks: Josh Allen, Kyler Murray, Jayden Daniels, Justin Fields/Russell Wilson. However, the numbers are pretty low overall so far.

    Of course, the data is not perfect. There may be calls missed and charting data on in vs. out of the pocket is not always reliable either, plus it’s not guaranteed that the unnecessary roughness calls were called for hits on the quarterback. But we can still learn a lot from the general trends.

    Let’s cut the data a few more ways. First, let’s normalize for how many out-of-pocket plays a team has to see who’s getting the most calls proportional to the number of rollouts they do.

    All the below plots will be looking at the roughing the passer and unnecessary roughness calls only.

    Buffalo still leads the way on penalty calls when the QB is out of the pocket on a per-play basis, averaging about .3 penalty yards per out-of-pocket play, or about a call every 50 rollouts. As you can see, KC is near the bottom in this category.

    When we look at totals, the result is mostly the same. However, we’re only looking at one or two calls per team. Note that it is possible for the penalty to be less than 15 yards in both cases because they can be called within 15 yards of the goal line.

    Next, let’s look at QB scrambles where the QB becomes a runner. At this point, we shouldn’t see any roughing the passer calls but will still see the unnecessary roughness calls for late hits. There’s a lot less data here; there were only 10 unnecessary roughness calls out of 1181 QB scramble plays.

    Minnesota and Arizona both drew two of these penalties while the other teams had one. KC is notably not on this list (although please fact check me here because, as I said, the data may not be perfect. I was able to find two instances but they occurred on turnovers.)

    Last, let’s take off all the reigns and look at these two penalties across all plays, including those where the QB stays in the pocket.

    Here, Miami creep up as a big beneficiary of these calls (is Tua Tagovailoa’s injury history playing a factor here, perhaps?). Again, the Chiefs are very middle of the road here, showing no evidence of favoring Mahomes.

    On a total yardage view, there isn’t much change.

    Just for fun, let’s see who’s getting the most flags called against their opposing defense overall, without any filters on turnovers or penalty types.

    Here, we see that Minnesota, Washington, Dallas, and Buffalo drew the most penalties while Jacksonville, Indianapolis, and Detroit drew the least.

    While this is interesting, nothing really stands out and the distribution of penalties across the teams is fairly normal.

    So, to summarize, I think that fans have a short memory and also a memory that highlights the moments and players that are most infuriating and impactful to the result of the game. Patrick Mahomes is a world-class player and he’s on TV all the time. He’s also had some moments that have been A) on national television or B) gone viral where he has seemingly flopped or earned a call from the refs that was undeserved.

    That being said, I found no evidence in any of the data that the Chiefs get any more calls than other teams. In fact, they rank near the middle or bottom of most of the charts above.

    I agree that the NFL does need to figure out how to regulate the “QB as a runner” situation a bit better, because it is hugely disadvantageous to the defense when quarterbacks get these special protections near the boundaries that other players seem not to get. Whether it’s actually the case that these calls are made more often on quarterback runners than other runners is a whole other investigation (a quick glance gives me the impression that this is not actually the case).

  • Never Write “dev” Anywhere, Ever

    Never Write “dev” Anywhere, Ever

    I was going through our deployment process this week and hit a snag: I was using the dev host in our production environment. And then another one, and another, and another… It turned out that we’d been breaking our own rules, not all at once, but slowly and surely. Sometimes it was a matter of convenience. Other times a matter of bad assumptions. Each time, it was innocent enough, but compiled it created a nightmare when it came time to deploy. We’d been hardcoding dev values.

    dev crossed-out and replaced with the function get_env().

    While sometimes it can feel innocent enough to hardcode “dev” here and there to speed things up, I’d argue that it’s almost always a bad idea if you have any hopes of using any of the code in prod someday. So while it may take a little more upfront thought to get started, it will save you a lot of tricky debugging in the long run if you have a plan for switching environments early on.

    How to Handle Environments

    There are three keystone decisions you need to make in order to properly handle different environments. They are:

    1. Separate environments completely
    2. Decide the source of truth for the environment
    3. Use switching logic and a secret store to manage values

    Separate Environments Completely

    dev, qa, and prod should not just be folders. They are entirely separate environments. In GitHub, only your main branch should deploy anything to prod, and it should be done via CI/CD (i.e. GitHub Actions).

    If you are using Databricks, this would mean having a dev workspace, a qa workspace, and a prod workspace. In GCP, this would be different projects.

    In addition, each environment should have its own service principal that is allowed to run your code, and whose permissions are used when running said code.

    Decide the source of truth for the environment

    You need a way for your code to programmatically know which environment it is in. You can then use this info to handle your switching logic and grab the right information that you need, such as service principals, passwords, hosts, etc.

    How do you know you are in dev? And similarly how do you know you are in qa or prod? It may be a host url, or some environment variables that are only set in one or the other, or have one value in dev and another value in prod.

    We do this with a combination of compute policies and environment variables. The policy is set at the workspace (environment) level and automatically added to any compute in that environment. The policy sets environment variables, namely one we call ENV_CODE which takes a value of dev, qa, or prod based on the policy and environment.

    Use switching logic and a secret store to manage values

    Now that you know definitively where you are, you can very simply determine where to deploy code to, who should deploy it, and who should run it. The easiest way to manage this is the have simple switches based on the environment, and then corresponding folders in a secret store (e.g. Azure KeyVault, Vault, etc.) that contain all of the relevant info for each environment (host, SP name and password, etc.).

    If you are deploying from GitHub, you can use your branch names as inputs to your GitHub workflows if using GitHub Actions (e.g. if the workflow is kicked off from main, deploy to prod). If you use trunk-based development, you can use event triggers to determine where to deploy to; a pull request merge can deploy to dev, a workflow dispatch can deploy to qa, and a release being published can deploy to prod.

    Why Environments are Important

    The main purpose of environments in my opinion is to prevent humans from touching and accidentally breaking important things.

    dev is a sandbox. A bit of the wild west. It’s okay to break things here, have duplicates, be a bit messy. And importantly, it’s okay for humans to be in here running things manually.

    qa is the tidied up version of dev, and is a barebones replica of prod in some ways. Maybe not everything is running all the time, but most things that you expect to find in the prod environment should also be present in the qa environment. This is a clean environment where your deployment and run processes are as close to prod as possible so you can get a true sense of if your end-to-end application will work (or still works). Humans should not be deploying to or running the code in qa. Deployments should be happening automatically via CI/CD (triggered by a release PR or a workflow dispatch or some other method), and service principals should be running the code.

    prod is the most important: the big leagues. Everything is live and real. Everything in qa applies to prod as well. The only difference is that what happens in prod matters and is permanent in some way most of the time. You have upstream dependencies and someday will have downstream dependencies.

    If you follow these steps and build them into your process early on, you’ll have far fewer headaches come deployment time, and less risk of something breaking once it makes it to production.

  • Reviewing My 2024 Goals, Plans for 2025 and This Site

    Reviewing My 2024 Goals, Plans for 2025 and This Site

    In This Post

    2024 Goals

    2025 Goals

    Plans for Staturdays

    I’ve been reading The Power of Habit, by Charles Duhigg, recently. You might know it by its bright yellow cover. I’m about halfway through, but as usual when I get into one of these books (Atomic Habits by James Clear being the other one), it makes me start to think about my own habits and goals for the future.

    For the last few years, I’ve been writing New Year’s resolutions. Most times, I don’t ever revisit them after I write them. They’re usually not too thought out to begin with and are usually generic (such as “exercise more”: a regular on the resolution list).

    However, this year, I decided to actually re-read my 2024 goals first and think about my progress towards them before writing new ones for next year.

    I’ll go through my 2024 goals and my 2025 goals, and wrap it up with my thoughts on how this relates to this website and my goals for this place and its content going forward.

    So here are my 2024 goals and how I rated myself.

    2024 Goals

    Get in shape

    Rating: 3/5 – Room for improvement and measurement.

    Positives

    • I signed up for a gym membership on December 1st, and was consistent in going for the first two weeks while I was in town.
    • I made specific workout routines that I can repeat every time so I don’t have to make it up on the fly – this had been a big challenge and mental block in the past, and made it hard to measure my progress because I was doing something slightly different every time.
    • I run ~ 2 times per week.
    • I play soccer every Wednesday night.

    Areas of improvement

    • I’m inconsistent with my running schedule.
    • I don’t have the diet to go with it. Namely I:
      • Don’t choose enough healthy options
      • Don’t consume enough calories and protein
      • Have reduced my alcohol, but still make many exceptions and probably average out to a drink or two per week

    Be present

    Rating: 1/5

    Positives

    • I am occasionally intentional about putting my phone down when someone is talking to me.

    Areas of Improvement

    • Still fairly glued to my phone
    • Sometimes my head is somewhere else when someone is talking to me, especially while working or driving.
    • Can struggle to destress in a busy/crowded environment (e.g. cooking for others, or hosting… focusing so much on the task or on keeping an eye on the dog that I forget to enjoy myself and listen to others.)

    Foster relationships

    Rating – 2/5

    Positives

    • Deepening new friendships in Baltimore
    • Inviting people to things, accepting invites of others
    • Texting closest long-distance friends monthly/bimonthly

    Areas of Improvement

    • Meaningful check-ins with friends in person
    • Deliberate scheduling of visits or planning for people to come to visit me
    • When something makes me think of someone, I should text them about it. The key is to act on it immediately before it slips my mind. I regularly say “oh, I should do that later” then hours or days go by before I remind myself of it again.

    Be a good listener

    Rating – 1/5 – Similar to Be Present

    Positives

    • Clearly communicating when I’m not listening or need to finish something to be able to listen properly
    • Putting my phone down or turning away from my computer

    Areas of Improvement

    • Still get distracted by my phone, put more importance on some article I’m reading or other nonsense than the people in front of me
    • Still forget little details or things that have been said many times (likely because I’m on my phone/not present)
    • Still think about work in my head while listening/thinking about something else at the same time
    • Ask people more questions about themselves and listen to the answer fully

    Others

    These were also on my 2024 goals list, though I feel I made much less progress or conscious effort towards them than the above categories.

    • mental health
    • reduce screen time
    • get outdoors
    • meditation/mindfulness
    • hobbies
    • community engagement/volunteering
    • de-stressing

    2025 Goals

    In 2025, I’m trying to organize my goals around themes and tangible start and end points (this is easier said than done and very much still a work in progress). Each theme can have one ore more goals attached to it, and each goal can also cover one or more themes, but usually there is a primary theme and secondary theme. The benefit of this is that my goals can help each other and work together, as you’ll see below.

    My themes are:

    • Healthy eating
    • Wise usage of free time
    • Thriftiness
    • Exercise
    • Mental focus and clarity
    • Fulfilling relationships with friends and family
    • Giving more than I get in life, relationships, friendships, and community

    Some of these are lofty, which is why they have more approachable goals underneath them.

    Here are a few of my goals.

    Exercise

    Gain 10 lbs. of muscle

    This one is pretty straightforward and measurable. I’m starting at 145 pounds and hoping to get to 155 pounds by following a consistent and deliberate routine. I’m also hoping that this will be a “keystone habit” for me, as its referred to in The Power of Habit, and spillover into other goals and aspects of my life (mainly Healthy Eating and Mental Focus and Clarity themes).

    Wise usage of free time

    Cut out passive screen time

    I have a lot of screen time. I have 8 hours of work screen time, 3-4 hours of phone screen time (according to Apple), and probably another 1 to 2 or upwards of 3 to 4 hours of TV screen time, depending on the night (some of these hours do overlap, mainly phone + TV time). This is basically every waking hour of my day, unfortunately.

    Aside from the strain on my eyes, my chief concern with this trend is what comes with my screen time: sitting and usually accomplishing nothing. Sitting being terrible for my health, and accomplishing nothing being a poor use of my time.

    Work screen time is mostly inevitable (I can probably take some more calls on my phone on a walk, but not many), so I will focus on cutting down what I call passive screen time: scrolling aimlessly or consuming mindlessly. I already have a few ideas.

    Another of my goals is to host friends more often. To host friends more often, I need to cook, which means I need to plan and try recipes ahead of time. Sunday night seems like a great time to do this. I usually sit on the couch and watch Sunday Night Football, which is great fun but a complete waste of time unless the Eagles are playing, as much as I enjoy Tirico and Collinsworth. So instead, I’ve decided that I can throw the game on in the background but will use that time in the kitchen to plan and try a recipe for the week. So now I’m making progress towards two goals at once.

    Here are my other goals:

    • Be 100% sober
    • Donate unused items to shelters and goodwill
    • Eat enough protein to build muscle
    • Get 8+ hours of sleep per night
    • Improve memory of conversations, plans, and events
    • Read every week
    • Spend less time sitting

    I’m still working on goals for my Give more than I get… theme. If you have any suggestions, I’d love to hear them.

    You’ll also notice I don’t have a writing goal or career goals here yet. Those are also things I’m still thinking about. All I know with my writing is that when I do it, I really enjoy it, and I really like the idea of doing it much more regularly. However, finding the time and the willpower, as well as the content to write about, has been the stumbling block for me.

    Another thing that Duhigg mentions about habit research is the importance of two things: cues and preparing for adversity.

    Cues

    Cues are things that trigger a habit. It’s essential to have these to help kick off an action. If you have a bad habit, you might keep the same cue and replace the bad habit with the new habit. For a net-new habit, you might need a net-new cue too.

    I already mentioned my Sunday Night Football cue. Some others I’m considering are:

    CueAction
    when the Eagles game is about to startgo on a run and listen to the first quarter on the Merrill Reese and Mike Quick radio broadcast (this is a win-win since I love listening to the radio broadcast sometimes).
    7:00 AM on Mondays, Wednesdays, and SaturdaysGo to the gym
    Getting home from the gymMake a protein shake
    Fiancé walks into my officePut my phone down and turn away from my laptop

    Adversity

    Many things will get in the way of my goals throughout the year. These should mostly be predictable, so by making a plan now for what I should do when I face those issues, I will be prepared and the action I take will become as much of a habit as my regular routine would be. Here are a few:

    GoalAdversityPlan
    Be 100% soberAt a bar with no NA optionsOrder a seltzer with lime
    Gain 10 lbs. of muscleTraveling and no weights availableHave an intense bodyweight routine planned and do that instead
    Read every weekBook I want is not available to check outMake a list of many books I want to read ahead of time, and schedule holds now so I can have options.

    Plans for Staturdays

    Now to the specifics for this site. As you probably know, Staturdays started as a college football stats and analytics blog by my brother Drew and I. He was a student studying Data Science and I was an aspiring Data Scientist doing marketing. We did a weekly podcast, I wrote a weekly newsletter, we did bets and Elo ratings and rankings and more. At our peak, we had thousands of visits per month (albeit mostly on the homepage and stats glossary), and a handful of listeners to the podcast. But we were having fun.

    I’m a bit sad that those times are long-gone, but so much has changed.

    Our lives have changed: I’m a full-time data scientist now, and doing stats as both my day job and as a hobby just doesn’t hit like it used to. Drew is a full-time analyst doing data science as well. We both have long-term partners and dogs.

    College football has changed. The portal changed everything with college football. A team can get really good or really bad overnight because roster turnover is so high. An entire squad of players can follow a coach somewhere else and turn a bad program into a great one. A few guys can leave and cripple a great program quickly. I’m not saying we can’t keep up if we tried, but I don’t know if I want to. I’ve lost a lot of love for the sport as a whole. I still love my team and love watching, but it’s so different, and I’m curious to hear if others feel that way too.

    Sports betting has changed. When we started, sports betting was just becoming legal in some states and was still getting off the ground. It was just something kind of fun to do. However, the incessant advertising for sports betting has gotten out of hand, as have the tie-ins with leagues and teams. The risk of match-fixing is real and we’ve already started to see some of it pop up in the US. But most of all, I’m just very concerned with the amount of money regular people are wagering and losing on sports. Regular people that were previously not losing $3,000 a year on sports betting are now doing that… people that I know. I have the self-control and financial discipline to make small bets for fun, but many people do not, and I don’t know if I want to contribute to that by posting my bets and having some readers take them as if they’re sure investments.

    The internet has changed. We used to share our stuff on Twitter.com. There was a big community of CFB stats nerds there, and a lot of casual fans and betting enthusiasts as well who were interested in our work. That has fizzled out, and I’ve stepped back from Twitter since it fundamentally changed as well. The algorithm is different. Bots and paid accounts win out over authentic people and conversations. A lot of people have left. We tried Substack as well, but we don’t own our page and it’s geared towards recurring newsletters which is not exactly what we’re going for. Reddit mods don’t like links to third-party content. To summarize: everything is very scattered and fractured.

    Our interests have changed. As I said, I’ve fallen out of love with college football a bit, and shifted more towards some less popular sports like Formula 1, Indycar, Golf, Tennis, and Soccer. I’m aware that the followers of Staturdays did not sign up to hear about these things, but I may want to write about them in the future. Additionally, I’m not an expert on any of these sports, so starting to write about them has large upfront costs of acquiring knowledge, doing research, and finding and analyzing data if it’s available. I also want to write about things that are not sports-related at all sometimes.

    People have changed. I know my attention span is getting shorter and shorter. The world as we know it is geared toward quick-hit video consumption. Do people still want to sit down and read long-form analysis like this? I don’t know.

    Weighing all this, I’ve decided to carry on with writing when inspiration strikes, and hopefully more regularly if I get into a routine. I’m going to do all of my writing here at staturdays.com, because it’s my site and I own it and its content. I’m not going to split off and maintain multiple places for different subjects or sports. Rather, I’m redesigning the page tree so you can find exactly what you’re interested in, and I can write about exactly what I want at the time without one affecting the other. If you’re just in it for college football, then that category of posts will still be available to you. Whether I add to it or not is yet to be determined.

    I think this is the best of both worlds: I don’t fragment the internet anymore than it already is. There’s one place to find my stuff and it’s right here. You know where to find it. I hope you’ll stop by and join me now and then.