<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Odd Soapbox</title>
      <link>https://oddsoapbox.com</link>
      <description>The opinion site for sports, entertainment, tech, and data</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://oddsoapbox.com/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 07 Sep 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Modeling Temporal Data - Applications</title>
          <pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/temporal-data-apps/</link>
          <guid>https://oddsoapbox.com/blog/temporal-data-apps/</guid>
          <description xml:base="https://oddsoapbox.com/blog/temporal-data-apps/">&lt;p&gt;This blog series continues my thoughts on how to model temporal data. This entry is focused on the backend data model for applications.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ideas-from-prior-posts&quot;&gt;Ideas From Prior Posts&lt;&#x2F;h2&gt;
&lt;p&gt;The following recaps the relevant ideas from my first two entries in this series:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Where appropriate, we want our data to have the benefits of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;articles&#x2F;bitemporal-history.html&quot;&gt;bitemporal data&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Implementing bitemporal is challenging because support is uneven in standard databases and the databases designed to support it are too niche to adopt&lt;&#x2F;li&gt;
&lt;li&gt;Event sourcing is an alternative model that can yield bitemporal data, but it too is very complex to implement&lt;&#x2F;li&gt;
&lt;li&gt;Event sourcing also requires the replaying of history to get to a selected point-in-time state&lt;&#x2F;li&gt;
&lt;li&gt;A key principle of Data Vault 2.0 is the ability to get point-in-time state by pulling a set of records associated with that point in time, without the need to replay history&lt;&#x2F;li&gt;
&lt;li&gt;Another key principle of Data Vault 2.0 is using link tables (with versioning) to join records rather than using embedded foreign keys&lt;&#x2F;li&gt;
&lt;li&gt;Document databases held the promise of simplifying data structures by reducing the number of tables, particularly by allowing one-to-many relationships to exist as embedded arrays of records rather than requiring joins to a different table&lt;&#x2F;li&gt;
&lt;li&gt;Because document databases are schema on read vs schema on write, managing schema drift can be a nightmare; schemas for document databases are usually enforced in the application layer rather than the database layer, which is not best practice&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;the-lure-of-document-databases&quot;&gt;The Lure of Document Databases&lt;&#x2F;h2&gt;
&lt;p&gt;Much ink has been spilled about the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nemil.com&#x2F;mongo&#x2F;&quot;&gt;rise of MongoDB&lt;&#x2F;a&gt;. The lure of the document database is compelling: instead of storing across many different tables, document databases let you put all of the data associated with a particular subject into a single record. All CRUD (Create, Read, Update, Delete) impacts a single record in the database, greatly reducing the number of &quot;tables&quot; and simplifying database operations.&lt;&#x2F;p&gt;
&lt;p&gt;As you might infer from the above, modeling bitemporal data in a document database is MUCH simpler. The idea for Event Driven Changes below stems from the notion that (1) the individual record, versus the table, is paramount and (2) the single record holds all of the relevant information. Each record in the event table can &quot;embed&quot; all of the relevant entity data within the event record. Getting the state is a single pull of the event record that is active at the desired time &lt;code&gt;x&lt;&#x2F;code&gt;. Bitemporal joins across many tables are particularly tricky because they require joining not just on table keys but also on the time ranges for each of the two sets of bitemporal columns. The single record concept has no joins, no versioning, no obvious complications.&lt;&#x2F;p&gt;
&lt;p&gt;In practice, however, the limitations of document databases (see last bullet in the prior section) overwhelm the benefits. Which is why the design in the next section leverages these document database ideas but applies them to a traditional relational database. The mental model of the database implementation is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the data is conceptualized on an individual record level (i.e. Domain Driven Design aggregate level) rather than the table level&lt;&#x2F;li&gt;
&lt;li&gt;the tables exist to hold the &quot;shredded&quot; version of the single document database record and are used to define and enforce the schema&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;event-driven-changes&quot;&gt;Event Driven Changes&lt;&#x2F;h2&gt;
&lt;p&gt;Transactions are the proper way for an application to update the backend database. For most applications, a single transaction tends to impact more than one database table. In insurance, this is particularly true as a transaction can simultaneously update the policy record, insured people &#x2F; organization records, insured asset records, and so on. The typical bitemporal approach is to manage state table by table. I would instead suggest that state should be managed event by event.&lt;&#x2F;p&gt;
&lt;p&gt;An event triggers a single database transaction that can include one or more activities or &quot;sub-transactions&quot;. When the single transaction is complete, a given set of database records has been changed from a &quot;before-event-state&quot; to an &quot;after-event-state&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;As in prior posts, my examples will be drawn from property and casualty (i.e. general) insurance since that domain is my expertise. A simple common insurance example: an insured purchases a new car and trades in their old car. The event is &quot;buy a new car&quot;, which starts the single database transaction. The activities &#x2F; sub-transactions are add new car and remove old car. The before-event-state is the policy with the old car and the after-event-state is the policy with the new car. The policy event record is linked to all of the relevant (policy, insured, asset, etc.) records associated with the event&#x27;s after-event-state.&lt;&#x2F;p&gt;
&lt;p&gt;In this example, the bitemporal columns exist only on the policy event table. The database transaction creates the effective &#x2F; expiration dates (actual history) and the recordStart &#x2F; recordEnd dates (record history) on the new policy event record, and updates the recordEnd date for the prior &quot;active&quot; policy event record. A copy of the prior &quot;active&quot; policy event record should then be created with:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the proper expiration date&lt;&#x2F;li&gt;
&lt;li&gt;the recordStart date set equal to the recordEnd date that was used to update the original prior &quot;active&quot; policy event record&lt;&#x2F;li&gt;
&lt;li&gt;the recordEnd date set to null (or 3999-01-01)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;An example table that shows the prior active records along with the new active record:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;event&lt;&#x2F;th&gt;&lt;th&gt;effective&lt;&#x2F;th&gt;&lt;th&gt;expiration&lt;&#x2F;th&gt;&lt;th&gt;recordStart&lt;&#x2F;th&gt;&lt;th&gt;recordEnd&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;A&lt;&#x2F;td&gt;&lt;td&gt;Jan 1&lt;&#x2F;td&gt;&lt;td&gt;null&lt;&#x2F;td&gt;&lt;td&gt;Jan 1&lt;&#x2F;td&gt;&lt;td&gt;Aug 1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;A&#x27;&lt;&#x2F;td&gt;&lt;td&gt;Jan 1&lt;&#x2F;td&gt;&lt;td&gt;July 1&lt;&#x2F;td&gt;&lt;td&gt;Aug 1&lt;&#x2F;td&gt;&lt;td&gt;null&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;B&lt;&#x2F;td&gt;&lt;td&gt;July 1&lt;&#x2F;td&gt;&lt;td&gt;null&lt;&#x2F;td&gt;&lt;td&gt;Aug 1&lt;&#x2F;td&gt;&lt;td&gt;null&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;What does this mean in practice? Every table (policy, insured, asset, etc.) in the data model has versioned records of its entity, but without temporal columns. For example, the vehicles table will contain multiple rows per vehicle, where the composite surrogate key is the &lt;code&gt;vehicle_id&lt;&#x2F;code&gt; plus the &lt;code&gt;version_id&lt;&#x2F;code&gt;. Every time a policy that has this vehicle is updated (via an event), the vehicle record can change. This versioning can be done in two ways:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The vehicle gets a new version every time a policy event occurs on the policy to which the vehicle belongs&lt;&#x2F;li&gt;
&lt;li&gt;The vehicle gets a new version only when a policy event occurs on the policy to which the vehicle belongs AND an attribute of the vehicle changes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The first method is easier to implement and reason about, primarily because each record can have a foreign key back to the policy event that created it. The state of the policy at time &lt;code&gt;x&lt;&#x2F;code&gt; is derived by finding all of the associated data (via policy event foreign keys in the various entity tables) that link back to the selected policy event record that is active at time &lt;code&gt;x&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The second method significantly reduces the amount of data stored and is the preferred method, but requires a junction table because the joins become many-to-many (inspired by the Data Vault 2.0 link table concept). The state of the policy at time &lt;code&gt;x&lt;&#x2F;code&gt; is based on finding the relevant policy event record that is active at time &lt;code&gt;x&lt;&#x2F;code&gt; and then using the links to pull the rest of the associated data (borrowing the Data Vault 2.0 idea of getting point-in-time state by pulling a set of records). Unlike event sourcing, no replay is needed to obtain the point-in-time state.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-now&quot;&gt;Why Now?&lt;&#x2F;h2&gt;
&lt;p&gt;I have not seen the above method for managing bitemporal data in a relational database written about elsewhere. I suspect partly because (1) bitemporal has been niche, and (2) hardware improvements and recent database features now make this method practical to implement:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Databases can now enforce the event table rules rather than leaving them to application code. For example, if you choose to use PostgreSQL you can take advantage of range types, GiST exclusion constraints, and partial unique indexes. Other mainstream databases (Oracle &#x2F; SQL Server) cover parts of these features.&lt;&#x2F;li&gt;
&lt;li&gt;Storage costs are no longer a significant concern. Random I&#x2F;O is no longer a penalty given the prevalence of NVMe SSDs and the wide availability of machines with large RAM. A caveat: hardware prices are rising today due to the demand surge from GenAI. Because storage, I&#x2F;O, and RAM are &quot;solved&quot;, immutable and &#x2F; or denormalized data that was relatively expensive 30 years ago is much less of a concern.&lt;&#x2F;li&gt;
&lt;li&gt;Public cloud and SaaS (Software as a Service) vendors allow users to take advantage of these database and hardware improvements without building their own data center.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This method is a composition of many different ideas developed over the last 30 years, including:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Data Vault (2000) and Data Vault 2.0 (2013)&lt;&#x2F;li&gt;
&lt;li&gt;Event sourcing (2005) and CQRS (late 2000s)&lt;&#x2F;li&gt;
&lt;li&gt;The rise of MongoDB (early 2010s)&lt;&#x2F;li&gt;
&lt;li&gt;Wider use of immutable data, including:
&lt;ul&gt;
&lt;li&gt;The emergence of git (late 2000s) and git concepts applied to data such as lakeFS and Project Nessie (2020s)&lt;&#x2F;li&gt;
&lt;li&gt;The creation of the Datomic database (2012)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;when-to-avoid&quot;&gt;When to Avoid?&lt;&#x2F;h2&gt;
&lt;p&gt;This modeling technique should work well on data generated by humans. This technique is not suitable for use cases with high-volume, machine-generated data (logs, telematics, sensors).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Much has changed in the last 30 years and our data modeling techniques should take advantage of the improvements in modern hardware and databases. My proposed solution for bitemporal data is to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;put all temporal columns on the event table(s)&lt;&#x2F;li&gt;
&lt;li&gt;version all non-event tables without the temporal columns&lt;&#x2F;li&gt;
&lt;li&gt;use link tables rather than foreign keys to join the event table(s) and the entity tables&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The final post in the series will discuss how we can apply similar concepts to analytical data versus application data.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Chargers 2026 Roster Prediction - Actual vs Expected</title>
          <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/chargers-roster-grade/</link>
          <guid>https://oddsoapbox.com/blog/chargers-roster-grade/</guid>
          <description xml:base="https://oddsoapbox.com/blog/chargers-roster-grade/">&lt;p&gt;I had to slip an inside actuarial joke in the title. The upshot: how did I do with my predictions?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;right-and-wrong-a-nod-to-colin-cowherd&quot;&gt;Right and Wrong (a nod to Colin Cowherd)&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;What I got right:&lt;&#x2F;strong&gt; I thought the team would manipulate the roster to maximize the number of offensive linemen by putting Branson Taylor on the Reserve&#x2F;Injured; Designated for Return.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got wrong:&lt;&#x2F;strong&gt; I thought that meant 9 offensive linemen + Branson Taylor. I did not expect 2 more offensive linemen (total of 11 + Branson Taylor).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got right:&lt;&#x2F;strong&gt; I thought the Chargers would maximize both Reserve&#x2F;Injured; Designated for Return slots.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got wrong:&lt;&#x2F;strong&gt; The Chargers used the second slot on Scott Matlock instead of Jaret Patterson. I did not consider that Matlock was injured when I made my prediction; I expected Matlock to make the practice squad, but since he is injured I think this move was the only way for the Chargers to keep his rights.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got right:&lt;&#x2F;strong&gt; I thought the team would make trades to extract value from having too many talented players to protect.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got wrong:&lt;&#x2F;strong&gt; The Chargers traded Avery Smith and TeRah Edwards instead of Junior Colson and Trevor Penning. Getting 6th round picks in 2027 and 2028 for both players was a great haul.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got right:&lt;&#x2F;strong&gt; JK Scott had a terrible preseason.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got wrong:&lt;&#x2F;strong&gt; It was so terrible they decided to go without a punter (for now).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;What I got right and wrong:&lt;&#x2F;strong&gt; Trey Lance was not good and the Chargers kept him anyway (for now).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;recap&quot;&gt;Recap&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I had TBD vs Trey Lance as the second QB.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had Nikko Reed vs Rodney Shelley.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had Penning traded instead of Smith.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had JK Scott over Alex Harkey.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had Branson Taylor and Isaiah World on the correct Reserve lists.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I had Jaret Patterson instead of Scott Matlock as the second Reserve&#x2F;Injured; Designated for Return player.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I was correct that Kyle Kennard would not be on the roster in 2026, though he was waived&#x2F;injured instead of being put on the Reserve list.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;I was also correct about Dalevon Campbell not making the roster. If his injury is as severe as it looked, I feel for him not making the Reserve list and instead being waived&#x2F;injured.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Overall, I correctly predicted:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;49 out of the final 53 players on the roster&lt;&#x2F;li&gt;
&lt;li&gt;2 of the Reserve list placements&lt;&#x2F;li&gt;
&lt;li&gt;that 2 trades would happen&lt;&#x2F;li&gt;
&lt;li&gt;that both Reserve&#x2F;Injured; Designated for Return slots would be used&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;The Chargers under Harbaugh have yet to cut a player drafted in the 1st through 6th rounds in the year they were drafted, something I will keep in mind next year.&lt;&#x2F;li&gt;
&lt;li&gt;If a Chargers player is on the bubble, that player NEEDS TO PERFORM in the preseason to make the roster (unless he is Trey Lance). Players like Colson and Reed were fine but did not stand out, costing them potential spots. As for JK Scott, let&#x27;s hope it&#x27;s &quot;message received&quot; if the team brings him back.&lt;&#x2F;li&gt;
&lt;li&gt;My best call: predicting that Branson Taylor would be put on the Reserve&#x2F;Injured; Designated for Return list to make room for Logan Taylor. Most other predictions I saw had Logan Taylor not making the final roster.&lt;&#x2F;li&gt;
&lt;li&gt;I am ok missing on Shelley vs Reed and Harkey vs Scott. I also was close on the trade front, just missing Smith vs Penning.&lt;&#x2F;li&gt;
&lt;li&gt;I admit my Trey Lance prediction was a reach (so perhaps I should call this 49+ out of 53). I will feel vindicated if they replace Lance with a more suitable backup in the next week, along with getting DJ Uiagalelei on the practice squad.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Chargers 2026 Roster Prediction vFinal</title>
          <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/chargers-roster-final/</link>
          <guid>https://oddsoapbox.com/blog/chargers-roster-final/</guid>
          <description xml:base="https://oddsoapbox.com/blog/chargers-roster-final/">&lt;p&gt;This post completes my prediction of the 2026 Chargers roster after viewing the final preseason game last night. I have intentionally not read Daniel Popper&#x27;s final prediction in The Athletic, as I am trying to limit other influences. That said:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I have listened to recent Guilty as Charged podcasts and read various Chargers focused X accounts&lt;&#x2F;li&gt;
&lt;li&gt;I have been mostly using these sources for training camp insights and opinions on preseason game performances&lt;&#x2F;li&gt;
&lt;li&gt;Some of these sources have slipped in final roster predictions&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;TL;DR some of this projection has been influenced by others.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;locks-and-virtual-locks-49&quot;&gt;Locks and Virtual Locks (49)&lt;&#x2F;h2&gt;
&lt;p&gt;Players in &lt;strong&gt;bold&lt;&#x2F;strong&gt; are the virtual locks, to distinguish from the true locks.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;special-teams-4&quot;&gt;Special Teams (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LS: Josh Harris, P: JK Scott, K: Cameron Dicker, DB: Deane Leonard&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To be clear, Scott and Dicker have both been poor this preseason. Let&#x27;s hope the focus returns when the regular season starts. Also, Dicker did not finish the last preseason game but it sounds as if he is not seriously injured.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;defensive-line-9&quot;&gt;Defensive Line (9)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;DL: Nick Barrett, Jamaree Caldwell, Justin Eboigbe, Teair Tart, Dalvin Tomlinson&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Khalil Mack, Akheem Mesidor, Tuli Tuipulotu, &lt;strong&gt;Bud Dupree&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I left Dupree off this list for my last 2 predictions, more from hope than reality. The reality is no one has separated themselves from the pack of OLB candidates and Dupree has been given the veteran treatment this preseason (did not play much and played strictly with the first team). Dupree is now a virtual lock and I don&#x27;t see anyone else making the roster. I assume the top choices for the practice squad will be Nadame Tucker and Andre Carter II if they clear waivers. For Kyle Kennard, see injured list below.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;linebacker-5&quot;&gt;Linebacker (5)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LB: Troy Dye, Daiyan Henley, Denzel Perryman, Del&#x27;Shawn Phillips, &lt;strong&gt;Marlowe Wax&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Marlowe Wax had another excellent preseason and is a key special teams player who deserves defensive snaps if others get injured (or suspended, since Perryman is on a short leash). I like Junior Colson, but I just can&#x27;t find a roster spot for him and expect he will be traded or cut.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;defensive-back-9&quot;&gt;Defensive Back (9)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CB: Cam Hart, Donte Jackson, Tarheeb Still&lt;&#x2F;li&gt;
&lt;li&gt;DB: Elijah Molden&lt;&#x2F;li&gt;
&lt;li&gt;S: Derwin James Jr., Genesis Smith, Tony Jefferson, &lt;strong&gt;RJ Mickens&lt;&#x2F;strong&gt;, &lt;strong&gt;Kendall Williamson&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I would be shocked if Mickens doesn&#x27;t make the roster. Williamson is in the same position as Wax. Also, as I wrote in the last post, I think he could be the heir apparent to Tony Jefferson. I also have more on the cornerback position below.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;offensive-line-8&quot;&gt;Offensive Line (8)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;C: Jacob Spomer&lt;&#x2F;li&gt;
&lt;li&gt;OL: Jake Slaughter&lt;&#x2F;li&gt;
&lt;li&gt;G: Kayode Awosika, Cole Strange&lt;&#x2F;li&gt;
&lt;li&gt;T: Joe Alt, Travis Burke, Trey Pipkins III, Rashawn Slater&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Spomer had an excellent camp and preseason. With Biadasz being lost for the season, the Chargers need a backup center. Some on X are holding out hope for a veteran alternative. Last year the Chargers rostered a player who could not get playing time on the worst OL in the league; I find it hard to believe a viable alternative will magically appear this year. More on the final OL spots below.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tight-end-3&quot;&gt;Tight End (3)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;TE: Oronde Gadsden II, Charlie Kolar, David Njoku&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;running-back-4&quot;&gt;Running Back (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;FB: Alec Ingold&lt;&#x2F;li&gt;
&lt;li&gt;RB: Omarion Hampton, Keaton Mitchell, Kimani Vidal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;There has been a great battle for practice squad running back spots. It will be interesting to see whom the Chargers choose and who gets claimed by other teams from the threesome of Jaret Patterson, Amar Johnson, and Gregory Desrosiers. For now, though, I have the Chargers stashing Patterson on the injured list (eligible to return).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wide-receiver-6&quot;&gt;Wide Receiver (6)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;WR: Tre&#x27; Harris, Quentin Johnston, Ladd McConkey, Brenen Thompson, &lt;strong&gt;KeAndre Lambert-Smith&lt;&#x2F;strong&gt;, &lt;strong&gt;Derius Davis&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As with Dupree, I hoped the Chargers would move on from Davis. For the same reasons as Dupree, I now accept he will make the roster.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;quarterback-1&quot;&gt;Quarterback (1)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;QB: Justin Herbert&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For more on the second quarterback, see below.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;injured-list&quot;&gt;Injured List&lt;&#x2F;h2&gt;
&lt;p&gt;These players do not count against the 53-player roster and are not eligible to be claimed by another team.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;eligible-to-come-back&quot;&gt;Eligible to come back&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;G: Branson Taylor&lt;&#x2F;li&gt;
&lt;li&gt;RB: Jaret Patterson (or Keaton Mitchell, but not my pick)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;All of these players are injured to some degree. It&#x27;s possible that Branson Taylor is more injured than I know and is a candidate for the out for the season list. Both of these moves free up roster space for 2 more selections. If Keaton Mitchell is put on the Injured List, the Chargers would then choose from the practice squad threesome noted in the running back section above.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;out-for-the-season&quot;&gt;Out for the season&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;T: Isaiah World (technically NFI)&lt;&#x2F;li&gt;
&lt;li&gt;C: Tyler Biadasz&lt;&#x2F;li&gt;
&lt;li&gt;WR: Dalevon Campbell&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Kyle Kennard&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The first two are for sure out for the season. The injury to Campbell last night looks serious, which is a real shame. Campbell was continuing his development this offseason and I think the Chargers would prefer to keep him rather than cut him with an injury settlement. Putting Kennard on the injured list allows the Chargers to give him a second redshirt year without him being on the active roster.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-roster-spot-notes&quot;&gt;Final Roster Spot Notes&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;backup-quarterback-1&quot;&gt;Backup Quarterback (1)&lt;&#x2F;h3&gt;
&lt;p&gt;The pick: TBD trade candidate&lt;&#x2F;p&gt;
&lt;p&gt;I wrote at length on this in the prior post. My pick here is a trade for someone in the next few days, so TBD. The Steelers and Browns in particular have excess players, though none are great options. In future years, the Chargers need to draft a real backup QB in rounds 3 to 5; Herbert has never had a good backup QB.&lt;&#x2F;p&gt;
&lt;p&gt;If a trade does not happen prior to cut down day, I would expect DJ Uiagalelei to get the nod. The Chargers could then cut him after rosters are set, replace him with another post-cut QB, and then add DJ to the practice squad. I don&#x27;t see how the Chargers could keep Trey Lance after this offseason, which means keeping Lance is probably what will happen.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cornerback-2&quot;&gt;Cornerback (2)&lt;&#x2F;h3&gt;
&lt;p&gt;The pick: Nikko Reed and Avery Smith&lt;&#x2F;p&gt;
&lt;p&gt;These picks are the toughest call. Perhaps Junior Colson gets one of these spots? Perhaps it&#x27;s Rodney Shelley over one of these two?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;offensive-line-1&quot;&gt;Offensive Line (1)&lt;&#x2F;h3&gt;
&lt;p&gt;The pick: Logan Taylor&lt;&#x2F;p&gt;
&lt;p&gt;I think Logan Taylor has done enough this offseason and shown versatility between tackle and guard (yes, I did see him get beat badly last night). I think the Chargers will choose the draft pick and upside over Trevor Penning. With the injuries to Biadasz and Taylor, the Chargers now have a way to keep all of their young players and not roster 10 offensive linemen to start the season.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;players-traded&quot;&gt;Players traded&lt;&#x2F;h3&gt;
&lt;p&gt;The pick: Junior Colson and Trevor Penning&lt;&#x2F;p&gt;
&lt;p&gt;If they don&#x27;t get traded, then I have them not making the roster. I think both have value for teams in need, particularly for a 7th round pick.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;overall&quot;&gt;Overall&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Added&lt;&#x2F;strong&gt; since initial prediction: Jacob Spomer, Derius Davis, Bud Dupree, Kendall Williamson, Avery Smith&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Removed&lt;&#x2F;strong&gt; since initial prediction: Tyler Biadasz, Dalevon Campbell, Kyle Kennard, Nadame Tucker, Trevor Penning&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-roster-position-count&quot;&gt;Final Roster Position Count&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Special Teams (4)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Line (9)&lt;&#x2F;li&gt;
&lt;li&gt;Linebacker (5)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Back (11)&lt;&#x2F;li&gt;
&lt;li&gt;Offensive Line (9)&lt;&#x2F;li&gt;
&lt;li&gt;Tight End (3)&lt;&#x2F;li&gt;
&lt;li&gt;Fullback (1)&lt;&#x2F;li&gt;
&lt;li&gt;Running Back (3)&lt;&#x2F;li&gt;
&lt;li&gt;Wide Receiver (6)&lt;&#x2F;li&gt;
&lt;li&gt;Quarterback (2)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Chargers 2026 Roster Prediction v2</title>
          <pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/chargers-roster-2/</link>
          <guid>https://oddsoapbox.com/blog/chargers-roster-2/</guid>
          <description xml:base="https://oddsoapbox.com/blog/chargers-roster-2/">&lt;p&gt;This post continues my prediction of the 2026 Chargers roster. I had the good fortune to attend training camp this past Sunday. I was going to make an updated prediction then, but wisely decided to wait until last night&#x27;s preseason game.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;locks-43&quot;&gt;Locks (43)&lt;&#x2F;h2&gt;
&lt;p&gt;I am not going to spend time discussing the locks, because nothing has changed with the exception of backup quarterback. To recap:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;special-teams-4&quot;&gt;Special Teams (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LS: Josh Harris, P: JK Scott, K: Cameron Dicker, DB: Deane Leonard&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;defensive-line-8&quot;&gt;Defensive Line (8)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;DL: Nick Barrett, Jamaree Caldwell, Justin Eboigbe, Teair Tart, Dalvin Tomlinson&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Khalil Mack, Akheem Mesidor, Tuli Tuipulotu&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;linebacker-4&quot;&gt;Linebacker (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LB: Troy Dye, Daiyan Henley, Denzel Perryman, Del&#x27;Shawn Phillips&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;defensive-back-6&quot;&gt;Defensive Back (6)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CB: Cam Hart, Donte Jackson, Tarheeb Still&lt;&#x2F;li&gt;
&lt;li&gt;DB: Elijah Molden&lt;&#x2F;li&gt;
&lt;li&gt;S: Derwin James Jr., Genesis Smith&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;offensive-line-8&quot;&gt;Offensive Line (8)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;C: Tyler Biadasz&lt;&#x2F;li&gt;
&lt;li&gt;OL: Jake Slaughter&lt;&#x2F;li&gt;
&lt;li&gt;G: Kayode Awosika, Cole Strange&lt;&#x2F;li&gt;
&lt;li&gt;T: Joe Alt, Travis Burke, Trey Pipkins III, Rashawn Slater&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;tight-end-3&quot;&gt;Tight End (3)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;TE: Oronde Gadsden II, Charlie Kolar, David Njoku&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;running-back-4&quot;&gt;Running Back (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;FB: Alec Ingold&lt;&#x2F;li&gt;
&lt;li&gt;RB: Omarion Hampton, Keaton Mitchell, Kimani Vidal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;wide-receiver-4&quot;&gt;Wide Receiver (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;WR: Tre&#x27; Harris, Quentin Johnston, Ladd McConkey, Brenen Thompson&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;quarterback-2&quot;&gt;Quarterback (2)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;QB: Justin Herbert, Trey Lance or DJ Uiagalelei&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;injured-list-practice-squad&quot;&gt;Injured List &#x2F; Practice Squad&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;QB: DJ Uiagalelei or Trey Lance&lt;&#x2F;li&gt;
&lt;li&gt;T: Isaiah World&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;position-battle-notes&quot;&gt;Position Battle Notes&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;backup-quarterback&quot;&gt;Backup Quarterback&lt;&#x2F;h3&gt;
&lt;p&gt;In late June, it seemed fairly straightforward that Lance would beat out DJ for the backup spot. My observation from training camp and the preseason game is that Lance has lost something off his fastball. After the game last night I texted my son: ignore the stats, Lance did not play well. Apparently Daniel Popper &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;athletic&#x2F;7512748&#x2F;2026&#x2F;08&#x2F;14&#x2F;chargers-texans-nfl-takeaways-dj-uiagalelei-trey-lance&#x2F;&quot;&gt;agrees&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;DJ has pedigree:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;was a top recruit from St. John Bosco and rival to Mater Dei&#x27;s Bryce Young, who later was drafted #1 overall by the Carolina Panthers&lt;&#x2F;li&gt;
&lt;li&gt;played 5 seasons of college football, though largely underwhelmed relative to expectations&lt;&#x2F;li&gt;
&lt;li&gt;has great all-around physical tools&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I am intrigued to see DJ play with the second team this preseason. If he plays well, he could unseat Lance.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;practice-squad-tight-end&quot;&gt;Practice Squad Tight End&lt;&#x2F;h3&gt;
&lt;p&gt;Scott Matlock played extensively at tight end last night and was OK as a blocker. He&#x27;s also been working at offensive tackle in training camp, presumably to improve his blocking (and perhaps to be an option if everything goes crazy like last season?). Either way, both he and Johnny Pascuzzi (UDFA from Tulane) made some noise and are strong candidates for the practice squad.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wide-receiver&quot;&gt;Wide Receiver&lt;&#x2F;h3&gt;
&lt;p&gt;I now think the Chargers will keep only 3 running backs and 5 wide receivers, which means the lone battle for a skill position roster spot is between KeAndre Lambert-Smith (KLS) and Derius Davis. If KLS has 2 more games like last night, and if the team is comfortable that others can handle kick return duties, I think the spot is his to lose.&lt;&#x2F;p&gt;
&lt;p&gt;I optimistically predicted a spot for Dalevon Campbell in June but sadly he does not have a path to making the roster, last night&#x27;s fumble notwithstanding. I thought Campbell was bigger than he actually is; he is similar in size to Tre&#x27; Harris and is not the &quot;Mike Williams lite&quot; player I thought he might be.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;practice-squad-running-back&quot;&gt;Practice Squad Running Back&lt;&#x2F;h3&gt;
&lt;p&gt;A 3 player battle exists between Jaret Patterson, Amar Johnson, and Gregory Desrosiers (UDFA from Memphis). All three made plays last night, making their case for a practice squad spot.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;offensive-line&quot;&gt;Offensive Line&lt;&#x2F;h3&gt;
&lt;p&gt;I correctly predicted in June that Trevor Penning is not a lock. I did not predict that Branson Taylor would have an excellent camp and preseason. I now believe B Taylor is a virtual lock, leaving a potential 3 player battle for the final spot between Penning, Logan Taylor, and Jacob Spomer (UDFA from Fresno State). Normally I would make Logan Taylor the clear front runner given his tackle &#x2F; guard versatility, but Spomer was really good as the second center last night. If Slaughter starts at left guard, there is a path for Spomer to be the backup center (a concept I heard from the Guilty As Charged pod, though with Kaltenberger instead of Spomer).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;practice-squad-defensive-tackle&quot;&gt;Practice Squad Defensive Tackle&lt;&#x2F;h3&gt;
&lt;p&gt;Both TeRah Edwards and Jahmeer Carter (UDFA from Virginia) were excellent last night. Edwards in particular made a 4th down stop, while Carter was constantly in the backfield. Both could make the practice squad if there is room for them.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;outside-linebacker&quot;&gt;Outside Linebacker&lt;&#x2F;h3&gt;
&lt;p&gt;Kyle Kennard and Nadame Tucker largely played together last night. Kennard showed much improved pass rush ability from last season, while Tucker was strong sealing the edge. Bud Dupree did not play. It&#x27;s entirely possible the Chargers keep Dupree as a veteran presence, but Kennard and Tucker are pushing for the 4th and 5th spots.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;inside-linebacker&quot;&gt;Inside Linebacker&lt;&#x2F;h3&gt;
&lt;p&gt;Junior Colson, a former high 3rd round pick plagued by injury problems, did not impress last night. Colson had a chance to claim a roster spot with a strong camp and preseason, but that has not happened. It would take a minor miracle now for Colson to make the roster.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;defensive-back&quot;&gt;Defensive Back&lt;&#x2F;h3&gt;
&lt;p&gt;While Nikko Reed is the front runner, UDFAs Avery Smith (Toledo) and Rodney Shelley (Georgia Tech) had their moments along with Isas Waxter. Eric Rogers, the surprise player who made last year&#x27;s roster, seems like he might be out of the running.&lt;&#x2F;p&gt;
&lt;p&gt;Kendall Williamson looks like a much different and improved player on defense this off-season. I view him now as the heir apparent to Tony Jefferson. With his special teams skills, Williamson should be a virtual lock to make the team.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-selections&quot;&gt;Final Selections&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;offense-3-selected&quot;&gt;Offense (3 selected)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;G: &lt;strong&gt;Branson Taylor&lt;&#x2F;strong&gt;, Logan Taylor&lt;&#x2F;li&gt;
&lt;li&gt;WR: KeAndre Lambert-Smith&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;defense-7-selected&quot;&gt;Defense (7 selected)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CB: Nikko Reed&lt;&#x2F;li&gt;
&lt;li&gt;LB: Marlowe Wax&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Kyle Kennard, Nadame Tucker&lt;&#x2F;li&gt;
&lt;li&gt;S: &lt;strong&gt;Tony Jefferson,&lt;&#x2F;strong&gt; &lt;strong&gt;RJ Mickens,&lt;&#x2F;strong&gt; &lt;strong&gt;Kendall Williamson&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Players in &lt;strong&gt;bold&lt;&#x2F;strong&gt; are virtual locks&lt;&#x2F;p&gt;
&lt;h3 id=&quot;overall&quot;&gt;Overall&lt;&#x2F;h3&gt;
&lt;p&gt;Added: Branson Taylor, Kendall Williamson
Removed: Trevor Penning, Dalevon Campbell&lt;&#x2F;p&gt;
&lt;h2 id=&quot;final-roster-position-count&quot;&gt;Final Roster Position Count&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Special Teams (4)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Line (10)&lt;&#x2F;li&gt;
&lt;li&gt;Linebacker (5)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Back (10)&lt;&#x2F;li&gt;
&lt;li&gt;Offensive Line (10)&lt;&#x2F;li&gt;
&lt;li&gt;Tight End (3)&lt;&#x2F;li&gt;
&lt;li&gt;Fullback (1)&lt;&#x2F;li&gt;
&lt;li&gt;Running Back (3)&lt;&#x2F;li&gt;
&lt;li&gt;Wide Receiver (5)&lt;&#x2F;li&gt;
&lt;li&gt;Quarterback (2)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;&#x2F;h2&gt;
&lt;p&gt;The final roster battles are for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;10th offensive lineman&lt;&#x2F;li&gt;
&lt;li&gt;5th wide receiver&lt;&#x2F;li&gt;
&lt;li&gt;4th cornerback spot&lt;&#x2F;li&gt;
&lt;li&gt;3 defensive spots for 5 possible positions: 1 linebacker, 3 outside linebackers, and 1 cornerback&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For example, could a 5th cornerback be chosen ahead of Marlowe Wax? Or could all of Dupree, Kennard, and Tucker be chosen ahead of Wax? Given the team&#x27;s decision last year to keep an extra cornerback on the initial 53 man roster, it&#x27;s within the realm of possibility.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>QB Tiers and the Franchise QB Myth</title>
          <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/qb-tiers/</link>
          <guid>https://oddsoapbox.com/blog/qb-tiers/</guid>
          <description xml:base="https://oddsoapbox.com/blog/qb-tiers/">&lt;p&gt;When you hear sports pundits discuss NFL quarterbacks, inevitably they will assess whether that player is a &quot;Franchise Quarterback&quot;. If a team has a Franchise Quarterback, then the team is set at QB and ready to challenge for a Super Bowl (assuming other pieces are reasonably in place). Franchise Quarterbacks should be paid, because otherwise you might lose the player and wander the wilderness until you are blessed again to have another Franchise Quarterback. In short, the Franchise Quarterback is the Holy Grail &#x2F; The One Ring; that precious thing that must be captured and preserved at all costs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-franchise-qb-myth&quot;&gt;The Franchise QB Myth&lt;&#x2F;h2&gt;
&lt;p&gt;The reality is a bit different. The real key is a much higher standard than the Franchise Quarterback - it&#x27;s the pairing of a Hall of Fame (HOF) head coach with a Greatest Of All Time (GOAT) quarterback candidate. Bill Walsh with Joe Montana, Bill Belichick with Tom Brady, Andy Reid with Patrick Mahomes. These situations are the true Holy Grail and truly rare. Aaron Rodgers never had a HOF head coach and only won 1 Super Bowl. Drew Brees had Sean Payton, but the Saints defense &#x2F; special teams was too poor to yield more than 1 Super Bowl. Other GOAT candidates, such as John Elway and Peyton Manning, had mixed Super Bowl success with multiple head coaches.&lt;&#x2F;p&gt;
&lt;p&gt;Since the year 2001, when Tom Brady played in his first Super Bowl, the following quarterbacks have played in a Super Bowl:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Quarterback&lt;&#x2F;th&gt;&lt;th&gt;Appearances&lt;&#x2F;th&gt;&lt;th&gt;Record (W-L)&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Tom Brady&lt;&#x2F;td&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;7-3&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Patrick Mahomes&lt;&#x2F;td&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;3-2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Peyton Manning&lt;&#x2F;td&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;2-2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ben Roethlisberger&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;2-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Eli Manning&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;2-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Russell Wilson&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;1-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Jalen Hurts&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;1-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Kurt Warner&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;0-2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Brad Johnson&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Drew Brees&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Aaron Rodgers&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Joe Flacco&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Nick Foles&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Matthew Stafford&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Sam Darnold&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1-0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Rich Gannon&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Jake Delhomme&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Donovan McNabb&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Matt Hasselbeck&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Rex Grossman&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Colin Kaepernick&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Cam Newton&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Matt Ryan&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Jared Goff&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Jimmy Garoppolo&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Joe Burrow&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Brock Purdy&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Drake Maye&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0-1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The top 3 in this list are all part of the GOAT discussion. Big Ben, a future HOF quarterback, had the benefit of great teams and head coaches (at least early in his career). Kurt Warner played in a third Super Bowl not listed above; leading the traditionally woebegone Rams and Cardinals to three Super Bowls justifiably earned him a gold jacket.&lt;&#x2F;p&gt;
&lt;p&gt;Otherwise, having a HOF quarterback is not a requirement for making or winning a Super Bowl. The Eagles victory with Nick Foles over the Patriots &#x2F; Belichick &#x2F; Brady is the epitome of team over quarterback.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-really-matters&quot;&gt;What Really Matters?&lt;&#x2F;h2&gt;
&lt;p&gt;The most important criteria to get to the Super Bowl is having a competent+ (or better) starting quarterback. Competent+ means the quarterback is solid most of the time, makes a few key plays a game, and largely avoids soul-crushing plays. Jameis Winston sadly fails the third criteria.&lt;&#x2F;p&gt;
&lt;p&gt;A player does not need to be competent+ for their entire career, just in the seasons where the team is contending. Drew Brees was pulled at halftime of a game I attended in Chicago in 2003. That Chargers team was solid, but Brees was so far below the competent+ threshold that season the Chargers wound up with the first pick in the 2004 NFL Draft. Brees launched his GOAT candidacy in 2004 and the Chargers made the playoffs. The lone quarterback to power the Chargers to a Super Bowl (in 1994) was Stan Humphries, the ultimate competent+ quarterback.&lt;&#x2F;p&gt;
&lt;p&gt;Your team should not be searching for the next Patrick Mahomes and Andy Reid combo; that&#x27;s like hitting the 10-year lottery. Instead, the focus should be on pairing a competent+ (or better) quarterback with a great head coach and team. Sean Payton understood this concept when he drafted Bo Nix. He gets competent+ quarterback play at a rookie salary which (1) lets the Broncos spend money on the rest of the roster, and (2) thus makes it much easier to have a Super Bowl caliber team. After Nix plays out his fifth-year option, Payton can move on to the next quarterback if Nix does not accept a competent+ salary.&lt;&#x2F;p&gt;
&lt;p&gt;The Achilles heel - if you overpay your non-GOAT quarterback, you cannot (usually) field a good enough team. Call this the Daniel Jones fallacy: a borderline competent+ quarterback who keeps getting paid like a &quot;Franchise Quarterback&quot;. He is the poster boy for why the Franchise Quarterback myth is so damaging.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qb-tiers&quot;&gt;QB Tiers&lt;&#x2F;h2&gt;
&lt;p&gt;Given the above, I have my own tiers for quarterbacks. They are based on actual 2025 and projected 2026 play. I am basing these loosely on the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nytimes.com&#x2F;athletic&#x2F;interactive&#x2F;nfl-quarterback-tiers-insider-rankings-2026&#x2F;&quot;&gt;QB Tiers&lt;&#x2F;a&gt; published annually by The Athletic&#x27;s Mike Sando.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-team-can-win-11-games-without-an-offensive-line-for-half-a-season&quot;&gt;Tier - Team can win 11 games without an offensive line for half a season&lt;&#x2F;h3&gt;
&lt;p&gt;Patrick Mahomes, Josh Allen, Justin Herbert&lt;&#x2F;p&gt;
&lt;p&gt;Unless you watch the Chargers regularly, you cannot fathom just how bad things got for the offensive line in 2025. There were games the Chargers played with their 5th and 6th choice offensive tackles, while Bradley Bozeman was the lowest rated center in the league and Mekhi Becton had a poor injury riddled season. Herbert makes this list because he proved he could do it; the other 2 for obvious reasons.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-team-is-extremely-happy-with-their-quarterback&quot;&gt;Tier - Team is extremely happy with their quarterback&lt;&#x2F;h3&gt;
&lt;p&gt;Matthew Stafford, Joe Burrow, Dak Prescott, Jordan Love&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-young-quarterbacks-who-fit-the-above-tier&quot;&gt;Tier - Young quarterbacks who fit the above tier&lt;&#x2F;h3&gt;
&lt;p&gt;Drake Maye, Caleb Williams&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-in-limbo&quot;&gt;Tier - In Limbo&lt;&#x2F;h3&gt;
&lt;p&gt;These quarterbacks have been great but injured recently, so could reasonably be slotted in almost any tier.&lt;&#x2F;p&gt;
&lt;p&gt;Lamar Jackson, Jayden Daniels&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-the-jared-goff-standard-competent&quot;&gt;Tier - The Jared Goff standard (competent+)&lt;&#x2F;h3&gt;
&lt;p&gt;Jared Goff, Brock Purdy, Baker Mayfield, Sam Darnold, Trevor Lawrence, Jalen Hurts, Bo Nix, Kyler Murray&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-might-be-competent&quot;&gt;Tier - Might be competent+?&lt;&#x2F;h3&gt;
&lt;p&gt;Aaron Rodgers, CJ Stroud, Daniel Jones, Bryce Young, Cam Ward, Tyler Shough, Malik Willis&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tier-probably-not-competent&quot;&gt;Tier - Probably not competent+&lt;&#x2F;h3&gt;
&lt;p&gt;Jaxson Dart, Tua Tagovailoa &#x2F; Michael Penix Jr, Kirk Cousins, Geno Smith, Deshaun Watson &#x2F; Shedeur Sanders, Jacoby Brissett&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-lamar-jackson-conundrum&quot;&gt;The Lamar Jackson Conundrum&lt;&#x2F;h2&gt;
&lt;p&gt;I don&#x27;t really know what to do with Lamar Jackson (hence the &quot;limbo&quot; tier). Statistically, he&#x27;s been mostly brilliant in his career and has won 2 MVP awards. The eye test matches the statistics. By all accounts he should be in the 11-win tier. To be clear, as a Rivers &#x2F; Herbert apologist, I do not countenance quarterback wins as a real concept. And yet: with a great coach and great roster, Jackson has played in just 1 conference championship game; it&#x27;s hard not to wonder why have the Ravens with Jackson haven&#x27;t had more success. Even having a top-tier Franchise Quarterback like Lamar Jackson or Josh Allen does not guarantee you a Super Bowl appearance.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qb-tier-takeaway&quot;&gt;QB Tier takeaway&lt;&#x2F;h2&gt;
&lt;p&gt;4 of the 8 quarterbacks in the Jared Goff tier have played in a Super Bowl, going 2-3. Bo Nix was an injury away from making that 5 of 8 and 2-4. As long as you don&#x27;t overpay the player, having a Jared Goff tier quarterback is perfectly fine. The problem of course is these players get paid, which significantly reduces their chances of playing in another Super Bowl.&lt;&#x2F;p&gt;
&lt;p&gt;As a fan, stop caring if you have a Franchise Quarterback. Worry instead if your quarterback is competent+ and is on a reasonable salary. Worry about your team repeating the Daniel Jones fallacy.&lt;&#x2F;p&gt;
&lt;p&gt;Vikings fans: if the coaching and roster holds up, Kyler Murray is an excellent candidate to join the list of Super Bowl quarterbacks in the Jared Goff tier.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Modeling Temporal Data - A Technology Tangent (Part 2)</title>
          <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/temporal-data-2/</link>
          <guid>https://oddsoapbox.com/blog/temporal-data-2/</guid>
          <description xml:base="https://oddsoapbox.com/blog/temporal-data-2/">&lt;p&gt;This blog series continues my thoughts on how to model temporal data. This second entry is tangential and discusses how technology changes have altered what is possible today.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mid-1990s-era&quot;&gt;Mid 1990s Era&lt;&#x2F;h2&gt;
&lt;p&gt;I began my career around this time. Windows started to take off with Windows 95, launching the modern PC era. Mobile phones were still a novelty and the iPhone was more than a decade away. Affordable laptop computers had a monochrome (grayscale) screen with a trackball instead of a touchpad. The database market leaders were Oracle and Sybase. IBM DB2 was prominent in the enterprise category while Microsoft SQL Server (MSSQL) was just getting off the ground after collaborating with Sybase.&lt;&#x2F;p&gt;
&lt;p&gt;In other words, life was VERY different just 30 years ago.&lt;&#x2F;p&gt;
&lt;p&gt;Virtually all of the databases in this era were transactional databases (OLTP) with data stored in rows. RAM and hard drives were small and relatively expensive, with sizes measured in MB versus GB. Hard drives were physical spinning disk drives with slow I&#x2F;O (disk reads and writes). The database systems themselves and the data modeling techniques in vogue were all designed around these real technological constraints. The primary data models for new application backend databases was Third Normal Form (3NF). For analytics, popular data models were Inmon (based on 3NF) and Kimball (Star Schema).&lt;&#x2F;p&gt;
&lt;p&gt;Running generalized analytics on these databases was extremely slow by today&#x27;s standards. The SQL language was also much more limited and purely OLTP focused. SAS filled the void by expanding from its origins on the mainframe to Unix and the PC. SAS had a few key advantages for analytics over the traditional OLTP databases:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;SAS datasets were similar in concept to a table, but stored on disk in a file per dataset (conceptually like Parquet, though because Parquet is column oriented it&#x27;s much better suited for analytics)&lt;&#x2F;li&gt;
&lt;li&gt;SAS &quot;queries&quot; processed the entire dataset row by row, applying any transformations and outputting a new dataset (or overwriting an existing dataset)&lt;&#x2F;li&gt;
&lt;li&gt;SAS datasets inferred schema
&lt;ul&gt;
&lt;li&gt;no &lt;code&gt;CREATE TABLE&lt;&#x2F;code&gt; style statements were needed to move data from one dataset to another&lt;&#x2F;li&gt;
&lt;li&gt;column schemas for calculated columns did not need to be predefined&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;SAS favored flat files with few joins; small lookups could be applied via SAS formats without needing to join a table&lt;&#x2F;li&gt;
&lt;li&gt;When run on large-scale computers like mainframes or Unix boxes, SAS could effectively process large volumes of data because computing was not memory bound (reading datasets by rows allowed for processing data in &quot;streams&quot; versus the set-based actions of a traditional SQL database).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Teradata introduced Massively Parallel Processing (MPP) to the analytics space. The software came preinstalled on an expensive database appliance that only large companies could afford.&lt;&#x2F;p&gt;
&lt;p&gt;Essbase was the leader in providing OLAP cubes, which often were the presentation layer of the underlying Star Schema data model, with pre-aggregated data for fast reads. These cubes had some key shortcomings:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the rigid data made it difficult to add new columns or data sources&lt;&#x2F;li&gt;
&lt;li&gt;the user was locked into a single, post-processed view of the data&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Also, because data was aggregated, cubes lacked the ability to fully &quot;drill down&quot; to the actual row-level details.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2010s-addendum&quot;&gt;2010s Addendum&lt;&#x2F;h2&gt;
&lt;p&gt;In the prior section, I noted Teradata&#x27;s MPP database appliance. It was not until this era, though, that MPP-style analytical processing (OLAP) was readily available to the masses. Cloud data warehouses such as Redshift, Snowflake, and BigQuery led the way. Databricks originally delivered MPP processing exclusively via Spark, though it now has a SQL engine. These warehouses (or &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.databricks.com&#x2F;blog&#x2F;2020&#x2F;01&#x2F;30&#x2F;what-is-a-data-lakehouse.html&quot;&gt;lakehouses&lt;&#x2F;a&gt;) store data in columns instead of rows, which leads to significant compression of data along with fast querying (because most analytical queries only need a few columns at a time).&lt;&#x2F;p&gt;
&lt;p&gt;The other significant emergence was the concept of NoSQL databases. MongoDB popularized the document database (document db), one of the many NoSQL categories that also include key-value stores, wide-column stores, and graph databases. Document dbs are designed around schema on read vs schema on write. What does this mean? A collection, which acts like a table, can have a different schema for each row. The record itself &quot;defines&quot; the schema with the shape of the various key-value pairs (key = column, value = row value). Values can be text, integer, etc., and can also be other &quot;objects&quot; like sub-records of key-value pairs and arrays.&lt;&#x2F;p&gt;
&lt;p&gt;For analytics, document dbs appear to provide the freedom of a richer SAS dataset on an open source database with commodity hardware. Unfortunately, these databases have shortcomings that make them impractical for analytics:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;vendor-specific query languages&lt;&#x2F;li&gt;
&lt;li&gt;poor performance on data aggregation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Snowflake solved both of these problems early on with its VARIANT (i.e. document db shaped) column type. If you have an analytical document db use case, always choose Snowflake or equivalent over an OLTP document db like MongoDB.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-about-sql&quot;&gt;What About SQL?&lt;&#x2F;h2&gt;
&lt;p&gt;I could discuss SQL at length in its own blog post. Instead, I want to focus on one major issue with databases today: the many &quot;flavors&quot; of SQL. Each database vendor has its own SQL dialect that is mostly similar but always has a few notable differences. SQL dialects differ partly out of necessity, as database features are different between databases themselves. For example, what is available in Postgres for temporal data is different than what is available in MySQL or MSSQL. Practically, these differences also enhance vendor lock-in, though GenAI SQL translations should make that less of a barrier going forward.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;so-what&quot;&gt;So What?&lt;&#x2F;h2&gt;
&lt;p&gt;Why am I rehashing the 1990s and the 2010s?&lt;&#x2F;p&gt;
&lt;p&gt;The technology available today is significantly different than it was 30 years ago. GenAI cost spikes aside, RAM and disk are MUCH faster and MUCH cheaper. Cloud database providers offer endless compute and storage at (relatively) reasonable prices. Today&#x27;s equivalent tech stack is a fraction of the cost of the SAS platforms I managed 15 years ago.&lt;&#x2F;p&gt;
&lt;p&gt;And yet we are largely using the same data modeling concepts.&lt;&#x2F;p&gt;
&lt;p&gt;For analytics, we continue to use techniques that were popular prior to the OLAP cloud warehouses even though those warehouses provide significant advantages in compute &#x2F; storage and the SQL language. As an example, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.dataexpert.io&#x2F;p&#x2F;stop-using-slowly-changing-dimensions&quot;&gt;this alternative idea&lt;&#x2F;a&gt; for Slowly Changing Dimensions Type 2 works now because of these new technological advances.&lt;&#x2F;p&gt;
&lt;p&gt;For system applications, the allure of schema on read along with the idea of fully denormalized data was irresistible. All of the data for a single business concept, including hierarchical data, could live in a single record. The application could pull just one row to get what it needed, and then write out the single row with changes.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, schema on read has some serious deficiencies. Every row can have its own schema, so schema &quot;drift&quot; needs to be separately tracked and managed; even though tracking schema &quot;drift&quot; or versioning schemas is not a feature included with the database. A &quot;table&quot; can easily have 10 to 50 to 100 true row schemas. Using traditional row &#x2F; column shapes to define the data structure and enforce data standards is a real feature; schema on read in practice often drifts into the &quot;lazy way out&quot;. Modern application data modeling should combine the benefits of document db data structures with the safety of traditional data tables.&lt;&#x2F;p&gt;
&lt;p&gt;Future posts will lean on these ideas when discussing application and analytical data models.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Are We Going Backwards?</title>
          <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/going-backwards/</link>
          <guid>https://oddsoapbox.com/blog/going-backwards/</guid>
          <description xml:base="https://oddsoapbox.com/blog/going-backwards/">&lt;p&gt;The promise of technology is that our lives will be greatly improved. Humanity will be capable of doing more things and have increasing abundance. My recent experiences, however, suggest that technology in many places is making our lives harder. Yesterday&#x27;s pursuit of replacing my broken printer is a great example.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;previous-experience-getting-a-printer&quot;&gt;Previous Experience Getting a Printer&lt;&#x2F;h2&gt;
&lt;p&gt;I look at review sites to identify the current best all-in-one color inkjet printer. I search online to see which store has it in stock, and then go to the store and buy it.&lt;&#x2F;p&gt;
&lt;p&gt;Once at home, I&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;load the ink cartridges&lt;&#x2F;li&gt;
&lt;li&gt;load paper&lt;&#x2F;li&gt;
&lt;li&gt;attach the ethernet cable&lt;&#x2F;li&gt;
&lt;li&gt;plug it in&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And it just works. If I want to scan, I install additional software onto my PC.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;new-experience-getting-a-printer&quot;&gt;New Experience Getting a Printer&lt;&#x2F;h2&gt;
&lt;p&gt;I look at review sites to identify the current best all-in-one color inkjet printer. So far so good.&lt;&#x2F;p&gt;
&lt;p&gt;I go to the Best Buy website to see if it&#x27;s in stock. The website is effectively &quot;broken&quot; in that it is loading options at the same speed as my Prodigy dial-up service in the 1990s. And there are SO MANY OPTIONS. I realize it will take hours just to figure out if Best Buy has this popular printer in stock at a local store. And I do not want to drive to 5 different Best Buys to figure out which store has it. So I use Staples instead, forgoing the warranty that comes with my Best Buy Total membership.&lt;&#x2F;p&gt;
&lt;p&gt;Not the best start, but now I have the printer at home. Once at home I try to load the paper, but the default setting for the paper tray is photo? There are no clear instructions on how to change the plastic setting and the online manual is of little help. I finally figure out how to expand the plastic tray guides to be the wider letter size that 99% of folks in the USA actually uses. I can already sense the eye rolls, but I am that person who constantly breaks delicate things when trying to brute force a solution.&lt;&#x2F;p&gt;
&lt;p&gt;My frustration level is rising, but OK, I got the paper in and turn on the printer. It asks me to connect it to WiFi which I think I do. But is it connected? I&#x27;m not sure because it still gives me the WiFi setup menu and won&#x27;t move past it. It also keeps asking me to install its app with a provided QR code. So basically I cannot use the printer and I cannot set up the printer without installing an application. What?&lt;&#x2F;p&gt;
&lt;p&gt;So I dutifully install the app on my iPad. I click the &quot;pairing&quot; option on both the printer and the app. The app sees the printer, works to connect, and then the connection fails. Meanwhile, the only way to escape the pairing on the printer is to unplug it. The power off button won&#x27;t work because it says the printer is busy!&lt;&#x2F;p&gt;
&lt;p&gt;After a few failed attempts, I decide to start from first principles. I need to see if the printer is even on the network, which the printer suggests it is. I attempt to log into my router, but now apparently the UniFi web login requires me to set up a passkey? But it&#x27;s my wife&#x27;s machine logged in as her - I don&#x27;t want a passkey. Too bad, I get the raw JSON response on the webpage letting me know it cannot connect.&lt;&#x2F;p&gt;
&lt;p&gt;Now I will admit I then spent the next 30 seconds dropping more F bombs than an entire Quentin Tarantino movie.&lt;&#x2F;p&gt;
&lt;p&gt;After &quot;refocusing&quot;, I go to the room with the router, directly attach my PC to it, move the printer to the same room so I have both in the same place, and start over. Since I am plugged directly into the router now, UniFi lets me in without a passkey. I confirm the printer is in fact on the network. Progress! I then download the PC version of the printer software. That software actually works and takes me through a 20+ minute process to &quot;set up&quot; the printer. Finally the printer is good to go - I put it back in the room where it belongs and the printed test page is accurate.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;i-have-questions&quot;&gt;I Have Questions&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Do retailers know how much business they are losing because of their bloated and poorly performing websites?&lt;&#x2F;li&gt;
&lt;li&gt;How do non-tech-savvy people buy and use a printer anymore?&lt;&#x2F;li&gt;
&lt;li&gt;For that matter, how do non-tech-savvy people do anything anymore? Attending sporting events and concerts is a similarly complex experience. Were the old days of just showing up with a paper ticket and paying with cash to park really so bad?&lt;&#x2F;li&gt;
&lt;li&gt;Why is a printer so complicated to set up now? Whatever happened to plug-n-play?&lt;&#x2F;li&gt;
&lt;li&gt;Is this degradation of the user experience intentional or incompetence?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I feel like a pithy conclusion is needed, but I don&#x27;t have one. Do people really think the new way is better?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>USA Belgium Postmortem</title>
          <pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/postmortem-usmnt-belgium/</link>
          <guid>https://oddsoapbox.com/blog/postmortem-usmnt-belgium/</guid>
          <description xml:base="https://oddsoapbox.com/blog/postmortem-usmnt-belgium/">&lt;p&gt;There has been much ink spilled over the USA Belgium World Cup match on Monday night:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the reinstatement of Folarin Balogun&lt;&#x2F;li&gt;
&lt;li&gt;why USA soccer development is broken&lt;&#x2F;li&gt;
&lt;li&gt;the best athletes in the USA don&#x27;t play soccer&lt;&#x2F;li&gt;
&lt;li&gt;the Belgium squad is more talented than the USA&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Regarding the above, being the best athlete is not a requirement to be a world class soccer player. Nobody looks at prime Messi and drools over the possibility of him playing basketball or American football. Endurance, speed, skill with feet, and vision are the most important attributes of any soccer player. The key problem: in the USA, all sports are played with hands and not feet. For soccer, it&#x27;s critical to learn foot skills at a young age in informal settings, which is much less common in the USA.&lt;&#x2F;p&gt;
&lt;p&gt;What hasn&#x27;t been discussed post match? An actual assessment of the match itself. Certainly there has been talk of the mentality (it was severely lacking) and the errors (they were of the clown car variety), but I have yet to see anyone address the core tactical issues that contributed to the mental frailty and errors.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;england-vs-mexico-2026-07-05&quot;&gt;England vs Mexico 2026-07-05&lt;&#x2F;h2&gt;
&lt;p&gt;It&#x27;s helpful to contrast the approach of England in their match against Mexico to the approach of the USA against Belgium. England are one of the most talented sides in the world. There is not a single USA player who would make the England squad. In fact, England is so talented that players not selected to their 26 player squad would be guaranteed starters for the USA (Cole Palmer, Morgan Gibbs-White, Phil Foden, Trent Alexander-Arnold, etc.). Mexico, on the other hand, is not as talented as the USA. TL;DR - the talent gap between England and Mexico is &lt;strong&gt;significantly&lt;&#x2F;strong&gt; wider than the gap between Belgium and the USA.&lt;&#x2F;p&gt;
&lt;p&gt;And yet, Mexico had real advantages in this match: the home fans, the home stadium (Azteca is one of the true iconic stadiums of soccer, like Wembley in England), the altitude, the weather &#x2F; humidity. Thomas Tuchel, England&#x27;s manager who&#x27;s top quality, realized he could not rely solely on his talent advantage. He set up England in a 4-4-2 out of possession, starting his 2 best defensive wingers Anthony Gordon and Bukayo Saka. He ensured Declan Rice formed a double pivot with Elliot Anderson and did not venture too far forward. He played 3 center backs as part of his back 4 to ensure a 3-2-5 formation in possession. This more cautious strategy paid off when England jumped to a 2-0 lead behind the great work of Jude Bellingham and Harry Kane (the 2 forward players). The only blemish was a goal scored by Mexico on a set piece in a dangerous area; the foul was a minor one by Saka.&lt;&#x2F;p&gt;
&lt;p&gt;England were cruising in the second half when Jarell Quansah (a center back) was sent off with a red card foul awarded by VAR. Tuchel made a quick adjustment to bolster the back line, sacrificing Saka (who has been nursing an injury) for another center back. Once Kane made it 3-1, Tuchel played for the result by bringing on more defenders. The most notable being the 6ft 7in Dan Burn, whose inclusion in the squad was questioned by some. Burn was an absolute beast clearing the numerous crosses with stunning headers.&lt;&#x2F;p&gt;
&lt;p&gt;In summary, Tuchel approached this match pragmatically by strategically setting up his squad to match the conditions and the opponent.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-tim-ream-conundrum&quot;&gt;The Tim Ream Conundrum&lt;&#x2F;h2&gt;
&lt;p&gt;In the Spring of 2022 before that World Cup, I noted in comments sections on other sites that Tim Ream would be making the World Cup roster and starting at left center back. I got nothing but push back from folks arguing that Ream was too slow, too old, not good enough, etc. At the time, Ream (who&#x27;s left footed) was:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;the captain and starting left center back for Fulham (a mid table premier league club)&lt;&#x2F;li&gt;
&lt;li&gt;playing alongside his USA teammate Antonee Robinson&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;What happened? As predicted, Ream started and played reasonably well in that World Cup. Post World Cup in 2022, Pep Guardiola told Tim Ream &quot;If you were 24 (years old) instead of 34, you&#x27;d be playing for me.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;My point being - I really like Tim Ream. But his circumstances are very different in 2026. He&#x27;s 38 (almost 39) years old and playing in MLS. He still has experience and skills, but physically he is no longer able to play at the highest levels. Mauricio Pochettino (Poch) likes Ream for good reasons and made him the captain. Because of Ream&#x27;s physical limitations, however, he can only play in a back 3 against good competition. Physically, he needs 2 other center backs playing with him to be effective.&lt;&#x2F;p&gt;
&lt;p&gt;Side story: Leeds United, who were promoted to the Premier League in 2025-26 were struggling to get results. Daniel Farke&#x27;s job was in jeopardy. At halftime of a November 2025 match against Manchester City, he switched from his preferred 4-3-3 formation to a back three. Leeds went on to have a strong second half in that match. Farke continued with the new formation, which catapulted their season and kept them comfortably in the Premier League. Leeds had a similar left center back in Pascal Struijk (albeit still physically suited for Premier League play); the formation change unlocked him in the same way Poch&#x27;s shift helped Ream.&lt;&#x2F;p&gt;
&lt;p&gt;Like Farke, Poch&#x27;s preferred formation is not 3 at the back, and to be fair it is not a popular formation. Playing a back 3 is contrary to Poch&#x27;s core principles and preferred base shape of a 4-2-3-1 (the modern formation most teams play).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;usa-matches-prior-to-belgium&quot;&gt;USA matches prior to Belgium&lt;&#x2F;h2&gt;
&lt;p&gt;During the 2026 World Cup, the USA played most of their matches against teams who wanted to defend and counter rather than possess the ball and attack. Against these opponents, it&#x27;s important to set up the squad so they can break down the opponent&#x27;s low block. Poch did this wonderfully, altering the shape and playing style as he went, which allowed the USA to comfortably win 3 out of 4 matches. The 4th match could have been won if necessary.&lt;&#x2F;p&gt;
&lt;p&gt;All 4 of these teams, however, ranked below the USA in the FIFA world rankings. Based on his post Belgium match remarks, I suspect these results gave Poch a false confidence that the USA players were better than they actually are.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;usa-vs-belgium&quot;&gt;USA vs Belgium&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;what-happened&quot;&gt;What Happened&lt;&#x2F;h3&gt;
&lt;p&gt;Belgium, while not the class they were 12 years ago (the last time these 2 teams met in the round of 16), are still a top 10 country and ranked above the USA. Rather than be pragmatic, like Tuchel, Poch continued to expand the proactive play and structure he ultimately wants. Which was a disaster and incredibly naive:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The players were not comfortable in the 4-2-3-1 (or the 4-1-2-3 shown in FotMob) that Poch employed, and it showed in their early play before Belgium scored their first goal&lt;&#x2F;li&gt;
&lt;li&gt;Tim Ream did not have the requisite cover and was repeatedly exposed, contributing to 2 of the goals allowed&lt;&#x2F;li&gt;
&lt;li&gt;The wingers (in the 3) were not providing adequate cover because neither Christian Pulisic nor Sergino Dest are defensive minded&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For the first goal, Dest was tentative and did not attack a bouncing ball in the box. The other players stood around trying to decide where they were supposed to be. And a Belgium player picked up the loose ball and fired it to his striker for a 1-0 start.&lt;&#x2F;p&gt;
&lt;p&gt;The Press and Pundits should be highly critical of Poch&#x27;s selections, substitutions, and general setup for this match. Poch has done a great job getting the USA to play modern football, but he is unwilling to shift tactics to address shortcomings when facing higher quality opponents. Playing well was paramount with an audience of 40 million watching in the USA.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;what-should-have-happened&quot;&gt;What Should Have Happened?&lt;&#x2F;h3&gt;
&lt;p&gt;I never understood why Auston Trusty and Brenden Aaronson were so out of favor. The formation that Poch used would only work with Trusty (assuming he was healthy) replacing Ream and Aaronson replacing Dest. Trusty has played 1 season in the Premier League and 2 seasons with Celtic, the top team in the Scotland Premiership. Aaronson has played multiple seasons in the Premier League, including last season when he started for Leeds. Neither would be intimidated or unaccustomed to playing against the caliber of opponent that Belgium posed. I guarantee Aaronson would not have been caught ball watching for that first goal.&lt;&#x2F;p&gt;
&lt;p&gt;If we stick with Poch&#x27;s aggressive approach and the swap of Trusty and Aaronson for Ream and Dest:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I would have structured the USA in a 4-4-2 out of possession with Pulisic joining Balogun at the top. In possession, the shape would be a 3-5-2, with Adams dropping to the right in a back 3, Malik Tillman &#x2F; Robinson on the left, Aaronson &#x2F; Alex Freeman on the right, and Weston McKennie supporting Pulisic and Balogun. While aggressive, the USA could play with more confidence knowing their defensive weaknesses (Ream, Dest, Pulisic) were removed or not exposed.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If we go to a more sensible setup (the Tuchel approach that I favor):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I would have used the successful back 3 style structured as a 3-4-3 with Ream &#x2F; Richards &#x2F; Joe Scally; Robinson &#x2F; Tillman &#x2F; Adams &#x2F; Freeman; Pulisic &#x2F; Balogun &#x2F; McKennie. This setup allows Poch to safely play Ream and sacrifices Dest for Scally. There is a reason Dest does not play professionally in a top 5 league and he should not have been selected to play against a squad with Belgium&#x27;s quality.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;For USA soccer to really progress, we need to stop worrying about the age old problems (though fixing them couldn&#x27;t hurt). We should be focusing on the gross mismanagement by Poch of a winnable match. A match where sadly the USA looked as incompetent as they did at the end of the Gregg Berhalter era (the dreadful loss to Uruguay I saw in person at Copa America).&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Chargers 2026 Roster Prediction v1</title>
          <pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/chargers-roster-1/</link>
          <guid>https://oddsoapbox.com/blog/chargers-roster-1/</guid>
          <description xml:base="https://oddsoapbox.com/blog/chargers-roster-1/">&lt;p&gt;This post constitutes my first prediction of the Chargers 2026 roster. I started making this list in my head before the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;open.spotify.com&#x2F;show&#x2F;5QzDIUJZAcjsKVuktYyrh3&quot;&gt;Guilty as Charged Podcast&lt;&#x2F;a&gt; covered the topic on their show. If you are a Chargers fan, I highly recommend giving them a listen.&lt;&#x2F;p&gt;
&lt;p&gt;Notes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The positions listed are directly from the Chargers website&lt;&#x2F;li&gt;
&lt;li&gt;I made my list before listening to the podcast; we wound up agreeing on 51 of 53 players&lt;&#x2F;li&gt;
&lt;li&gt;I assume anyone drafted in 2026 above the 6th round will make the roster; the precedent is Eboigbe and Kennard, who both remained on the roster their rookie seasons even though neither really played; the bet on Eboigbe paid off in 2025; the hope is Kennard does something similar in 2026&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;locks-43&quot;&gt;Locks (43)&lt;&#x2F;h2&gt;
&lt;p&gt;I started this list with Special Teams, because most lists end with them and I wanted to give this group some love. Harris and Dicker have been fantastic and deserve shout outs. Deane Leonard is a beast and ideally would be the lone special teams only player on the roster.&lt;&#x2F;p&gt;
&lt;p&gt;In my opinion, the Chargers have kept too many special teams only players in recent years, which has hurt them when the inevitable injuries arise. The 2 slots I have different from Guilty as Charged are a direct result of this philosophy. They kept Darius Davis and Kendall Williamson as 2 additional special teams only players. I choose Dalevon Campbell (over Jaret Patterson) and Nadame Tucker.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;special-teams-4&quot;&gt;Special Teams (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LS: Josh Harris, P: JK Scott, K: Cameron Dicker, DB: Deane Leonard&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;defensive-line-8&quot;&gt;Defensive Line (8)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;DL: Nick Barrett, Jamaree Caldwell, Justin Eboigbe, Teair Tart, Dalvin Tomlinson&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Khalil Mack, Akheem Mesidor, Tuli Tuipulotu&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;linebacker-4&quot;&gt;Linebacker (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;LB: Troy Dye, Daiyan Henley, Denzel Perryman, Del&#x27;Shawn Phillips&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;defensive-back-6&quot;&gt;Defensive Back (6)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CB: Cam Hart, Donte Jackson, Tarheeb Still&lt;&#x2F;li&gt;
&lt;li&gt;DB: Elijah Molden&lt;&#x2F;li&gt;
&lt;li&gt;S: Derwin James Jr., Genesis Smith&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;offensive-line-8&quot;&gt;Offensive Line (8)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;C: Tyler Biadasz&lt;&#x2F;li&gt;
&lt;li&gt;OL: Jake Slaughter&lt;&#x2F;li&gt;
&lt;li&gt;G: Kayode Awosika, Cole Strange&lt;&#x2F;li&gt;
&lt;li&gt;T: Joe Alt, Travis Burke, Trey Pipkins III, Rashawn Slater&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;tight-end-3&quot;&gt;Tight End (3)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;TE: Oronde Gadsden II, Charlie Kolar, David Njoku&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;running-back-4&quot;&gt;Running Back (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;FB: Alec Ingold&lt;&#x2F;li&gt;
&lt;li&gt;RB: Omarion Hampton, Keaton Mitchell, Kimani Vidal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;wide-receiver-4&quot;&gt;Wide Receiver (4)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;WR: Tre&#x27; Harris, Quentin Johnston, Ladd McConkey, Brenen Thompson&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;quarterback-2&quot;&gt;Quarterback (2)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;QB: Justin Herbert, Trey Lance&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;injured-list-practice-squad&quot;&gt;Injured List &#x2F; Practice Squad&lt;&#x2F;h3&gt;
&lt;p&gt;QB - DJ Uiagalelei
T - Isaiah World&lt;&#x2F;p&gt;
&lt;h2 id=&quot;in-the-mix&quot;&gt;In the Mix&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;defense-6-of-9-selected&quot;&gt;Defense (6 of 9 selected)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CB: &lt;strong&gt;Nikko Reed&lt;&#x2F;strong&gt;, Eric Rogers, some 2026 UDFA&lt;&#x2F;li&gt;
&lt;li&gt;LB: &lt;strong&gt;Marlowe Wax&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;OLB: Bud Dupree, &lt;strong&gt;Kyle Kennard&lt;&#x2F;strong&gt;, &lt;strong&gt;Nadame Tucker&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;S: &lt;strong&gt;Tony Jefferson&lt;&#x2F;strong&gt;, &lt;strong&gt;RJ Mickens&lt;&#x2F;strong&gt;, Kendall Williamson, some 2026 UDFA&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;offense-4-of-6-selected&quot;&gt;Offense (4 of 6 selected)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;G: &lt;strong&gt;Logan Taylor&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;OL: &lt;strong&gt;Trevor Penning&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;RB: Jaret Patterson&lt;&#x2F;li&gt;
&lt;li&gt;WR: &lt;strong&gt;Dalevon Campbell&lt;&#x2F;strong&gt;, Derius Davis, &lt;strong&gt;KeAndre Lambert-Smith&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;other-fringe-players-0-of-4-selected&quot;&gt;Other Fringe Players (0 of 4 selected)&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;FB&#x2F;DL: Scott Matlock&lt;&#x2F;li&gt;
&lt;li&gt;G: Alex Harkey, Branson Taylor&lt;&#x2F;li&gt;
&lt;li&gt;LB: Junior Colson&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;final-roster-position-count&quot;&gt;Final Roster Position Count&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Special Teams (4)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Line (10)&lt;&#x2F;li&gt;
&lt;li&gt;Linebacker (5)&lt;&#x2F;li&gt;
&lt;li&gt;Defensive Back (9)&lt;&#x2F;li&gt;
&lt;li&gt;Offensive Line (10)&lt;&#x2F;li&gt;
&lt;li&gt;Tight End (3)&lt;&#x2F;li&gt;
&lt;li&gt;Running Back (4)&lt;&#x2F;li&gt;
&lt;li&gt;Wide Receiver (6)&lt;&#x2F;li&gt;
&lt;li&gt;Quarterback (2)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;&#x2F;h2&gt;
&lt;p&gt;I was surprised that 43 out of the 53 spots are clear locks, as I expected the roster to be a bit more fluid. Practically, 6 of the remaining 10 slots are close to locks (Wax, Jefferson, Mickens, Penning, Taylor, KLS). The real competition is for:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;4th corner spot&lt;&#x2F;li&gt;
&lt;li&gt;2 other defensive players (or special teams only)&lt;&#x2F;li&gt;
&lt;li&gt;1 offensive skill player (or special teams only)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I look forward to training camp and the preseason to see how these battles shake out.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>USA Soccer Ode to Backups</title>
          <pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/usmnt-ode-to-backups/</link>
          <guid>https://oddsoapbox.com/blog/usmnt-ode-to-backups/</guid>
          <description xml:base="https://oddsoapbox.com/blog/usmnt-ode-to-backups/">&lt;p&gt;I have watched soccer for almost 40 years. I started watching in college, primarily because it was the one sport my university was good at.&lt;&#x2F;p&gt;
&lt;p&gt;In recent times, I had the good fortune to see Aston Villa play Newcastle at Villa Park in November 2019 and became hooked. I am now one of those crazy West Coast USA Premier League fans who will rise at 4:30am on a Saturday to watch Villa play. I&#x27;ve been fortunate: Villa have been on a magic carpet ride since I&#x27;ve started following them and they are a joy to watch.&lt;&#x2F;p&gt;
&lt;p&gt;So, while I am not a pundit or an expert, I am not a casual soccer fan either.&lt;&#x2F;p&gt;
&lt;p&gt;And I simply cannot understand most of the media reaction to the USA &#x2F; Türkiye match. It was a dead rubber match where Poch wisely elected to rotate the squad using 10 backups plus Weston McKennie. McKennie played because Poch only selected 4 midfielders and wound up a player short when Christian Roldan was unavailable. The USA did lose 3-2, but outplayed Türkiye for much of the match and lost on the last touch of the game.&lt;&#x2F;p&gt;
&lt;p&gt;For the casual fan, I think Colin Cowherd &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;TheHerd&#x2F;status&#x2F;2070551213129482665&quot;&gt;explains it the best&lt;&#x2F;a&gt;. A team of backups played a first choice Türkiye side, almost drew, and probably should have won. They played on the front foot and were energetic throughout. With a few exceptions, most players played well. Poch got to experiment with his third formation of the tournament (3-4-3 game 1, 3-5-2 game 2, 4-2-3-1 game 3) and it worked reasonably well. To Cowherd&#x27;s point, everyone should know the weakness of this team is its center backs, and it showed on all 3 goals allowed. It&#x27;s why Chris Richards is the most important player for the USA in 2026.&lt;&#x2F;p&gt;
&lt;p&gt;I see many comments about Brenden Aaronson playing poorly. I won&#x27;t lie, I have a soft spot for Aaronson and watch most Leeds matches too. Aaronson has significantly improved in the last few years and was a starter for Leeds throughout the 2025-26 season. His one current weakness: he is not clinical in front of goal. Sadly, that showed up twice in the match (including 1 big chance missed). Aaronson did complete 21&#x2F;21 passes, had the most touches in the opponent&#x27;s box, created many corners, and generally defended well. His stats are arguably better than Reyna and I thought he played better than Reyna, who is getting no flak online. My point is not that Reyna should be criticized (he shouldn&#x27;t), but that seeing Aaronson miss 2 chances does not make him terrible. Ask anyone who is a fan of Ollie Watkins.&lt;&#x2F;p&gt;
&lt;p&gt;I see comments questioning the depth of the USA team. In other versions of this competition, save for perhaps 2002, a USA team of backups against a competent side would not have been competitive. The whole point of this &quot;golden generation&quot; is not the top end talent but the depth of talent. There are no Edson Buddle, Ricardo Clark, Kyle Beckerman quality players starting (let alone playing significant minutes) in 2026. USA Türkiye was a showcase of this depth, and the USA are one of the deepest teams outside of the true contenders (re: Spain, France, Germany, England, Argentina, Brazil, . . .).&lt;&#x2F;p&gt;
&lt;p&gt;I also see comments about rotating a squad and losing momentum. I&#x27;d like to say this is ignorance, but it&#x27;s also coming from pundits on TV. Though some have said those pundits are ignorant (here&#x27;s looking at you Zlatan). A few real points:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;The club seasons are long and for most of these players, the competition comes right after the end of their seasons. Soccer is like football, where it&#x27;s best for players to play no more than once a week and where rest is useful. Missing one game is not a problem and is likely beneficial&lt;&#x2F;li&gt;
&lt;li&gt;Losing a player for a knockout round due to yellow card accumulation is stupid. Particularly when 2 of the 4 players are irreplaceable (Adams and Richards) and the other 2 are critical players (Robinson and Balogun). It was clearly the correct call for none of these 4 to play.&lt;&#x2F;li&gt;
&lt;li&gt;Letting the backups play gives them much needed game action and gets them tuned up for future matches. Also, it continues the mentality of &quot;one roster&quot; and &quot;next man up&quot; while rewarding players who are likely working hard in practice but have limitations (which is why they are backups).&lt;&#x2F;li&gt;
&lt;li&gt;Momentum should not be an issue. These are professionals who are very well coached and should be mentally ready. I watched a heavily rotated Villa side play poorly and lose to a near relegated Spurs side toward the end of last season. The impact? Villa proceeded to win the Europa League and got six points off Liverpool and Manchester City in their last three matches.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;I enjoyed the USA &#x2F; Türkiye match, I thought overall the backups played well, and I am excited for the knockout stages. I think Poch&#x27;s reaction in the post game press conference was spot on: let&#x27;s celebrate winning the group and getting ready for the next challenge Wednesday night. And if I am wrong - well, it&#x27;s here in writing.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Modeling Temporal Data - Background (Part 1)</title>
          <pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/temporal-data-1/</link>
          <guid>https://oddsoapbox.com/blog/temporal-data-1/</guid>
          <description xml:base="https://oddsoapbox.com/blog/temporal-data-1/">&lt;p&gt;This blog series contains my thoughts on how to model &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#temporal-data&quot;&gt;&lt;strong&gt;temporal data&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. This initial entry provides the background by (1) defining what temporal data is, (2) explaining when it&#x27;s needed, and (3) uncovering the challenges with implementing it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;standard-situation&quot;&gt;Standard Situation&lt;&#x2F;h2&gt;
&lt;p&gt;Most data models just store data representing the current &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#state&quot;&gt;&lt;strong&gt;state&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; of the system. In most &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#domain&quot;&gt;&lt;strong&gt;domains&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;, only knowing the current state is fine because very few &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#attribute&quot;&gt;&lt;strong&gt;attributes&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; are updated. In other words, most of the individual &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#data-point&quot;&gt;&lt;strong&gt;data points&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; are written via inserts versus updates.&lt;&#x2F;p&gt;
&lt;p&gt;Those few attributes that change organically are referred to as slowly changing dimensions. Examples include full name, mailing address, account status, and account tier. While knowing the value of these attributes at any point in time might be beneficial, the complexity of adding temporality to a data model usually outweighs the benefit. Do you really need to know that the customer&#x27;s name was Joan Smith when shipment A was sent two years ago, versus the current value of Joan Adams? Probably not.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;when-do-we-need-temporal-data&quot;&gt;When Do We Need Temporal Data?&lt;&#x2F;h2&gt;
&lt;p&gt;Temporal data is needed when the domain:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;has many attributes that are updated, and&lt;&#x2F;li&gt;
&lt;li&gt;knowing state at any point in time is required to support standard business processes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I will be focusing on property and casualty (i.e. general) insurance since that domain is my expertise. In my experience over 30+ years, most insurance systems (both core insurance applications and analytics platforms) rely on the Standard Situation approach. While simpler to model and maintain, it leaves behind critical temporal information that is needed to run and evaluate the business.&lt;&#x2F;p&gt;
&lt;p&gt;As an example, let&#x27;s consider an insurance policy. A policy is the contract between an insurance company and an insured (purchaser of policy) that indemnifies the insured for financial loss caused by covered perils &#x2F; events related to specific covered people and assets. There are many attributes that can change over time for a policy, such as (1) coverage limits, (2) coverage deductibles, (3) what assets are covered, (4) who is covered, etc. A specific policy change example: a family member begins attending college and is eligible for the Student Away at School discount.&lt;&#x2F;p&gt;
&lt;p&gt;Insurance policies are not limited to a few slowly changing dimensions; significant parts of a policy&#x27;s state can change during the life of the policy. Insurance systems need to know the exact state of a policy at various points in time to (1) provide the exact coverage that was in force at the time a claim occurred, (2) provide accurate financial reporting as of fixed accounting dates, (3) provide accurate analytical data as of fixed evaluation dates, etc. If only the current state is available, it is not possible to time travel the data for these use cases.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;temporal-modeling-option-bitemporal&quot;&gt;Temporal Modeling Option: Bitemporal&lt;&#x2F;h2&gt;
&lt;p&gt;I recommend reading this entry from Martin Fowler on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;articles&#x2F;bitemporal-history.html&quot;&gt;bitemporal history&lt;&#x2F;a&gt;. The key concept is temporal data has 2 time dimensions: (1) when something is valid in &quot;real life&quot; (&lt;strong&gt;actual history&lt;&#x2F;strong&gt;), and (2) when the database knows that something in &quot;real life&quot; is valid (&lt;strong&gt;record history&lt;&#x2F;strong&gt;). Insurance data is rife with retroactive changes, thus necessitating bitemporal vs unitemporal data. For example, a policy change that is effective on July 1st might not be entered into the database until August 1st. We would need to know that the policy as of July 1st looked different on July 15th versus on August 15th.&lt;&#x2F;p&gt;
&lt;p&gt;Bitemporal data models are very complex and have uneven support in standard SQL databases. Specialized databases exist but are very niche. When selecting a database, I always follow the herd and choose one of the popular options.&lt;&#x2F;p&gt;
&lt;p&gt;Which leads to another alternative: event sourcing.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;temporal-modeling-option-event-sourcing&quot;&gt;Temporal Modeling Option: Event Sourcing&lt;&#x2F;h2&gt;
&lt;p&gt;I recommend reading this entry from Martin Fowler on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;eaaDev&#x2F;EventSourcing.html&quot;&gt;event sourcing&lt;&#x2F;a&gt;. Much more has been written about event sourcing and I encourage anyone to fall down that rabbit hole. Another more in-depth entry can be found in this presentation from Martin Kleppmann about &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.confluent.io&#x2F;blog&#x2F;turning-the-database-inside-out-with-apache-samza&#x2F;&quot;&gt;turning the database inside out&lt;&#x2F;a&gt;. The core idea is not to store state, but to store both the events that modify state and the resulting alterations to state. Point in time state is then derived by replaying the events up to the desired point in time.&lt;&#x2F;p&gt;
&lt;p&gt;Event sourcing suffers from the same issues as bitemporal data models: it&#x27;s very complex, not well supported in standard SQL databases, and specialized databases exist but are niche. When using a standard SQL database, the method must be hand-rolled onto the database and manually maintained (or find an extension that implements the tooling).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;temporal-modeling-option-data-vault-2-0-dv2&quot;&gt;Temporal Modeling Option: Data Vault 2.0 (DV2)&lt;&#x2F;h2&gt;
&lt;p&gt;This modeling technique is used for downstream use cases (e.g. operational or analytic data stores) rather than as a core backend system data model. The primary use case for DV2 tends to be as an integration layer for combining data from many (10+) different systems. Another key DV2 use case, however, is storing temporal data in downstream systems.&lt;&#x2F;p&gt;
&lt;p&gt;Learning more about DV2 is another big rabbit hole. While free content exists, the most authoritative content sits behind various paywalls (books and training). Based on my review of what&#x27;s available, I would recommend the book &quot;The Elephant in the Fridge&quot; by John Giles. I believe it provides the best balance of simplicity and thoroughness.&lt;&#x2F;p&gt;
&lt;p&gt;Ten years ago I conceived of a temporal analytic data model that, as it turned out, was similar to the temporal concepts in DV2. Instead of a single table for a business object or concept, the DV2 data table is parsed into 3 tables:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;a primary key table with only a few immutable attributes&lt;&#x2F;li&gt;
&lt;li&gt;a satellite table with all of the remaining attributes, linked by the primary key&lt;&#x2F;li&gt;
&lt;li&gt;a link table that connects primary key tables (concepts) together&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Both the satellite table and the link table are versioned either unitemporal (&lt;strong&gt;record history&lt;&#x2F;strong&gt; only) or bitemporal (via Effectivity Satellites).&lt;&#x2F;p&gt;
&lt;p&gt;The two main DV2 concepts that will be explored in future posts in this series:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the concept of storing the entire record at each possible set of attribute values; unlike event sourcing, which requires you to replay the history to get state at a selected point in time, DV2 only needs a specialized query to pull the desired state&lt;&#x2F;li&gt;
&lt;li&gt;the concept of versioned link tables to connect objects &#x2F; concepts rather than embedded foreign keys&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;definitions&quot;&gt;Definitions&lt;&#x2F;h2&gt;
&lt;p&gt;While blog posts are usually handwritten by me, this definitions section is an exception. These definitions include direct assistance from GenAI robots.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;attribute&quot;&gt;Attribute&lt;&#x2F;h3&gt;
&lt;p&gt;A descriptive (non-key) column in a table that is a property of an object. Each row stores one &lt;a href=&quot;https:&#x2F;&#x2F;oddsoapbox.com&#x2F;blog&#x2F;temporal-data-1&#x2F;#data-point&quot;&gt;&lt;strong&gt;data point&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; for that attribute.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;data-point&quot;&gt;Data Point&lt;&#x2F;h3&gt;
&lt;p&gt;The single value located at the intersection of a specific column and row in a table. If the table were a spreadsheet, the data point would be the value of a single cell, like $A$1.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;domain&quot;&gt;Domain&lt;&#x2F;h3&gt;
&lt;p&gt;The specific industry, subject area, or real-world problem a software application is built to model and solve.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;state&quot;&gt;State&lt;&#x2F;h3&gt;
&lt;p&gt;The snapshot of a system&#x27;s database values at a single moment in time. The &lt;em&gt;current state&lt;&#x2F;em&gt; is that snapshot taken at the present moment.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;temporal-data&quot;&gt;Temporal Data&lt;&#x2F;h3&gt;
&lt;p&gt;Data that records the history of how an attribute value changes over time. The data is modeled so you can see a snapshot of the entire system as it existed at any point in time. In other words, temporal data is data that you can readily time travel. For more details, see &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;martinfowler.com&#x2F;eaaDev&#x2F;timeNarrative.html&quot;&gt;temporal patterns&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The End of Language Wars?</title>
          <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/language-wars/</link>
          <guid>https://oddsoapbox.com/blog/language-wars/</guid>
          <description xml:base="https://oddsoapbox.com/blog/language-wars/">&lt;p&gt;I remember not too long ago the many debates over which language to use for data &#x2F; analytics - R or Python? There were many passionate arguments for why you should choose one over the other. Today, that dust has largely settled. R is more niche and is used for statistical analysis and by those who love the language. Python is used for general programming, machine learning, data manipulation, etc. Python became the glue and the one language that is just about universally supported in the data &#x2F; analytics space.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-impact-of-genai&quot;&gt;The Impact of GenAI&lt;&#x2F;h2&gt;
&lt;p&gt;I have been using GenAI (primarily Claude Code) to build multiple applications for about 9 months. One key takeaway that emerged is the GenAI tool (Robot) works best when it understands specifically how you want to implement something. It&#x27;s great at coloring by numbers once you&#x27;ve drawn the picture. Or filling in the details once you&#x27;ve laid the foundation and put up the framing. It&#x27;s less capable when given a blank sheet of paper.&lt;&#x2F;p&gt;
&lt;p&gt;How does this impact languages? Those languages that are highly opinionated are better suited for GenAI than those that have many options for accomplishing the same thing. I learned this firsthand when building templated HTML in TypeScript. The Robot&#x27;s first iteration was to create highly complex HTML strings, complete with CSS and scripts, directly in the TypeScript files. The Robot&#x27;s second iteration, with some steering from me, was to use separate HTML files that accepted templated inputs. I figured something was up when packages like Handlebars and Mustache appeared to be inactive (late 2025 timeframe). Which was when I realized the correct answer was TSX files, which embeds templated HTML directly in TypeScript files.&lt;&#x2F;p&gt;
&lt;p&gt;I am relatively new to building TypeScript applications. A seasoned user would likely have told the Robot to build directly in TSX files, skipping the other iterations. That said, even after the pattern was established, the Robot would occasionally build HTML text strings in the TypeScript files or assume I was using React because TSX = React. It took great effort to keep the Robot on track and follow the design patterns I had established within the application.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-end-of-bikeshedding&quot;&gt;The End of Bikeshedding&lt;&#x2F;h2&gt;
&lt;p&gt;I only recently learned this term, but in the GenAI world it becomes very important. For example, most of us are opinionated about how our code is formatted, but if we all agree on a single formatting standard that is &quot;good enough&quot; our lives become easier. The same is even more true for the Robots. We should stop debating minor issues and focus on creating standardized solutions to common problems. The more we can agree on singular good enough design patterns &#x2F; recipes, the better the Robots will perform. If I want to do X in language Y, then have one way to do it and have the Robot fill in the details.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-language-then&quot;&gt;What Language Then?&lt;&#x2F;h2&gt;
&lt;p&gt;JavaScript, with its numerous frameworks and flavors of the year, might be the worst at solving this problem. Ruby on Rails is gaining new traction due to its rigidity on how to do things. But the language many are reaching for is Go. These 2 posts present the argument in favor of Go and are worth the read: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jry.io&#x2F;writing&#x2F;use-boring-languages-with-llms&#x2F;&quot;&gt;Use Boring Languages&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blainsmith.com&#x2F;articles&#x2F;just-fucking-use-go&#x2F;&quot;&gt;Just Use Go&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I primarily used Python and SQL over the last 12 years since my focus has been on data engineering through data analytics. I do like TypeScript and wish it was more widely used in the data space. While I have not used Go, I intend to try it in my next project. Perhaps Go, with its simplicity and versatility, can be the language that&#x27;s just &quot;good enough&quot; for most of us.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>My Linux Journey</title>
          <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://oddsoapbox.com/blog/my-linux-journey/</link>
          <guid>https://oddsoapbox.com/blog/my-linux-journey/</guid>
          <description xml:base="https://oddsoapbox.com/blog/my-linux-journey/">&lt;p&gt;As a user of Linux off and on for about 10 years, I wanted to share my experiences with various Linux distros (types of Linux). Linux comes in so many flavors &#x2F; configurations that it&#x27;s hard for a beginner to know where to start. After traversing some of the landscape, I have a few suggestions.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;early-days-virtual-machines-vms&quot;&gt;Early Days - Virtual Machines (VMs)&lt;&#x2F;h2&gt;
&lt;p&gt;I started using Linux in earnest about 10 years ago. It began when I needed an operating system for virtual machines in Hyper-V (Windows), Amazon Web Services (AWS), and Parallels (Mac). I started reaching for Linux when I realized it was easier to use and manage than Windows Server.&lt;&#x2F;p&gt;
&lt;p&gt;CentOS was my goto distro initially since it was based on Red Hat Enterprise Linux, one of the primary commercial Linux distros. Unfortunately, CentOS is no longer supported and other Red Hat based distros have risen in its place like Rocky Linux.&lt;&#x2F;p&gt;
&lt;p&gt;Since my next experience with Linux VMs was on AWS, I elected to try Ubuntu. Ubuntu seemed to be widely supported on AWS and is one of the most popular Linux distros. While Ubuntu is fine, on AWS I preferred AWS Linux. AWS Linux had its origins in CentOS &#x2F; Red Hat but is now more independently built. It comes with &quot;batteries included&quot; specifically tailored for AWS.&lt;&#x2F;p&gt;
&lt;p&gt;My most recent experience was running a Debian VM in Parallels on a MacBook Pro. Ubuntu is based on Debian, so Debian is the true base distro. I found Debian easy to use and had no issues.&lt;&#x2F;p&gt;
&lt;p&gt;Because these were all virtual machine setups, I often did not have a Linux desktop. The user interface (UI) was a terminal prompt. I would connect to the machines with SSH and execute commands &quot;remotely&quot; via a terminal. At first blush it seemed odd, but it works surprisingly well and eliminating the desktop saves resources on the virtual machine.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;&#x2F;strong&gt; For server &#x2F; VM based Linux, I would choose AWS Linux if on AWS or Debian otherwise.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;desktops-on-obsolete-hardware&quot;&gt;Desktops on Obsolete Hardware&lt;&#x2F;h2&gt;
&lt;p&gt;I have a few older machines (10+ years) that are no longer eligible to run the current version of the factory installed operating system.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2015 Thinkpad P50s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Intel Core i7-6600U @ 3.4 GHz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NVIDIA Quadro K620M &#x2F; Quadro M500M&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;24 GB RAM&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Not upgradable to Windows 11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2015 MacBook Pro&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Intel Core i5-5257U @ 2.7 GHz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Integrated Iris Graphics 6100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;8 GB RAM&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Not upgradable to current macOS Tahoe&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rather than throw these machines in the trash bin, I decided to convert them to Linux laptops instead. One thing to keep in mind - Linux desktops (GUI) can be separate from the underlying base Linux. Popular base Linux distros include Debian &#x2F; Ubuntu, Fedora, Arch, NixOS, and openSUSE. I have only tried the first 4 bases. Popular Linux desktops include GNOME, KDE Plasma, XFCE, and Cinnamon.&lt;&#x2F;p&gt;
&lt;p&gt;I tried a few distros which I will discuss below. I did not review the most popular derivative distro, Linux Mint, because I had tried it already many years ago and wanted to look at other distros. You many want to give Linux Mint a spin, though my initial trial did not have me wanting to come back to it.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Zorin OS&lt;&#x2F;strong&gt; This derivative distro, like &lt;code&gt;elementary OS&lt;&#x2F;code&gt;, is designed to be a &quot;gateway&quot; Linux flavor for users coming from Windows or macOS. These create unified experiences by using their own modified desktops and features on top of Ubuntu. For example, Zorin has built in OneDrive compatibility that shows OneDrive directly in the Zorin File Manager, just like Windows. For most people who only want to breathe new life into an existing machine, Zorin or elemenatry are excellent choices.&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, I found that not all hardware is compatible with Ubuntu. I tried 2 different Ubuntu flavors on my Thinkpad and could not get the sleep feature to work correctly after hours of configuration changes. Particularly for older hardware, keep in mind that your base distro might choose you!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Fedora with KDE Plasma&lt;&#x2F;strong&gt; This base distro, like CentOS, also comes primarily from Red Hat. It is the upstream distro from Red Hat Enterprise Linux and is the testing ground for new features. As such, Fedora is updated frequently and has major releases every 6 months. Fedora combines the mix of stability and cutting edge.&lt;&#x2F;p&gt;
&lt;p&gt;Fedora can be used with many different desktops. I chose KDE Plasma desktop for my first setup because it is feature rich and quite popular. While I enjoyed using KDE Plasma, over time it felt almost too busy and made me appreciate Zorin&#x27;s more straightforward approach.&lt;&#x2F;p&gt;
&lt;p&gt;I also had trouble updating Snap (an &quot;app store&quot;) and my Snap applications. I think this was user error as I should have been using Flatpak (another &quot;app store&quot;). Yet another reminder that Linux is not as user friendly as Windows or macOS. Fortunately, GenAI searches are very helpful with troubleshooting Linux issues.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;KDE neon&lt;&#x2F;strong&gt; This derivative distro uses the KDE Plasma desktop with Ubuntu and is made by the KDE team. If you want KDE with Ubuntu, this is the distro to choose.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Omarchy&lt;&#x2F;strong&gt; This derivative distro is created by DHH, the creator of Ruby on Rails and co-owner of 37signals (Basecamp). It takes Arch Linux and adds an opinionated mix of preloaded software, keyboard shortcuts, and window tiling. If you are keyboard warrior, which I was 10 years ago, this might be the way. I still have this installed on my Thinkpad and there are many aspects that I love. One downside, though, is the sheer amount of preloaded software and that the GUI can change on a whim. For example, my screen saver and computer lock timeout timing got changed with an operating system &quot;update&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;If you like the idea of unrefined but configurable Linux along with rolling OS releases, Arch is for you. That said, I might cherry pick the best of DHH&#x27;s Omarchy config and build your own Arch setup. Note that is much easier said than done.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Pop!_os&lt;&#x2F;strong&gt; This distro uses the Cosmic desktop with Ubuntu. Pop!_os was created by system76, a manufacturer building Linux desktops and laptops. Naturally, they wanted their own flavor of Linux to preinstall and devised Pop!_os. I found this distro when I was testing my Thinkpad sleep problem and learned that yes, it was Ubuntu causing my problems.&lt;&#x2F;p&gt;
&lt;p&gt;I absolutely love the Cosmic desktop. It is a new clean desktop like Zorin but it can be used with a variety of base distros. My current MacBook setup is Cosmic on Fedora, which I have been using for 1 month and is the machine I used to write this post.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;&#x2F;strong&gt; For laptops running Linux, I would choose Pop!_os or Cosmic + Fedora. If you want something that just works out of the box without thought, Zorin or elementary OS are a good choices. If you are looking to have some fun and learn about Arch, Omarchy is a great place to start.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;don-t-give-up-on-old-hardware&quot;&gt;Don&#x27;t Give Up on Old Hardware&lt;&#x2F;h2&gt;
&lt;p&gt;If messing around with computers sounds like fun, I highly recommend Linux. It&#x27;s probably the contrarian in me, but I really enjoy my Linux devices. I don&#x27;t think I will ever use Windows again on a new machine - the only real reason to use Windows now is if desktop Excel is a daily driver for you. MacOS is still appealing because Mac hardware and silicon is excellent, though Intel is finally catching up. If you have an old machine lying around that you can test on and &quot;break&quot;, don&#x27;t throw it away, try Linux. You might just get hooked.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;update-june-21-2026&quot;&gt;Update June 21, 2026&lt;&#x2F;h2&gt;
&lt;p&gt;I have been using my current MacBook setup (COSMIC + Fedora) for over a month as my daily driver. Outside of a wifi driver issue due to old hardware compatibility problems, I love it! I will update my Linux journey again in the future, but as of now the next machine I purchase will definitely be Linux with COSMIC.&lt;&#x2F;p&gt;
&lt;p&gt;Microsoft recently announce Azure Linux 4.0 which is Fedora based. You can run this version of Linux on both Azure VMs and on the Windows Subsystem for Linux (WSL). While I haven&#x27;t tried Azure Linux 4.0, I suspect my recommendation above would change to:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;&#x2F;strong&gt; For server &#x2F; VM based Linux, I would choose AWS Linux if on AWS, Azure Linux 4.0 if on Azure, or Debian otherwise.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</description>
      </item>
    </channel>
</rss>
