<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mark</title>
    <description>The latest articles on Forem by Mark (@mark_b5f4ffdd8e7cd58).</description>
    <link>https://forem.com/mark_b5f4ffdd8e7cd58</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3911889%2F1a12ec5a-45e3-424e-ac9b-770cb7c80938.png</url>
      <title>Forem: Mark</title>
      <link>https://forem.com/mark_b5f4ffdd8e7cd58</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mark_b5f4ffdd8e7cd58"/>
    <language>en</language>
    <item>
      <title>Building a shift schedule generator taught me that scheduling is harder than it looks</title>
      <dc:creator>Mark</dc:creator>
      <pubDate>Sat, 09 May 2026 14:15:20 +0000</pubDate>
      <link>https://forem.com/mark_b5f4ffdd8e7cd58/building-a-shift-schedule-generator-taught-me-that-scheduling-is-harder-than-it-looks-5hh6</link>
      <guid>https://forem.com/mark_b5f4ffdd8e7cd58/building-a-shift-schedule-generator-taught-me-that-scheduling-is-harder-than-it-looks-5hh6</guid>
      <description>&lt;p&gt;I recently built a small tool called &lt;strong&gt;Shift Schedule Maker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At first, I thought shift scheduling would be a fairly straightforward problem.&lt;/p&gt;

&lt;p&gt;You have employees.&lt;br&gt;
You have shifts.&lt;br&gt;
You assign people to shifts.&lt;/p&gt;

&lt;p&gt;That sounds like a simple table.&lt;/p&gt;

&lt;p&gt;But once I started building it, I realized scheduling is less like filling out a calendar and more like solving a constraint problem.&lt;/p&gt;

&lt;p&gt;A valid schedule is not necessarily a good schedule.&lt;/p&gt;

&lt;p&gt;For example, the system has to think about things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does every shift have enough people?&lt;/li&gt;
&lt;li&gt;Is anyone assigned to two overlapping shifts?&lt;/li&gt;
&lt;li&gt;Is someone working too many days in a row?&lt;/li&gt;
&lt;li&gt;Are night shifts distributed fairly?&lt;/li&gt;
&lt;li&gt;Are weekends always falling on the same person?&lt;/li&gt;
&lt;li&gt;What happens when one person is unavailable?&lt;/li&gt;
&lt;li&gt;Can the schedule still work if the team size is small?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tricky part is that these rules often conflict with each other.&lt;/p&gt;

&lt;p&gt;You might want perfect fairness, but still need full coverage.&lt;br&gt;
You might want to respect everyone’s availability, but only have a limited number of people.&lt;br&gt;
You might want a simple repeating pattern, but real-life exceptions break the pattern very quickly.&lt;/p&gt;

&lt;p&gt;That made me think about scheduling differently.&lt;/p&gt;

&lt;p&gt;Instead of treating it as a calendar UI problem, I started treating it as a constraint-solving problem.&lt;/p&gt;

&lt;p&gt;Each shift becomes a slot that needs to be filled.&lt;br&gt;
Each employee has limits, availability, and workload history.&lt;br&gt;
Each rule adds pressure to the system.&lt;/p&gt;

&lt;p&gt;Some rules are hard constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A person cannot work two shifts at the same time.&lt;/li&gt;
&lt;li&gt;A shift cannot be left uncovered.&lt;/li&gt;
&lt;li&gt;An unavailable employee should not be assigned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other rules are softer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try to balance total working hours.&lt;/li&gt;
&lt;li&gt;Try to distribute unpopular shifts.&lt;/li&gt;
&lt;li&gt;Try to avoid too many consecutive workdays.&lt;/li&gt;
&lt;li&gt;Try to keep the result understandable for a human manager.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last part is easy to underestimate.&lt;/p&gt;

&lt;p&gt;A schedule can be mathematically valid and still feel wrong.&lt;/p&gt;

&lt;p&gt;For example, if one person gets all the night shifts, the algorithm might still satisfy coverage. But from a team perspective, the result is bad. So the goal is not just “generate something that works.” The goal is to generate something that feels reasonable.&lt;/p&gt;

