<?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: Mark Ward</title>
    <description>The latest articles on DEV Community by Mark Ward (@azuli).</description>
    <link>https://dev.to/azuli</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%2F3804944%2F846a131e-ceda-48bc-9d77-fa6fa252ccf6.png</url>
      <title>DEV Community: Mark Ward</title>
      <link>https://dev.to/azuli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azuli"/>
    <language>en</language>
    <item>
      <title>Applying a Systems Engineering Framework to Agentic Coding: Why Prompts Fail and Structure Wins</title>
      <dc:creator>Mark Ward</dc:creator>
      <pubDate>Fri, 29 May 2026 06:50:45 +0000</pubDate>
      <link>https://dev.to/azuli/applying-a-systems-engineering-framework-to-agentic-coding-why-prompts-fail-and-structure-wins-2l2j</link>
      <guid>https://dev.to/azuli/applying-a-systems-engineering-framework-to-agentic-coding-why-prompts-fail-and-structure-wins-2l2j</guid>
      <description>&lt;p&gt;Agentic AI coding tools are transforming how we build software. But they share a fundamental constraint: context windows are finite, and as chat sessions grow, AI performance degrades, a phenomenon Anthropic calls &lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;context rot&lt;/a&gt;. The model loses its grip on early instructions, leading to a frustrating "fix-it loop" where the agent fixes one thing but breaks another.&lt;/p&gt;

&lt;p&gt;Most of us prompt an agent, let it write code, review it, and repeat. This works beautifully for prototypes. But when you need to build a stable, full-featured product with hundreds of mission-critical acceptance criteria (AC), "vibe-coding" breaks down.&lt;/p&gt;

&lt;p&gt;The reality is that &lt;strong&gt;you get better behavior from agents the same way you get it from humans, by explicitly capturing what good and bad look like, and checking against it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Coming from a systems engineering background in regulated industries, I knew we needed to stop treating agents like conversational chat buddies and start treating them like engineering assets. That's why I built &lt;a href="https://www.devcortexai.com/" rel="noopener noreferrer"&gt;DevCortex&lt;/a&gt;: a purpose-built structured intelligence layer that brings systems engineering discipline to agentic workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is DevCortex?
&lt;/h2&gt;

&lt;p&gt;DevCortex is an agentic development platform built on one core idea: AI agents work best when they have structured, queryable access to a database of requirements they can interrogate on demand, not a wall of text in a prompt.&lt;br&gt;
It sits between the human specification and AI execution using three components:&lt;br&gt;
    1. &lt;strong&gt;An Agentic-V Model Database:&lt;/strong&gt; A structured hierarchy mapping your high-level vision (ConOps) to system specs (Specs), individual requirements (Reqs), linked defects (Issues), and an auto-generated Traceability Matrix.&lt;br&gt;
    2. &lt;strong&gt;An MCP Server:&lt;/strong&gt; Delivers just-in-time, high-signal context to tools like Claude Code or Open Code. Instead of dumping requirements upfront, the agent queries exactly what it needs, when it needs it.&lt;br&gt;
    3. &lt;strong&gt;Human Control Planes (Web UI &amp;amp; CLI):&lt;/strong&gt; A multi-user Web UI with real-time WebSocket feeds to watch your agent work, plus a powerful dcx CLI for power users and CI pipelines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa38ameghck1bjnsjsqkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa38ameghck1bjnsjsqkn.png" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Putting it to the Test: The KiroPyUnitConverter
&lt;/h2&gt;

&lt;p&gt;In a recent test I compared using DevCortex and AWS Kiro to build a Python CLI unit converter. The project had 8 requirements and 31 acceptance criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Import the Spec&lt;/strong&gt;&lt;br&gt;
For this test I used dcx CLI tool to import the Kiro requirements.md file directly into DevCortex, (Alternatively, I could have loaded the Spec and Reqs via the DevCortex WebUI or get the integrated AI Assistant to create them for me):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dcx init&lt;br&gt;
dcx import kiro ./requirements.md&lt;/code&gt;&lt;br&gt;
&lt;em&gt;(Result: 1 Spec, 8 reqs, 31 ACs populated and ready for the agent).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Feed the Agent the Workflow&lt;/strong&gt;&lt;br&gt;
I then gave Claude Code a simple workflow via our Model Context Protocol (MCP) server:&lt;br&gt;
    1. Call &lt;code&gt;dc_get_backlog&lt;/code&gt; to retrieve requirements.&lt;br&gt;
    2. For each requirement, fetch full AC details using &lt;code&gt;dc_get_requirement&lt;/code&gt;.&lt;br&gt;
    3. Implement the code, write the tests, and verify.&lt;br&gt;
    4. &lt;strong&gt;The "Good vs. Bad" Rule:&lt;/strong&gt; Only call &lt;code&gt;dc_update_verification&lt;/code&gt; to mark an &lt;code&gt;AC&lt;/code&gt; as &lt;code&gt;PASSED&lt;/code&gt; if a test explicitly proves it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Watch it Work&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk3ymcm8rdcqoqx0ij5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk3ymcm8rdcqoqx0ij5y.png" alt=" " width="800" height="399"&gt;&lt;/a&gt;&lt;br&gt;
