<?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>DEV Community: Nicholas Masters</title>
    <description>The latest articles on DEV Community by Nicholas Masters (@discgolfdev).</description>
    <link>https://dev.to/discgolfdev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3300797%2F1099b944-5ba2-47bf-9eeb-67e4b570a7d6.png</url>
      <title>DEV Community: Nicholas Masters</title>
      <link>https://dev.to/discgolfdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/discgolfdev"/>
    <language>en</language>
    <item>
      <title>Small Models, Strong Guardrails</title>
      <dc:creator>Nicholas Masters</dc:creator>
      <pubDate>Wed, 16 Sep 2026 14:31:17 +0000</pubDate>
      <link>https://dev.to/discgolfdev/small-models-strong-guardrails-2087</link>
      <guid>https://dev.to/discgolfdev/small-models-strong-guardrails-2087</guid>
      <description>&lt;h1&gt;
  
  
  Small Models, Strong Guardrails
&lt;/h1&gt;

&lt;p&gt;How repository constraints make smaller coding models useful without outsourcing engineering judgment.&lt;/p&gt;

&lt;p&gt;I've been experimenting with how far I can push smaller, faster models for real software work.&lt;/p&gt;

&lt;p&gt;My workflow lately has been built around ChatGPT's Luna model on Lite mode, Matt Pocock's skills, and GitHub issue tickets for triage, memory, and goal alignment. The model is cheap and fast. Pair that with strong guardrails and a good harness, and you can get a surprisingly capable workflow without burning through tokens or constantly reaching for a frontier model.&lt;/p&gt;

&lt;p&gt;I'm currently paying for the $20 Plus plan, and I still haven't consistently hit the limits. Granted, I work a full-time job that isn't currently a developer role, but I use this subscription every day for coding and other work. Being able to use it that often without regularly hitting limits is a big part of the value for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Guardrails
&lt;/h2&gt;

&lt;p&gt;I try to keep my guardrails organic.&lt;/p&gt;

&lt;p&gt;I'm not interested in building an enormous collection of prompts that I have to constantly maintain. I want the repository itself to do as much of the steering as possible.&lt;/p&gt;

&lt;p&gt;That means things like &lt;code&gt;AGENTS.md&lt;/code&gt;, TypeScript's self-documenting nature, solid repository documentation, existing patterns, naming conventions, and reusable skills.&lt;/p&gt;

&lt;p&gt;These things make smaller, scrappier models much more useful.&lt;/p&gt;

&lt;p&gt;A good example is how I handle React Query. My query and mutation patterns are documented and modular, and the codebase has a shared vocabulary for how things should be named and structured.&lt;/p&gt;

&lt;p&gt;When I ask an agent to build a feature, I don't need it to invent the architecture from scratch. I can point it at an existing mutation or query and effectively say, "Follow this pattern for the new feature."&lt;/p&gt;

&lt;p&gt;If every mutation uses similar naming, file structure, function signatures, and invalidation patterns, the model has much less to figure out.&lt;/p&gt;

&lt;p&gt;I'm reducing the amount of reasoning it needs to do.&lt;/p&gt;

&lt;p&gt;That's where smaller models start becoming really effective.&lt;/p&gt;

&lt;p&gt;I'm currently using Codex inside VS Code with the Codex extension. I like being able to see the diffs and maintain visibility into exactly what is being written or merged.&lt;/p&gt;

&lt;p&gt;I don't take this approach with every project. For one-off experiments, I'm much more willing to let an agent run.&lt;/p&gt;

&lt;p&gt;With Disc Golf Labs, it's different.&lt;/p&gt;

&lt;p&gt;I care about what gets written there. If I'm going to ship the code, I want to understand the decisions behind it and be able to own those decisions later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pitfalls
&lt;/h2&gt;

&lt;p&gt;There are still plenty of areas where a lightweight, fast model can get you into trouble.&lt;/p&gt;

&lt;p&gt;The biggest one is ambiguity.&lt;/p&gt;

&lt;p&gt;The stronger frontier models are getting better at inferring intent from a vague task. You can sometimes give them an incomplete idea, answer a few questions, and watch them get surprisingly close to the result you had in your head.&lt;/p&gt;

&lt;p&gt;I don't expect that from the smaller models. With them, I'm pair programming. The model and I need to stay aligned on what task we're solving, why we're solving it, and what "done" actually means.&lt;/p&gt;

&lt;p&gt;These models also tend to aggressively optimize for the goal you've put in front of them. That's incredibly useful when the goal is clear. It's also one of the biggest foot guns when it isn't.&lt;/p&gt;