&lt;p&gt;Another challenge was templates.&lt;/p&gt;

&lt;p&gt;Many industries already use known rotation patterns, like 12-hour shifts, 4-on/2-off, Pitman-style schedules, or 2-2-3 rotations. These patterns are useful because they give structure. But once you add employee availability or custom rules, the template becomes only the starting point.&lt;/p&gt;

&lt;p&gt;So the product became a mix of two ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with common scheduling patterns.&lt;/li&gt;
&lt;li&gt;Adjust the actual result based on constraints and fairness rules.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’m still improving the logic, especially around edge cases where the input is technically possible but very tight.&lt;/p&gt;

&lt;p&gt;For example, if there are too few employees for too many required shifts, the system should not simply fail. It should explain what is making the schedule difficult.&lt;/p&gt;

&lt;p&gt;That is probably the most interesting part of the project so far: not just generating the schedule, but helping people understand why a schedule is hard to generate.&lt;/p&gt;

&lt;p&gt;I made the tool public here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shiftschedulemaker.net/" rel="noopener noreferrer"&gt;https://shiftschedulemaker.net/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is still evolving, but building it has made me appreciate how much hidden complexity exists behind something as ordinary as a weekly shift calendar.&lt;/p&gt;

&lt;p&gt;Curious if anyone here has worked on scheduling, constraint solving, workforce planning, or optimization problems.&lt;/p&gt;

&lt;p&gt;How would you approach fairness in a scheduling system?&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>showdev</category>
      <category>sideprojects</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>I built a World Cup 2026 bracket predictor for the new 48-team format</title>
      <dc:creator>Mark</dc:creator>
      <pubDate>Thu, 07 May 2026 13:14:25 +0000</pubDate>
      <link>https://forem.com/mark_b5f4ffdd8e7cd58/i-built-a-world-cup-2026-bracket-predictor-for-the-new-48-team-format-1e11</link>
      <guid>https://forem.com/mark_b5f4ffdd8e7cd58/i-built-a-world-cup-2026-bracket-predictor-for-the-new-48-team-format-1e11</guid>
      <description>&lt;h1&gt;
  
  
  I built a World Cup 2026 bracket predictor for the new 48-team format
&lt;/h1&gt;

&lt;p&gt;The 2026 FIFA World Cup format is surprisingly complicated.&lt;/p&gt;

&lt;p&gt;Instead of the old 32-team structure, the tournament now has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;48 teams&lt;/li&gt;
&lt;li&gt;12 groups&lt;/li&gt;
&lt;li&gt;a new Round of 32&lt;/li&gt;
&lt;li&gt;third-place qualification rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I realized that most existing bracket tools were still based on the old format and felt awkward once you tried modeling the new tournament structure.&lt;/p&gt;

&lt;p&gt;So I built this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bracket2026.com" rel="noopener noreferrer"&gt;https://bracket2026.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;predict all group-stage standings&lt;/li&gt;
&lt;li&gt;automatically generate the Round of 32&lt;/li&gt;
&lt;li&gt;continue predicting all knockout rounds&lt;/li&gt;
&lt;li&gt;share or export the completed bracket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One interesting challenge was handling the knockout path generation.&lt;/p&gt;

&lt;p&gt;With 12 groups and third-place advancement, the Round of 32 is no longer fixed in a straightforward way. The bracket depends on which third-place teams qualify, so the UI and logic both become more dynamic compared to previous World Cups.&lt;/p&gt;

&lt;p&gt;I also tried to keep the experience lightweight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no signup&lt;/li&gt;
&lt;li&gt;mobile friendly&lt;/li&gt;
&lt;li&gt;fast interactions&lt;/li&gt;
&lt;li&gt;easy sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was a fun side project to build, especially because sports tournament structures are basically a weird mix of UI design, state management, and combinatorics.&lt;/p&gt;

&lt;p&gt;Would love feedback from other developers or football fans — especially around the UX and whether the new format feels understandable.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>sideprojects</category>
      <category>opensource</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