Once executed, Claude Code didn't just blind-code. It systematically checked project health, pulled the requirement backlog, built an architectural map, and rigorously tracked its own verification.&lt;br&gt;
Here is what the terminal trace looked like as it interacted with the DevCortex MCP server:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;● Running dc_health and fetching the full backlog...&lt;br&gt;
  ↳ Called devcortex MCP server&lt;br&gt;
● 8 requirements found. Fetching full AC details in parallel...&lt;br&gt;
  ↳ Called devcortex 8 times &lt;br&gt;
● All 8 requirements read. Generated implementation plan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;kiropy/units.py       -&amp;gt; REQ-002 (categories &amp;amp; factors)&lt;/li&gt;
&lt;li&gt;kiropy/converter.py   -&amp;gt; REQ-001, REQ-003, REQ-007 (logic &amp;amp; accuracy)&lt;/li&gt;
&lt;li&gt;kiropy/printer.py     -&amp;gt; REQ-004 (formatting &amp;amp; precision)&lt;/li&gt;
&lt;li&gt;kiropy/cli.py         -&amp;gt; REQ-003, REQ-005, REQ-006, REQ-008 (arguments &amp;amp; exit codes)
● Key interpretation decisions recorded:&lt;/li&gt;
&lt;li&gt;"6 significant decimal places" (REQ-004 AC-2) interpreted as 6 digits after decimal point.&lt;/li&gt;
&lt;li&gt;Absolute zero check (REQ-003 AC-5) to block invalid physical conversions (e.g., -300°C).&lt;/li&gt;
&lt;li&gt;Round-trip accuracy (REQ-007 AC-2) via base-unit intermediary with zero intermediate rounding.
● Implementing project structure, test suites, and source files...
● All files written. Running test suites: 48/48 tests pass.
● Smoke tests pass. Recording verification results back to DevCortex...
↳ Called devcortex 32 times (Updating 29 distinct Acceptance Criteria to PASS)
↳ Called devcortex 8 times (Marking all 8 REQs as VERIFIED)
● Committing and closing out session. 
✔ Project structure configured
✔ Core logic implemented &amp;amp; verified against trace matrix.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;The application was built flawlessly with all 31 acceptance criteria verified and marked &lt;code&gt;PASSED&lt;/code&gt;.&lt;br&gt;
More importantly, the &lt;strong&gt;traceability matrix&lt;/strong&gt; completely bridges the trust gap. Every single AC links directly to a named test and explicit evidence. If you review this codebase in six months, you will know exactly why and how every requirement was fulfilled.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this taught me about Agentic Development
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Structured requirements reduce drift:&lt;/strong&gt; When an agent is bound to a structured backlog contract, it radically reduces hallucinating features or skipping "trivial" requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Evidence-based verification reduces errors:&lt;/strong&gt; Requiring the agent to provide test proof caught instances where the AI's initial code passed a shallow test but missed the spirit of the AC. The agent caught its own gaps and fixed them before claiming completion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Effective use of agent context increases determinism:&lt;/strong&gt; Given LLMs are constrained by a finite attention budget, enabling the coding agent to fetch the specific requirements and ACs as they need them helps reduce them maintain focus on the job at hand.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DevCortex&lt;/strong&gt; is now available at &lt;a href="https://www.devcortexai.com/" rel="noopener noreferrer"&gt;devcortexai.com&lt;/a&gt; with a free tier.&lt;br&gt;
You can also install the CLI right now via npm:&lt;br&gt;
&lt;code&gt;npm install -g @devcortex/cli&lt;/code&gt;&lt;br&gt;
Check out the &lt;a href="https://www.devcortexai.com/getting-started" rel="noopener noreferrer"&gt;getting started guide&lt;/a&gt; to connect Claude Code, or OpenCode via MCP, run your first verified build, or read our &lt;a href="https://www.devcortexai.com/case-study.html" rel="noopener noreferrer"&gt;Case Study&lt;/a&gt; about building a full stack Career Journal App with DevCortex.&lt;br&gt;
If you're working on agentic systems engineering or requirement-driven development, I'd love to compare notes in the comments below!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>claude</category>
    </item>
    <item>
      <title>An Olympic Windfoil (IQFoil) race and training session performance analysis toolset</title>
      <dc:creator>Mark Ward</dc:creator>
      <pubDate>Wed, 04 Mar 2026 03:34:57 +0000</pubDate>
      <link>https://dev.to/azuli/an-olympic-windfoil-iqfoil-race-and-training-session-performance-analysis-toolset-i7</link>
      <guid>https://dev.to/azuli/an-olympic-windfoil-iqfoil-race-and-training-session-performance-analysis-toolset-i7</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. What I Built: The SailMetrics Ecosystem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For this project, I tackled the "invisible" challenge of iQFOiL windfoiling: the high-speed, 6-degree-of-freedom (6-DOF) physics that occur beneath the water's surface. To help athletes analyze and improve their performance, I built a three-tier telemetry ecosystem:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam4p10r9gj9s0fkewn2t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam4p10r9gj9s0fkewn2t.jpg" alt=" " width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SailMetrics Kotlin App:&lt;/strong&gt; Running on a Google Pixel 3a (flashed with LineageOS), this edge-device app serves as the "black box." It polls the IMU (accelerometer/gyroscope), GPS, and barometer at high frequencies to capture the motions of the windfoil board in multiple dimensions as well as display basic speed and heading feedback to the rider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sshhsxywmtggvp4ucwq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2sshhsxywmtggvp4ucwq.png" alt=" " width="319" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windfoil Visualizer:&lt;/strong&gt; A Python/Matplotlib dashboard that renders a 3D "Digital Twin" of the board’s orientation using a model of the board rendered in 3D space as well as graphs fusing the IMU sensor data to recreate the board's pitch and heel and allows user to replay and analyse each second of their session. Multiple sessions can also be compared with each other.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31wjiflvwtl6ycnummzd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31wjiflvwtl6ycnummzd.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SailPerfView (web viewer):&lt;/strong&gt; An online session analysis tool that allows sailors and coaches views of the session data recorded either by the SailMetrics Andoid App or a Garmin device (FIT file), rendering the sailing session track on a map and displaying insights into the sailing performance with VMG Polar Chart, Performance Statistics, and Interactive Metrics chart with synchonised hover markers linked to the track map. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswdmr3brvev3x65iipsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswdmr3brvev3x65iipsb.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Role of Google Gemini:&lt;br&gt;