&lt;p&gt;I've been using Matt Pocock's &lt;code&gt;/grill-me&lt;/code&gt; skill for this. The skill forces me to clarify and polish an idea before handing it off for implementation. It helps expose the assumptions that otherwise stay stuck in my head.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/wayfinder&lt;/code&gt; is another useful one. It helps define the destination and work backward toward a reasonable path to get there.&lt;/p&gt;

&lt;p&gt;Both skills help me align myself and the model before spending a large amount of context or implementation effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staying in the Smart Zone
&lt;/h2&gt;

&lt;p&gt;Context management has also become part of the workflow. In my experience, once a session starts getting much beyond roughly 150k tokens, I trust the model less. I think of that range as the "smart zone," borrowing the term from Matt Pocock's teaching.&lt;/p&gt;

&lt;p&gt;A GitHub issue becomes a useful boundary. Finish the task, capture the important decisions, merge it, and start the next task with a cleaner context.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Are Part of the Model's Ceiling
&lt;/h2&gt;

&lt;p&gt;The floor for building software has risen dramatically. Someone with very little software experience can now produce a working website. It might not be particularly good software, but the fact that they can produce it at all is a meaningful change.&lt;/p&gt;

&lt;p&gt;I don't think that makes software engineering expertise less important. I think it changes where that expertise matters. If producing code becomes cheaper, judgment about what code should exist becomes more valuable.&lt;/p&gt;

&lt;p&gt;The agent can suggest another abstraction, a view model, five unit tests, or another &lt;code&gt;useEffect&lt;/code&gt;. Somebody still has to decide whether any of those things actually belong in the system.&lt;/p&gt;

&lt;p&gt;The model doesn't have durable ownership of the codebase. It doesn't have deterministic outcomes. It doesn't truly remember why a decision was made six months ago unless that decision has been captured somewhere it can access.&lt;/p&gt;

&lt;p&gt;We need to recognize when the agent is following a pattern versus inventing one. We need to know when a test protects meaningful behavior and when it's just increasing coverage. We need to catch the unnecessary abstraction that looks reasonable in a diff but makes the system harder to maintain.&lt;/p&gt;

&lt;p&gt;In that sense, we're part of the model's effective ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Lightweight models are extremely useful for building software. With strong guardrails, a good harness, clear task boundaries, and active alignment with the person using them, they can produce meaningful work quickly and cheaply.&lt;/p&gt;

&lt;p&gt;The better I get at documenting patterns, defining tasks, managing context, reviewing decisions, and knowing when the model is wrong, the more useful these tools become.&lt;/p&gt;

&lt;p&gt;The model is getting better, but so is the environment I put around it. Increasingly, I think that's where the leverage is.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://nmasters.dev/writings/small-models-strong-guardrails/" rel="noopener noreferrer"&gt;https://nmasters.dev/writings/small-models-strong-guardrails/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Graph Engineering: Stop Thinking in Steps, Start Mapping Dependencies</title>
      <dc:creator>Nicholas Masters</dc:creator>
      <pubDate>Mon, 10 Aug 2026 18:45:13 +0000</pubDate>
      <link>https://dev.to/discgolfdev/graph-engineering-stop-thinking-in-steps-start-mapping-dependencies-bm2</link>
      <guid>https://dev.to/discgolfdev/graph-engineering-stop-thinking-in-steps-start-mapping-dependencies-bm2</guid>
      <description>&lt;p&gt;I learned about graph engineering this week.&lt;/p&gt;

&lt;p&gt;I expected another hyped-up AI framework.&lt;/p&gt;

&lt;p&gt;Instead, I found a simple idea that I now can’t stop seeing everywhere.&lt;/p&gt;

&lt;p&gt;It started with the platform I’m currently building.&lt;/p&gt;

&lt;p&gt;I was working on the dashboard the same way I normally work through any problem. I’m a list guy. I take the feature, problem, or issue in front of me and break it into smaller chunks of executable work.&lt;/p&gt;

&lt;p&gt;Then I work through them one at a time.&lt;/p&gt;

&lt;p&gt;It looks something like this…&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Determine what data the dashboard needs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Define the API contracts and fetching strategy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decide how the data should be presented&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Break the work into an execution plan&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each step depends on the work that came before it. Finish one, move to the next.&lt;/p&gt;

&lt;p&gt;I’ve worked this way for so long that it feels efficient. And to be fair, I’ve gotten pretty fast at it.&lt;/p&gt;

&lt;p&gt;But learning about graph engineering made me realize there was another way to structure the same work.&lt;/p&gt;

&lt;p&gt;Let me show you what changed.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;“What are the steps?”&lt;/p&gt;

