{"id":688,"date":"2025-12-29T22:03:32","date_gmt":"2025-12-29T22:03:32","guid":{"rendered":"https:\/\/mityjohn.com\/?p=688"},"modified":"2025-12-29T22:24:39","modified_gmt":"2025-12-29T22:24:39","slug":"scrum-2-0-0-programming-by-intent-and-a-little-faith","status":"publish","type":"post","link":"https:\/\/mityjohn.com\/?p=688","title":{"rendered":"SCRUM 2.0.0 \u2014 Programming by Intent (and a Little Faith)"},"content":{"rendered":"\n<p>There\u2019s a moment in every side project when it stops being fun and starts becoming serious.<br>For SCRUM, that moment is version <strong>2.0.0<\/strong>.<\/p>\n\n\n\n<p>Not because the syntax suddenly got stricter, or because someone wrote a 40-page spec. But because intent itself became a <strong>first-class citizen<\/strong> in the language. SCRUM 2.0.0 isn\u2019t about writing less code for the sake of cleverness\u2014it\u2019s about reducing cognitive overhead, lowering accidental complexity, and letting developers express <em>what they want to happen<\/em>, not just <em>how<\/em> to make it happen.<\/p>\n\n\n\n<p>This release marks the point where SCRUM moves from \u201cinteresting experiment\u201d to something you can genuinely reason about, build with, and trust.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-22_48_04-2.png\" alt=\"\" class=\"wp-image-695\" srcset=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-22_48_04-2.png 1024w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-22_48_04-2-300x300.png 300w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-22_48_04-2-150x150.png 150w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-22_48_04-2-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And yes, this involves <strong>Large Language Models at compile time<\/strong>.<br>No, this is not a runtime magic trick.<br>And yes, this will feel slightly uncomfortable at first. That\u2019s normal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Traditional Way: Java, Boilerplate, and Determination<\/h2>\n\n\n\n<p>Let\u2019s start with the familiar and (occasionally) love: <strong>traditional Java<\/strong>.<\/p>\n\n\n\n<p>In Java, even the simplest business rule requires a fair amount of ceremony. You describe intent indirectly, through classes, methods, conditionals, and defensive code. The compiler doesn\u2019t care <em>why<\/em> you\u2019re doing something\u2014only that the syntax is valid and the types line up.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class HelloWorld {\n    public static void main(String&#91;] args) {\n        System.out.println(\"Hello world!\");\n    }\n}<\/code><\/pre>\n\n\n\n<p>That\u2019s the <em>simple<\/em> version. The moment you add input, logic, validation, or state, Java politely reminds you that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Types matter<\/li>\n\n\n\n<li>Structure matters<\/li>\n\n\n\n<li>And yes, you <em>will<\/em> write all of it yourself<\/li>\n<\/ul>\n\n\n\n<p>Java is explicit, powerful, and unforgiving \u2014 which is exactly why it scales.<br>But it also means the <em>intent<\/em> (\u201csay hello\u201d) gets buried under <em>implementation<\/em>.<\/p>\n\n\n\n<p>That precision has value. It\u2019s explicit, predictable, and leaves very little room for interpretation. But it also comes at a cost: verbosity, boilerplate, and a growing gap between business intent and implementation. The more complex the domain, the more effort is spent translating <em>meaning<\/em> into mechanics.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Classic SCRUM: Still Explicit, Much More Human<\/h2>\n\n\n\n<p>SCRUM already made a big step forward by expressing logic in <strong>business-readable terms<\/strong>.<\/p>\n\n\n\n<p>SCRUM already tried to close that gap.<\/p>\n\n\n\n<p>Instead of low-level constructs, you describe behavior using structured concepts like actors, conditions, and outcomes. You\u2019re no longer writing \u201ccode that happens to implement a rule\u201d; you\u2019re writing the rule itself.<\/p>\n\n\n\n<p>Still, classic SCRUM remains explicit. Every condition, every edge case, every branch must be spelled out. It\u2019s readable, but it\u2019s still exhaustive. You describe intent\u2014yet you do so in full detail, step by step.<\/p>\n\n\n\n<p>Here\u2019s <em>Hello World<\/em> in classic SCRUM:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#SPRINTGOAL Deliver our first Scrum program\n\nEPIC \"SampleStories\"\n\n    USER STORY \"HelloWorld\"\n\n        #REVIEW Our first Scrum Program\n        SAY \"Hello world!\"\n\n    END OF STORY\n\nEND OF EPIC<\/code><\/pre>\n\n\n\n<p>Compared to Java:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Less syntax noise<\/li>\n\n\n\n<li>Clear structure<\/li>\n\n\n\n<li>Still 100% explicit<\/li>\n\n\n\n<li>Still fully deterministic<\/li>\n<\/ul>\n\n\n\n<p>You write the logic.<br>The compiler executes exactly that logic.<br>No guessing involved.<\/p>\n\n\n\n<p>This style remains fully valid in SCRUM 2.0.0., but SCRUM 2.0.0 asks a dangerous question:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>What if we didn\u2019t have to spell out everything?<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Now Add <code>#INTENT<\/code>: Same Language, New Dimension<\/h2>\n\n\n\n<p>SCRUM 2.0.0 introduces a new option \u2014 <strong>not a replacement<\/strong> \u2014 called <code>#INTENT<\/code>.<\/p>\n\n\n\n<p>The same <em>Hello World<\/em>, expressed as intent:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EPIC \"HelloWorldApp\"\n    USER STORY \"Greeting\"\n        #INTENT\n        I want to create a simple greeting that displays \"Hello from SCRUM!\" to the user.\n        #END INTENT\n    END OF STORY\nEND OF EPIC\n\napp IS NEW HelloWorldApp\napp::Greeting USING &#91;]<\/code><\/pre>\n\n\n\n<p>This is where things feel\u2026 different.<\/p>\n\n\n\n<p>There\u2019s no <code>SAY<\/code>.<br>No explicit output statement.<br>No visible implementation.<\/p>\n\n\n\n<p>And yet \u2014 the program runs exactly as expected.<\/p>\n\n\n\n<p>This is not pseudo-code. It\u2019s not documentation. It\u2019s not a comment.<\/p>\n\n\n\n<p>It\u2019s <strong>executable intent<\/strong>.<\/p>\n\n\n\n<p>At first glance, this feels like cheating. Where are the conditions? The checks? The branching logic? The answer is simple\u2014and slightly uncomfortable: they\u2019re inferred.<\/p>\n\n\n\n<p>But importantly, they\u2019re not inferred at runtime.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What Actually Happens (Without Hand-Waving)<\/h2>\n\n\n\n<p>HHere\u2019s the important part, stripped of buzzwords and wishful thinking.<\/p>\n\n\n\n<p>Everything <strong>starts as SCRUM<\/strong>.<\/p>\n\n\n\n<p>When the compiler encounters a <code>#INTENT<\/code> block, this is what really happens:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/image-4-683x1024.png\" alt=\"\" class=\"wp-image-697\" srcset=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/image-4-683x1024.png 683w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/image-4-200x300.png 200w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/image-4-768x1152.png 768w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/image-4.png 1024w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/figure>\n\n\n\n<p>Once compilation finishes, the AI is gone.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What This Explicitly Means<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No AI dependency at runtime<\/li>\n\n\n\n<li>No network calls in production<\/li>\n\n\n\n<li>No \u201ccreative interpretation\u201d after deployment<\/li>\n<\/ul>\n\n\n\n<p>-> Deterministic Java execution<br>-> Predictable JVM behavior<br>-> Full compatibility with CI\/CD, debugging, and observability<\/p>\n\n\n\n<p>Think of it as <strong>AI-assisted SCRUM authoring<\/strong>, followed by <strong>classic Java execution<\/strong>.<\/p>\n\n\n\n<p>Or more simply:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The AI helps <em>write<\/em> SCRUM.<br>SCRUM becomes Java.<br>Java does what Java always does.<\/p>\n<\/blockquote>\n\n\n\n<p>That separation is not an implementation detail \u2014<br>it\u2019s the entire point.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java vs SCRUM vs SCRUM + Intent<\/h2>\n\n\n\n<p>Let\u2019s put all three side by side:<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table class=\"has-fixed-layout\"><thead><tr><th><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-color\">Aspect<\/mark><\/th><th><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-color\">Java<\/mark><\/th><th><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-color\">Classic SCRUM<\/mark><\/th><th><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-color\">SCRUM with <code>#INTENT<\/code><\/mark><\/th><\/tr><\/thead><tbody><tr><td><strong>Expressiveness<\/strong><\/td><td>Low<\/td><td>Medium-High<\/td><td>Very High<\/td><\/tr><tr><td><strong>Boilerplate<\/strong><\/td><td>High<\/td><td>Medium<\/td><td>Minimal<\/td><\/tr><tr><td><strong>Cognitive Load<\/strong><\/td><td>High<\/td><td>HiMediumh<\/td><td>Low<\/td><\/tr><tr><td><strong>Runtime Predictability<\/strong><\/td><td>Very High<\/td><td>Very High<\/td><td>Very High<\/td><\/tr><tr><td><strong>Compile-time Trust<\/strong><\/td><td>Compiler only<\/td><td>Compiler only<\/td><td>Compiler + Model<\/td><\/tr><tr><td><strong>Faith required<\/strong><\/td><td>None<\/td><td>None<\/td><td>Just a a little \ud83d\ude42<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>That last row is honest. Yes, intent requires trust. But it\u2019s <strong>bounded trust<\/strong>, applied once, under inspection, with the ability to reject or override the result.<\/p>\n\n\n\n<p>Java asks:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cHow exactly do you want this done?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Classic SCRUM asks:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cWhat is the structure and logic of this story?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>SCRUM with <code>#INTENT<\/code> asks:<\/p>\n\n\n\n<p>\u201cCan you explain what you want to happen?\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Compile-Time AI Changes Everything<\/h2>\n\n\n\n<p>Many modern tools sprinkle AI <em>at runtime<\/em>.<br>SCRUM deliberately does not.<\/p>\n\n\n\n<p>By keeping AI <strong>out of runtime<\/strong>, SCRUM preserves:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deterministic execution<\/li>\n\n\n\n<li>Debuggable behavior<\/li>\n\n\n\n<li>CI\/CD safety<\/li>\n\n\n\n<li>Production sanity<\/li>\n<\/ul>\n\n\n\n<p>The AI helps <em>write<\/em> the code \u2014 then steps aside.<\/p>\n\n\n\n<p>If Java is a strict professor<br>and classic SCRUM is a pragmatic architect,<br>then <code>#INTENT<\/code> is the whiteboard session where you explain the idea first.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When Should You Use Each Style?<\/h2>\n\n\n\n<p>Use <strong>Java<\/strong> when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You need raw control and performance<\/li>\n\n\n\n<li>You enjoy explicitness<\/li>\n\n\n\n<li>You\u2019re building large ecosystems with strict contracts<\/li>\n<\/ul>\n\n\n\n<p>Use <strong>classic SCRUM<\/strong> when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want clarity without ceremony<\/li>\n\n\n\n<li>You value readable structure<\/li>\n\n\n\n<li>You want zero magic<\/li>\n<\/ul>\n\n\n\n<p>Use <strong><code>#INTENT<\/code><\/strong> when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Boilerplate outweighs meaning<\/li>\n\n\n\n<li>You want to express business behavior directly<\/li>\n\n\n\n<li>You\u2019re prototyping or exploring logic<\/li>\n\n\n\n<li>You\u2019d rather explain than implement<\/li>\n<\/ul>\n\n\n\n<p>And yes \u2014 you can mix all of this freely.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Java 25 Compatibility: Standing on Very Solid Shoulders<\/h2>\n\n\n\n<p>While <code>#INTENT<\/code> gets most of the spotlight (and rightly so), <strong>SCRUM 2.0.0 quietly does something equally important<\/strong>:<br>it moves the entire language and SDK to <strong>Java 25 (LTS)<\/strong>.<\/p>\n\n\n\n<p>This matters more than it sounds.<\/p>\n\n\n\n<p>SCRUM may <em>look<\/em> playful on the surface, but under the hood it is still very much a <strong>serious compiler and runtime<\/strong> \u2014 and Java 25 provides exactly the kind of stability that makes experimental ideas safe to use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Java 25?<\/h3>\n\n\n\n<p>By targeting Java 25, SCRUM gains:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Long-term stability (LTS means boring \u2014 in the best possible way)<\/li>\n\n\n\n<li>Modern JVM performance and GC improvements<\/li>\n\n\n\n<li>Strong tooling support across IDEs and CI pipelines<\/li>\n\n\n\n<li>Predictable behavior across platforms<\/li>\n<\/ul>\n\n\n\n<p>In other words:<br>even if your SCRUM code feels a bit\u2026 expressive\u2026<br>the runtime underneath is rock solid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A Familiar Runtime for Java Developers<\/h3>\n\n\n\n<p>For anyone coming from Java, this should feel reassuring.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SCRUM programs compile down to well-structured Java execution paths<\/li>\n\n\n\n<li>Errors surface with JVM-level precision (wrapped in SCRUM storytelling)<\/li>\n\n\n\n<li>Debugging still happens in a world of stack traces, types, and line numbers<\/li>\n<\/ul>\n\n\n\n<p>The <strong>intent-driven magic happens before Java ever runs<\/strong>.<\/p>\n\n\n\n<p>Once compiled:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There is no AI involved<\/li>\n\n\n\n<li>There is no interpretation layer<\/li>\n\n\n\n<li>There is only validated logic running on a modern JVM<\/li>\n<\/ul>\n\n\n\n<p>Think of it this way:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>SCRUM may speak in stories,<br>but Java 25 makes sure those stories always end the same way.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Why This Combination Works<\/h3>\n\n\n\n<p>Putting it all together:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-23_03_05.png\" alt=\"\" class=\"wp-image-698\" srcset=\"https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-23_03_05.png 1024w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-23_03_05-300x300.png 300w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-23_03_05-150x150.png 150w, https:\/\/mityjohn.com\/wp-content\/uploads\/2025\/12\/ChatGPT-Image-29-dec-2025-23_03_05-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Java<\/strong> provides predictability, performance, and maturity<\/li>\n\n\n\n<li><strong>Classic SCRUM<\/strong> provides structure and human readability<\/li>\n\n\n\n<li><strong><code>#INTENT<\/code><\/strong> provides expressive power and reduced boilerplate<\/li>\n<\/ul>\n\n\n\n<p>SCRUM 2.0.0 doesn\u2019t try to replace Java.<br>It builds <em>on top of it<\/em> \u2014 carefully.<\/p>\n\n\n\n<p>And that\u2019s what makes the whole \u201cprogramming by intent\u201d idea believable:<br>because beneath the optimism and natural language<br>there\u2019s a JVM that does not care about feelings.<\/p>\n\n\n\n<p>Which is exactly what you want in production.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Faith, Carefully Applied<\/h2>\n\n\n\n<p>Programming by intent feels unfamiliar at first.<\/p>\n\n\n\n<p>You hesitate.<br>You reread your sentences.<br>You realise that vague language produces vague software \u2014 just like vague requirements always did.<\/p>\n\n\n\n<p>That discomfort is intentional.<\/p>\n\n\n\n<p>SCRUM 2.0.0 doesn\u2019t remove responsibility.<br>It <strong>moves it upstream<\/strong>.<\/p>\n\n\n\n<p>From:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cDid I write the correct syntax?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>To:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cDid I clearly explain what I actually want?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>The compiler still enforces structure.<br>Java 25 still enforces reality.<br>The runtime is still deterministic and boring \u2014 exactly as it should be.<\/p>\n\n\n\n<p>The only thing that changed is <em>when<\/em> intelligence enters the process.<\/p>\n\n\n\n<p>Not at runtime.<br>Not in production.<br>But early \u2014 when design decisions still belong to humans.<\/p>\n\n\n\n<p>Programming by intent isn\u2019t about trusting AI blindly.<br>It\u2019s about trusting <strong>clear thinking<\/strong>, backed by a compiler that verifies everything before execution.<\/p>\n\n\n\n<p>And yes \u2014 that does require a little faith.<\/p>\n\n\n\n<p>But it\u2019s the same faith we\u2019ve always had in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>compilers<\/li>\n\n\n\n<li>type systems<\/li>\n\n\n\n<li>runtimes<\/li>\n\n\n\n<li>and well-written code reviews<\/li>\n<\/ul>\n\n\n\n<p>SCRUM 2.0.0 just asks you to express that faith in full sentences.<\/p>\n\n\n\n<p>Now if you\u2019ll excuse me, I need to explain my next feature to a compiler \u2014<br>clearly, precisely, and with cautious optimism.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SCRUM 2.0.0 release\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/janvanwassenhove\/scrum\/releases\/tag\/v2.0.0\">https:\/\/github.com\/janvanwassenhove\/scrum\/releases\/tag\/v2.0.0<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SCRUM Source @ Github\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/janvanwassenhove\/scrum\">https:\/\/github.com\/janvanwassenhove\/scrum<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>There\u2019s a moment in every side project when it stops being fun and starts becoming serious.For SCRUM, that moment is version 2.0.0. Not because the syntax suddenly got stricter, or because someone wrote a 40-page spec. But because intent itself became a first-class citizen in the language. SCRUM 2.0.0 isn\u2019t about writing less code for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":693,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[19,20,33,10,22],"class_list":["post-688","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-ai","tag-generative-ai","tag-llm","tag-programming","tag-scrum"],"_links":{"self":[{"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/posts\/688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mityjohn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=688"}],"version-history":[{"count":7,"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/posts\/688\/revisions"}],"predecessor-version":[{"id":704,"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/posts\/688\/revisions\/704"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mityjohn.com\/index.php?rest_route=\/wp\/v2\/media\/693"}],"wp:attachment":[{"href":"https:\/\/mityjohn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mityjohn.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mityjohn.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}