Gemini acted as my a technical adviser, not only writing code snippets but also helping bridge the gap between abstract fluid dynamics (based on research papers like Urbański’s "Theoretical investigation of pitch control") and tangible Python/Kotlin code. It was instrumental in implementing the Pitch Phase Portrait and other graphs visualising the 3D data.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. What I Learned: From Theory to Telemetry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The biggest technical takeaway was Sensor Fusion and Noise Mitigation.&lt;/p&gt;

&lt;p&gt;Filtering the "Invisible": I learned how to extract "Foil Height" from a barometric pressure signal. Gemini helped me design a three-stage filtering pipeline: noise smoothing, rolling baseline subtraction, and height derivation.&lt;/p&gt;

&lt;p&gt;Performance Optimization: Animating 3D geometry in Matplotlib can be sluggish. Gemini suggested methods to improve UI responsiveness when replaying the data timeline animation.&lt;/p&gt;

&lt;p&gt;Soft Skills: I learned the value of "Hardware Recycling." Using Gemini to troubleshoot LineageOS-specific sensor API calls on a Pixel 3a proved that high-end sports tech doesn't require high-end modern hardware—just smart software.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Google Gemini Feedback: The Good, The Bad, and The Ugly&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Good (The "Aha!" Moments):&lt;br&gt;
Gemini’s ability to "read" and intepret academic papers (like the Urbański paper) and suggest how to translate formulas into Python pandas logic.&lt;/p&gt;

&lt;p&gt;Google AI support in both Android Studio for developing the Kotlin App and VSCode for developing the Python backend code provided consistency and convenience.&lt;/p&gt;

&lt;p&gt;The Google AI enabled development toolset and workflow enabled very rapid development of a Proof of Concept that I was able to start collecting data in the space of a weekend with a basic visualisation app. While it took a little longer to build more sophisticated visualisation dashboards incorporating 3D data fusion, it is possible to experiment with different ideas without much effort.&lt;/p&gt;

&lt;p&gt;The friction (The "Candid" Feedback):&lt;br&gt;
To be honest this project went very smoothly as it was approached in disrete stages without complete interdependencies, and code changes were managed with git.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Looking Forward: The Next Reach&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;More testing and data gathering is required to validate the current functionality, I am also interested in incorporating AI into the Visualisation dashboards so that it can access the session data directly and provide insights into sailor performance and windfoil board and foil tuning, such as rake and stabiliser settings.&lt;/p&gt;

&lt;p&gt;The project was inspired by amazing data analytics that is occuring in the Americas Cup (AC75) and SailGP (GP) foiling classes, and how that has helped the crews. The goal of this project is to provide windfoil sailors access to some similar data insights at a much lower cost by leveraging older smartphones as data recorders and the power of Google AI.  &lt;/p&gt;

&lt;p&gt;This project proved that with Google Gemini, an amateur builder can take complex academic theory and turn it into a tool that helps athletes fly higher and faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Urbański, O. (2023).&lt;/strong&gt; &lt;em&gt;Theoretical investigation of pitch control and stability for hydrofoiling windsurfing&lt;/em&gt;. Adam Mickiewicz University, Poznań.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Politecnico di Milano. (2023).&lt;/strong&gt; &lt;em&gt;Study of iQfoil’s settings and performance investigation through 6 DOF dynamic model&lt;/em&gt;. Master’s Degree Thesis. Supervisor: Prof. Giuliana Mattiazzo.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