&lt;p&gt;I started asking:&lt;/p&gt;

&lt;p&gt;“What actually depends on what?”&lt;/p&gt;

&lt;p&gt;That sounds like a small distinction.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;Because my original list implies a dependency that may not actually exist.&lt;/p&gt;

&lt;p&gt;For example, do I really need to finish the entire data strategy before thinking about how the dashboard should present information?&lt;/p&gt;

&lt;p&gt;Not necessarily.&lt;/p&gt;

&lt;p&gt;Once I know the questions the dashboard needs to answer, several pieces of work can begin independently.&lt;/p&gt;

&lt;p&gt;I can inspect the available data.&lt;/p&gt;

&lt;p&gt;I can sketch the information hierarchy.&lt;/p&gt;

&lt;p&gt;I can define loading, empty, and error states.&lt;/p&gt;

&lt;p&gt;I can investigate existing API patterns.&lt;/p&gt;

&lt;p&gt;I can think through what belongs in summary cards versus charts versus tables.&lt;/p&gt;

&lt;p&gt;Those are separate nodes of work.&lt;/p&gt;

&lt;p&gt;Some depend on the same input, but they don’t necessarily depend on each other.&lt;/p&gt;

&lt;p&gt;That changes the shape of the problem.&lt;/p&gt;

&lt;p&gt;My list looked roughly like this:&lt;/p&gt;

&lt;p&gt;A → B → C → D&lt;/p&gt;

&lt;p&gt;A graph might look more like:&lt;/p&gt;

&lt;p&gt;A → B → D&lt;br&gt;&lt;br&gt;
A → C → D&lt;/p&gt;

&lt;p&gt;B and C can happen independently.&lt;/p&gt;

&lt;p&gt;D waits for both.&lt;/p&gt;

&lt;p&gt;And once I saw that, I realized how much of my normal workflow is accidentally sequential.  &lt;/p&gt;

&lt;p&gt;Not because the work has to happen that way.&lt;br&gt;&lt;br&gt;
Because a list makes it look like it does.&lt;/p&gt;

&lt;p&gt;This becomes especially interesting when AI agents enter the picture.&lt;/p&gt;

&lt;p&gt;If I give one agent a task list, it will usually work through that list much like I do.&lt;/p&gt;

&lt;p&gt;Step one.&lt;/p&gt;

&lt;p&gt;Then step two.&lt;/p&gt;

&lt;p&gt;Then step three.&lt;/p&gt;

&lt;p&gt;The model may be fast, but the structure is still sequential.&lt;/p&gt;

&lt;p&gt;Graph engineering moves some of the intelligence out of the individual task and into the structure around the tasks.&lt;/p&gt;

&lt;p&gt;You define units of work as nodes.&lt;/p&gt;

&lt;p&gt;You define real dependencies as edges.&lt;/p&gt;

&lt;p&gt;Then work that shares an input, but not a dependency on each other, can happen independently.&lt;/p&gt;

&lt;p&gt;For the dashboard, I could have one branch analyzing the data model while another works through the UI states.&lt;/p&gt;

&lt;p&gt;A third could inspect the existing codebase for reusable components.&lt;/p&gt;

&lt;p&gt;Another could define acceptance criteria.&lt;/p&gt;

&lt;p&gt;They don’t need four completely isolated copies of the project.&lt;/p&gt;

&lt;p&gt;They need the right context, a clear responsibility, and an explicit understanding of what their output unlocks next.&lt;/p&gt;

&lt;p&gt;When those branches finish, their outputs can converge into the implementation work.&lt;/p&gt;

&lt;p&gt;That’s the part that clicked for me.&lt;/p&gt;

&lt;p&gt;Graph engineering isn’t really about making a fancy diagram.&lt;/p&gt;

&lt;p&gt;It’s about being precise about dependency.&lt;/p&gt;

&lt;p&gt;Once those dependencies are explicit, you can see the critical path.&lt;/p&gt;

&lt;p&gt;You can see where parallel work is possible.&lt;/p&gt;

&lt;p&gt;You can isolate failures.&lt;/p&gt;

&lt;p&gt;You can rerun one branch without restarting everything.&lt;/p&gt;

&lt;p&gt;And you can give specialized agents smaller contexts instead of asking one agent to carry the entire problem around in its head.&lt;/p&gt;

&lt;p&gt;I’m still early in experimenting with this, and I don’t think every problem needs a graph.&lt;/p&gt;

&lt;p&gt;Sometimes A → B → C is exactly right.&lt;/p&gt;

&lt;p&gt;Adding branches, agents, state, and orchestration to a simple task can easily create more complexity than it removes.&lt;/p&gt;

&lt;p&gt;But for larger engineering problems, I’m starting to think the shape of the work matters almost as much as the quality of the individual instructions.&lt;/p&gt;

&lt;p&gt;For years, my default has been:&lt;/p&gt;

&lt;p&gt;Make a list.&lt;/p&gt;

&lt;p&gt;Order the list.&lt;/p&gt;

&lt;p&gt;Execute the list.&lt;/p&gt;

&lt;p&gt;Now I’m adding another step before that:&lt;/p&gt;

&lt;p&gt;Map the dependencies.&lt;/p&gt;

&lt;p&gt;Because sometimes the fastest way through a problem isn’t getting better at completing the list.&lt;/p&gt;

&lt;p&gt;It’s realizing the list was never a list in the first place.&lt;/p&gt;

&lt;p&gt;It was a graph.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From Pro Disc Golf to Code: My Journey to Become a Full-Stack Developer</title>
      <dc:creator>Nicholas Masters</dc:creator>
      <pubDate>Wed, 02 Jul 2025 14:06:37 +0000</pubDate>
      <link>https://dev.to/discgolfdev/from-pro-disc-golf-to-code-my-journey-to-become-a-full-stack-developer-41a</link>
      <guid>https://dev.to/discgolfdev/from-pro-disc-golf-to-code-my-journey-to-become-a-full-stack-developer-41a</guid>
      <description>&lt;p&gt;A year ago I was walking new construction homes as a field manager. I managed the installation of tile wood and carpet in new construction homes. It’s served my family and I well, and put me in situations of self growth I would have never gotten otherwise. But I hit a wall and upward mobility was stagnant. Before I was a field manager I was a professional disc golfer. It was always an adventure, I got to tour the country playing tournaments and teaching clinics. That era instilled in me a deep understanding of planning, discipline, and the power of creating systems to excel.&lt;/p&gt;

&lt;p&gt;Current day… I am obsessed with coding. My mind is always buzzing with what I am currently learning, and what technical puzzle I am solving at the time. This passion ignited on a whim last year. I was sent a link to web development coding bootcamp from a family friend. In a whirlwind I called my amazingly supportive wife, and within 20 minutes I was enrolled in the bootcamp. Class started that same day. I had a buzzing in my body, that had me excited and scared all at the same time. &lt;/p&gt;

&lt;p&gt;The challenges, the creativity, and the complex problem-solving drove me to fall deep into coding. This post marks the beginning of me sharing my journey. From fairway to construction site to becoming a full stack developer. &lt;/p&gt;

&lt;p&gt;Graduating bootcamp last June, the pressure to secure a job intensified with our first child due in February. Despite relentless effort, not a single interview materialized between June and August. Providing for my family meant "biting the bullet" and returning to construction. It felt like taking a quadruple bogey on the tournament's final hole, but just like in disc golf, mental resilience became key. I pivoted. I recognized my skills weren't "up to snuff," especially with AI raising the industry bar. My love for coding made the decision clear: Rise and grind.&lt;/p&gt;

&lt;p&gt;That "quadruple bogey" taught me not to let one bad hole ruin the entire round. I went back into the lab and re-evaluated my coding habits and systems, realizing there was immense room for improvement. The "get rich quick" mentality wasn't working. My focus shifted to a long-term, sustainable journey of growth.&lt;/p&gt;

&lt;p&gt;One year into this revised plan, I'm already seeing progress. I'm currently interning, building the syllabus website for the very bootcamp I attended – a full-circle moment. This valuable experience, coupled with freelance work and my dedicated side project, is where I'm gaining real-world skills. My current side project, a Disc Golf Course and Round Tracker, directly reinforces my internship learnings in PHP and SQL, allowing me to immediately apply and practice what I'm currently using.&lt;/p&gt;

&lt;p&gt;While PHP and SQL aren't my primary languages, this hands-on experience has been truly eye-opening, revealing just how much React streamlines development under the hood. Building reusable OOP components in PHP has definitely made me itch to return to React's ecosystem! Once this internship concludes, my focus shifts to an even bigger project I'm eager to tackle: a MERN stack application.&lt;/p&gt;

&lt;p&gt;The road from professional disc golf and construction management to becoming a full-stack developer is proving to be a true test of grit and adaptability. It's a journey I'm embracing fully, learning new languages and paradigms with every step. I'm committed to building a solid portfolio and making this career transition a success. Through this blog, I aim to share the raw, unfiltered experience the “aces” and the "bogeys"  if you will. I hope to connect with others on a similar path. Join me as I continue to build, learn, and grow in the world of web development.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
