<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-631933842798219175</id><updated>2026-02-23T03:26:57.729-05:00</updated><category term="scrum"/><category term="java"/><category term="unit test"/><category term="REST API"/><category term="estimation"/><category term="maven"/><category term="architecture"/><category term="process improvement"/><category term="product owner"/><category term="rest"/><category term="user stories"/><category term="INVEST"/><category term="flow"/><category term="junit"/><category term="kanban"/><category term="restful web services"/><category term="scrum master"/><category term="teams"/><category term="timeboxing"/><category term="tomcat"/><category term="DTO"/><category term="agile"/><category term="burndown"/><category term="cobertura"/><category term="confidence"/><category term="controller"/><category term="cruisecontrol"/><category term="cycle time"/><category term="design patterns"/><category term="domain object method"/><category term="javadoc"/><category term="jmx"/><category term="metrics"/><category term="mvc"/><category term="pre-planning"/><category term="python"/><category term="queuing theory"/><category term="refactoring"/><category term="spring"/><category term="technical debt"/><category term="throughput"/><category term="wip"/><category term="CRUD"/><category term="HTMLParser"/><category term="IDE"/><category term="MBean"/><category term="MBeanExporter"/><category term="PaaS"/><category term="SOAP"/><category term="TestUtil"/><category term="abstract data type"/><category term="ajax"/><category term="app engine"/><category term="architectural debt"/><category term="archives"/><category term="atom"/><category term="auto-deploy"/><category term="availability"/><category term="aws"/><category term="backlog"/><category term="backup"/><category term="backups for mac"/><category term="base types"/><category term="blogger"/><category term="boolean"/><category term="business case"/><category term="caching"/><category term="cactus"/><category term="cargo"/><category term="cascading"/><category term="cassandra"/><category term="cloud computing"/><category term="commons-logging"/><category term="concurrency"/><category term="configuration debt"/><category term="cross-functional"/><category term="cross-team dependencies"/><category term="csv"/><category term="curl"/><category term="deploy"/><category term="design philosophy"/><category term="development"/><category term="download"/><category term="easymock"/><category term="emacs"/><category term="erlang"/><category term="esr"/><category term="evidence-based scheduling"/><category term="getters"/><category term="hadoop"/><category term="hbase"/><category term="hosting"/><category term="http"/><category term="hypermedia"/><category term="inheritance"/><category term="inheritance hierarchy"/><category term="innovation"/><category term="integration test"/><category term="interface"/><category term="iteration length"/><category term="jconsole"/><category term="joel on software"/><category term="jsp"/><category term="jsp method calls"/><category term="kaizen"/><category term="ken schwaber"/><category term="key-value stores"/><category term="lab week"/><category term="lean engineering"/><category term="littles law"/><category term="logging"/><category term="mac osx backups"/><category term="management"/><category term="maven2"/><category term="message passing"/><category term="microservices"/><category term="mock objects"/><category term="monte carlo simulation"/><category term="negotiation"/><category term="neo4j"/><category term="nosql"/><category term="nosqleast"/><category term="oop"/><category term="optimization"/><category term="pig"/><category term="planning poker"/><category term="pmd"/><category term="prioritization"/><category term="prototype"/><category term="redis"/><category term="release management"/><category term="resolution"/><category term="rest programming"/><category term="riak"/><category term="rsync"/><category term="sashimi"/><category term="scrum of scrums"/><category term="scrum planning session"/><category term="scrum pre-planning"/><category term="scrum story planning"/><category term="service"/><category term="setters"/><category term="shell script"/><category term="simple mac backups"/><category term="software design"/><category term="sprint"/><category term="sprint goal"/><category term="sprint planning"/><category term="sprint pre planning"/><category term="sprint review"/><category term="ssh"/><category term="story points"/><category term="subclassing"/><category term="super"/><category term="taglib"/><category term="tasks"/><category term="tco"/><category term="tdd"/><category term="tomcat deploy script"/><category term="trac"/><category term="transition debt"/><category term="unix"/><category term="voldemort"/><category term="war"/><category term="waterfall"/><category term="web applications"/><category term="web2.0"/><category term="xhtml"/><title type='text'>codeartisan</title><subtitle type='html'>The Art of Writing Software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-7089904877557598622</id><published>2019-11-06T14:32:00.001-05:00</published><updated>2019-11-23T09:44:23.929-05:00</updated><title type='text'>Complex Systems Talk at Philly DevOpsDays</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/complex-systems-talk-at-philly-devopsdays/&quot;&gt;https://blog.jonm.dev/posts/complex-systems-talk-at-philly-devopsdays/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/complex-systems-talk-at-philly-devopsdays/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/7089904877557598622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/7089904877557598622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7089904877557598622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7089904877557598622'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2019/11/complex-systems-talk-at-philly.html' title='Complex Systems Talk at Philly DevOpsDays'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-8987566680586740294</id><published>2019-10-18T09:40:00.002-04:00</published><updated>2019-11-23T09:43:27.868-05:00</updated><title type='text'>On People Leaving a Department</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/on-people-leaving-a-department/&quot;&gt;https://blog.jonm.dev/posts/on-people-leaving-a-department/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/on-people-leaving-a-department/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/8987566680586740294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/8987566680586740294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8987566680586740294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8987566680586740294'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2019/10/on-people-leaving-department.html' title='On People Leaving a Department'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-8162846748020450961</id><published>2019-05-11T17:41:00.000-04:00</published><updated>2019-11-23T09:42:50.768-05:00</updated><title type='text'>Running Concourse locally on Windows</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/running-concourse-locally-on-windows/&quot;&gt;https://blog.jonm.dev/posts/running-concourse-locally-on-windows/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/running-concourse-locally-on-windows/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/8162846748020450961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/8162846748020450961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8162846748020450961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8162846748020450961'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2019/05/running-concourse-locally-on-windows.html' title='Running Concourse locally on Windows'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-3530026303107335898</id><published>2015-11-28T14:42:00.000-05:00</published><updated>2019-11-23T09:42:07.043-05:00</updated><title type='text'>VerySillyMUD: Continuous Integration</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-continuous-integration/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-continuous-integration/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-continuous-integration/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/3530026303107335898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/3530026303107335898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3530026303107335898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3530026303107335898'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/11/verysillymud-continuous-integration.html' title='VerySillyMUD: Continuous Integration'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-5064049418254686579</id><published>2015-11-20T21:24:00.001-05:00</published><updated>2019-11-23T09:41:09.931-05:00</updated><title type='text'>VerySillyMUD: Adding autotools</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-adding-autotools/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-adding-autotools/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-adding-autotools/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/5064049418254686579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/5064049418254686579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/5064049418254686579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/5064049418254686579'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/11/verysillymud-adding-autotools.html' title='VerySillyMUD: Adding autotools'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-344420036814112586</id><published>2015-11-14T22:00:00.001-05:00</published><updated>2019-11-23T09:40:12.750-05:00</updated><title type='text'>VerySillyMUD: Fixing the Rest of the Compiler Warnings</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-fixing-the-rest-of-the-compiler-warnings/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-fixing-the-rest-of-the-compiler-warnings/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-fixing-the-rest-of-the-compiler-warnings/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/344420036814112586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/344420036814112586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/344420036814112586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/344420036814112586'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/11/verysillymud-fixing-more-compiler.html' title='VerySillyMUD: Fixing the Rest of the Compiler Warnings'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-6041098817535641388</id><published>2015-11-08T16:22:00.000-05:00</published><updated>2019-11-23T09:39:32.190-05:00</updated><title type='text'>VerySillyMUD: Understanding a Function with Tests</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-understanding-a-function-with-tests/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-understanding-a-function-with-tests/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-understanding-a-function-with-tests/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/6041098817535641388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/6041098817535641388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/6041098817535641388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/6041098817535641388'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/11/verysillymud-understanding-function.html' title='VerySillyMUD: Understanding a Function with Tests'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-1423886551328771952</id><published>2015-10-19T16:44:00.000-04:00</published><updated>2019-11-18T13:59:37.152-05:00</updated><title type='text'>VerySillyMUD: Unit Tests</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-unit-tests/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-unit-tests/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href=&quot;https://blog.jonm.dev/posts/verysillymud-unit-tests/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/1423886551328771952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/1423886551328771952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/1423886551328771952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/1423886551328771952'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-unit-tests.html' title='VerySillyMUD: Unit Tests'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-485116288439690164</id><published>2015-10-11T23:16:00.000-04:00</published><updated>2019-11-18T13:58:58.196-05:00</updated><title type='text'>VerySillyMUD: Cleaning Up the Warnings</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-cleaning-up-the-warnings/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-cleaning-up-the-warnings/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href=&quot;https://blog.jonm.dev/posts/verysillymud-cleaning-up-the-warnings/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/485116288439690164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/485116288439690164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/485116288439690164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/485116288439690164'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-cleaning-up-warnings.html' title='VerySillyMUD: Cleaning Up the Warnings'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-7893506768665126738</id><published>2015-10-10T15:01:00.001-04:00</published><updated>2019-11-18T13:58:02.346-05:00</updated><title type='text'>VerySillyMUD: A Lesson About Compiler Warnings</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-a-lesson-about-compiler-warnings/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-a-lesson-about-compiler-warnings/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href=&quot;https://blog.jonm.dev/posts/verysillymud-a-lesson-about-compiler-warnings/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/7893506768665126738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/7893506768665126738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7893506768665126738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7893506768665126738'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-lesson-about-compiler.html' title='VerySillyMUD: A Lesson About Compiler Warnings'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-4832162056190599765</id><published>2015-10-03T22:47:00.000-04:00</published><updated>2019-11-18T13:57:14.878-05:00</updated><title type='text'>VerySillyMUD: Remaining compilation errors</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-remaining-compilation-errors/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-remaining-compilation-errors/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-remaining-compilation-errors/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/4832162056190599765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/4832162056190599765' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/4832162056190599765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/4832162056190599765'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-remaining-compilation.html' title='VerySillyMUD: Remaining compilation errors'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-2279759453461034532</id><published>2015-10-03T17:27:00.003-04:00</published><updated>2019-11-18T13:56:35.056-05:00</updated><title type='text'>VerySillyMUD: Compilation</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-compilation/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-compilation/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href=&quot;https://blog.jonm.dev/posts/verysillymud-compilation/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/2279759453461034532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/2279759453461034532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/2279759453461034532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/2279759453461034532'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-compilation.html' title='VerySillyMUD: Compilation'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-3163644396826326584</id><published>2015-10-03T15:26:00.002-04:00</published><updated>2019-11-18T13:53:16.508-05:00</updated><title type='text'>VerySillyMUD: An Exercise In Refactoring: Intro</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/verysillymud-an-exercise-in-refactoring-intro/&quot;&gt;https://blog.jonm.dev/posts/verysillymud-an-exercise-in-refactoring-intro/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/verysillymud-an-exercise-in-refactoring-intro/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/3163644396826326584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/3163644396826326584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3163644396826326584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3163644396826326584'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/10/verysillymud-exercise-in-refactoring.html' title='VerySillyMUD: An Exercise In Refactoring: Intro'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-7064025379581637235</id><published>2015-07-14T09:31:00.000-04:00</published><updated>2019-11-18T13:52:40.511-05:00</updated><title type='text'>Notes from QCon New York 2015</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/notes-from-qcon-new-york-2015/&quot;&gt;https://blog.jonm.dev/posts/notes-from-qcon-new-york-2015/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/notes-from-qcon-new-york-2015/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/7064025379581637235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/7064025379581637235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7064025379581637235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7064025379581637235'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/07/notes-from-qcon-new-york-2015.html' title='Notes from QCon New York 2015'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-8878201282035315832</id><published>2015-02-07T17:41:00.002-05:00</published><updated>2019-11-18T13:51:53.435-05:00</updated><title type='text'>Does jQuery expose a monadic interface?</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/does-jquery-expose-a-monadic-interface/&quot;&gt;https://blog.jonm.dev/posts/does-jquery-expose-a-monadic-interface/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/does-jquery-expose-a-monadic-interface/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/8878201282035315832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/8878201282035315832' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8878201282035315832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8878201282035315832'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/02/does-jquery-expose-monadic-interface.html' title='Does jQuery expose a monadic interface?'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-3823131714120672819</id><published>2015-01-17T16:01:00.001-05:00</published><updated>2019-11-18T13:51:05.849-05:00</updated><title type='text'>Installing Ubuntu on an old Macbook</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/installing-ubuntu-on-an-old-macbook/&quot;&gt;https://blog.jonm.dev/posts/installing-ubuntu-on-an-old-macbook/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/installing-ubuntu-on-an-old-macbook/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/3823131714120672819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/3823131714120672819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3823131714120672819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/3823131714120672819'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2015/01/installing-ubuntu-on-old-macbook.html' title='Installing Ubuntu on an old Macbook'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/00968563763838190660</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-6964478124212921134</id><published>2012-09-21T23:52:00.000-04:00</published><updated>2019-11-18T13:50:23.655-05:00</updated><title type='text'>Hackday project: tarpio.us</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/hackday-project-tarpio-us/&quot;&gt;https://blog.jonm.dev/posts/hackday-project-tarpio-us/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/hackday-project-tarpio-us/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/6964478124212921134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/6964478124212921134' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/6964478124212921134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/6964478124212921134'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2012/09/hackday-project-tarpious.html' title='Hackday project: tarpio.us'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-9178432424713293968</id><published>2012-09-01T07:48:00.000-04:00</published><updated>2019-11-18T13:49:30.740-05:00</updated><title type='text'>Resources and Query Parameters</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/resources-and-query-parameters/&quot;&gt;https://blog.jonm.dev/posts/resources-and-query-parameters/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/resources-and-query-parameters/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/9178432424713293968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/9178432424713293968' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/9178432424713293968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/9178432424713293968'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2012/09/resources-and-query-parameters.html' title='Resources and Query Parameters'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-2581447875606004842</id><published>2012-08-30T23:37:00.000-04:00</published><updated>2019-11-18T13:20:19.724-05:00</updated><title type='text'>Hypermedia Programming: Lists</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/hypermedia-programming-lists/&quot;&gt;https://blog.jonm.dev/posts/hypermedia-programming-lists/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/hypermedia-programming-lists/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/2581447875606004842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/2581447875606004842' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/2581447875606004842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/2581447875606004842'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2012/08/hypermedia-programming-lists.html' title='Hypermedia Programming: Lists'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-585072936045823676</id><published>2012-07-10T01:55:00.000-04:00</published><updated>2019-11-18T13:18:54.026-05:00</updated><title type='text'>Using HTML as the Media Type for your API</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/using-html-as-the-media-type-for-your-api/&quot;&gt;https://blog.jonm.dev/posts/using-html-as-the-media-type-for-your-api/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/using-html-as-the-media-type-for-your-api/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/585072936045823676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/585072936045823676' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/585072936045823676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/585072936045823676'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2012/07/using-html-as-media-type-for-your-api.html' title='Using HTML as the Media Type for your API'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-8677414750617399992</id><published>2010-11-27T09:17:00.009-05:00</published><updated>2010-11-30T10:03:55.726-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="development"/><category scheme="http://www.blogger.com/atom/ns#" term="flow"/><category scheme="http://www.blogger.com/atom/ns#" term="management"/><category scheme="http://www.blogger.com/atom/ns#" term="metrics"/><category scheme="http://www.blogger.com/atom/ns#" term="process improvement"/><category scheme="http://www.blogger.com/atom/ns#" term="queuing theory"/><title type='text'>Managing Software Development Flow</title><content type='html'>&lt;p&gt;This is the third post in a series about &lt;i&gt;software development flow&lt;/i&gt;, which I&#39;m describing as the conversion of customer requests (both for new features as well as bug reports) into working software. In the &lt;a href=&quot;http://codeartisan.blogspot.com/2010/11/how-to-go-faster.html&quot;&gt;first post&lt;/a&gt; on this topic, we talked about how a software development organization can be viewed as a request processing engine, and how &lt;a href=&quot;http://en.wikipedia.org/wiki/Queueing_theory&quot;&gt;queuing theory&lt;/a&gt; (and &lt;a href=&quot;http://en.wikipedia.org/wiki/Little&#39;s_law&quot;&gt;Little&#39;s Law&lt;/a&gt; in particular) can be applied to optimize overall throughput and time-to-market (also called &quot;cycle time&quot;). In the &lt;a href=&quot;http://codeartisan.blogspot.com/2010/11/intuitions-about-software-development.html&quot;&gt;second article&lt;/a&gt;, we revisited these same concepts with a more intuitive explanation and started to identify the management tradeoffs that come into play. This article will focus mostly on this final area: what metrics are important for management to understand, and what are some mechanisms/levers they can apply to try to optimize throughput?&lt;/p&gt;

&lt;p&gt;I am being intentionally vague about particular processes here, since these principles can be applied regardless of particular process. I will also not talk about particular functional specialities like UX, Development, QA, or Ops; whether you have a staged waterfall process or a fully cross-functional agile team, the underlying theory still applies. Now, the adjustments we talk about here will have the greatest effect when applied to the greatest organizational scope (for example, including everything from customer request intake all the way to delivering working software), but Little&#39;s Law says they can also be applied to individual subsystems (for example, perhaps just Dev/QA/Ops taken together, or even just Ops) as well. Of course, the more you focus on individual parts of the system, the more likely you are to locally optimize, perhaps to the detriment of the system as a whole.&lt;/p&gt;

&lt;h2&gt;Managing Queuing Delay&lt;/h2&gt;

&lt;p&gt;As we&#39;ve seen previously, at least some of the time a customer request is moving through our organization, it isn&#39;t being actively worked on; this time is known as &lt;i&gt;queuing delay&lt;/i&gt;. There are different potential causes of queuing delay, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;batching:&lt;/b&gt; if we group individual, independent features together into batches (like sprints or releases), then some of the time an individual feature will either be waiting for its turn to get worked on or it will be waiting for the other features in the batch to get finished&lt;/li&gt;
&lt;li&gt;&lt;b&gt;multitasking:&lt;/b&gt; if people can have more than one task assigned, they can still only work on one thing at a time, so their other tasks will be in a wait state&lt;/li&gt;
&lt;li&gt;&lt;b&gt;backlogs:&lt;/b&gt; these are explicit queues where features wait their turn for implementation&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simplest way to observe queuing delay is to measure it directly: &lt;b&gt;what percentage of my in-flight items don&#39;t have someone actively working on them?&lt;/b&gt; If your process is visualized, perhaps with a &lt;a href=&quot;http://www.infoq.com/articles/agile-kanban-boards&quot;&gt;kanban board&lt;/a&gt;, and you use avatars for your people to show what they are working on, then this is no harder than counting how many in-flight items don&#39;t have an avatar on them.&lt;/p&gt;

&lt;p&gt;[ Side note: if you have also measured your overall delivery throughput &lt;i&gt;X&lt;/i&gt;, Little&#39;s Law says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;i&gt;N&lt;span style=&quot;vertical-align:sub;text-size:smaller&quot;&gt;Q&lt;/span&gt; / N = XR&lt;span style=&quot;vertical-align:sub;text-size:smaller&quot;&gt;Q&lt;/span&gt; / XR = R&lt;span style=&quot;vertical-align:sub;text-size:smaller&quot;&gt;Q&lt;/span&gt;/R&lt;/i&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, your queuing delay &lt;i&gt;R&lt;span style=&quot;vertical-align:sub;text-size:smaller&quot;&gt;Q&lt;/span&gt;&lt;/i&gt; is the same percentage of your overall cycle time &lt;i&gt;R&lt;/i&gt; as the number of queued items &lt;i&gt;N&lt;span style=&quot;vertical-align:sub;text-size:smaller&quot;&gt;Q&lt;/span&gt;&lt;/i&gt; is to the overall number of in-flight items &lt;i&gt;N&lt;/i&gt;. So you can actually &lt;b&gt;measure&lt;/b&gt; your queuing delay pretty easily this way.]&lt;/p&gt;

&lt;p&gt;The primary mechanism, then, for reducing queuing delay is to reduce the number of in-flight items allowed in the system. One simple mechanism for managing this is to adopt a &quot;one-in-one-out&quot; mechanism that admits new feature requests only when a previous feature has been delivered; this puts a cap on the number of in-flight items &lt;i&gt;N&lt;/i&gt;. We can then periodically (perhaps once a week, or once an iteration) reduce &lt;i&gt;N&lt;/i&gt; by taking a slot out: in essence, when we finish one feature request, we &lt;i&gt;don&#39;t&lt;/i&gt; admit a new one, thus reducing the number of overall requests in-flight.&lt;/p&gt;

&lt;p&gt;Undoubtedly there will come a time when a high priority request shows up, and there would be too much opportunity cost to waiting for something else to finish up so it can be inserted. One possibility here is to flag this request as an emergency, perhaps by attaching a red flag to it on a kanban board to note its priority, and temporarily allow that new request in, with the notion that we will &lt;i&gt;not&lt;/i&gt; admit a new feature request once the emergency feature finishes.&lt;/p&gt;

&lt;h2&gt;Managing Failure Demand&lt;/h2&gt;

&lt;p&gt;Recall that failure demand consists of requests we have to deal with because we didn&#39;t deliver something quite right the first time--think production outages or user bug reports. Failure demand can be quite expensive: according to &lt;a href=&quot;http://www.superwebdeveloper.com/2009/11/25/the-incredible-rate-of-diminishing-returns-of-fixing-software-bugs/&quot;&gt;one estimate&lt;/a&gt;, fixing a bug in production can be more than 15 times as expensive than correcting it during development. In other words, &lt;b&gt;having work show up as failure demand is probably the most expensive possible way to get that work done.&lt;/b&gt; Cost aside, however, any amount of failure demand that shows up detracts from our ability to service value demand--the new features our customers want.&lt;/p&gt;

&lt;p&gt;From a monitoring and metrics perspective, we simply compute the percentage of all in-flight requests that are failure demand. Now the question is how to manage that percentage downward so that we aren&#39;t paying as much of a failure demand tax on new development.&lt;/p&gt;

&lt;p&gt;To get rid of existing failure demand, we need to address the root causes for these issues. Ideally, we would want to do a root cause analysis and fix for &lt;i&gt;every&lt;/i&gt; incident (this is the long-term cheapest way to deal with the problems), but for organizations already experiencing high failure demand, this might temporarily drag new feature development to a halt. An alternative is to have a single &quot;root cause fix&quot; token that circulates through the organization: if it is not being used, then the next incident to arrive gets the token assigned. We do a root cause analysis and fix for &lt;i&gt;that issue&lt;/i&gt;, then when we&#39;ve finished that, the token frees up and we look for the next issue to fix. This approach caps the labor investment in root cause analysis fixing, and will, probabilistically, end up fixing the most common issues first. Over time, this will gradually wear away at the causes of existing failure demand. It&#39;s worth noting that you may not have to go to the uber root cause to have a positive effect--just fixing the issue in a way that makes it less likely to occur again will ultimately reduce failure demand.&lt;/p&gt;

&lt;p&gt;However, we haven&#39;t addressed the upstream sources of failure demand yet; if we chip away at existing failure demand but continue to pile more on via new feature development, we&#39;ll ultimately lose ground. &lt;b&gt;The primary cause of new failure demand is  trying to hit an aggressive deadline with a fixed scope&lt;/b&gt;--something has to give here, and what usually gives is quality. There may well be reasons that this is the right tradeoff to make; perhaps there are marketing campaigns scheduled to start or contractual obligations that must be met (we&#39;ll save a discussion for how those dates got planned for another time). At any rate, management needs to understand the tradeoffs that are being made, and needs to be given the readouts to responsibly govern the process. &quot;Percent failure demand&quot; turns out to be a pretty simple and informative metric.&lt;/p&gt;
 
&lt;h2&gt;Managing Cycle Time&lt;/h2&gt;

&lt;p&gt;Draining queuing delay and tackling failure demand are pretty much no-brainers: they are easy to track, and there are easy-to-understand ways to reduce both. However, once we&#39;ve gotten all the gains we can out of those two prongs of attack, all that is left is trying to further reduce cycle time (and hence raise throughput) via process change. This is much harder--there are no silver bullets here. Although there are any number of folks who will claim to &quot;know&quot; the process changes that are needed here, ranging from Agile consultants, to other managers, to the folks working on the software itself, the reality is that these ideas aren&#39;t really guaranteed solutions. They are, however, a really good source of process experiments to run.&lt;/p&gt;

&lt;p&gt;Measuring cycle time is important, because thanks to queuing theory and Little&#39;s Law, it directly corresponds to throughput in a system with a fixed set of work in-flight. Furthermore, it is very easy to measure average cycle time; the data can be collected by hand and run through a spreadsheet with little real effort. This makes it an ideal metric for evaluating a process change experiment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if cycle time decreases, keep the process change as an improvement&lt;/li&gt;
&lt;li&gt;if cycle time increases, revert back to the old process and try something different&lt;/li&gt;
&lt;li&gt;if cycle time is not affected, you might as well keep the change but still look for improvement somewhere else&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping &quot;no-effect&quot; process changes in place sets the stage for a culture of continual process improvement; it encourages experimentation if nothing else (and the cycle time measurements have indicated it hasn&#39;t hurt). Now, regardless of the experiment, it&#39;s important to set a timebox around the experiment so that we can evaluate it: &quot;let&#39;s try it this way for a month and see what happens&quot;. New processes take time to sink in, so it&#39;s important not to run experiments that are too short--we want to give the new process a chance to shake out and see what it can really do. It&#39;s also worth noting here that managers should expect some of the experiments to &quot;fail&quot; with increased cycle time or to have no appreciable effect. This is unfortunately the nature of the scientific method--if we could be prescient we&#39;d just jump straight to the optimized process--but this is a tried and true method for learning.&lt;/p&gt;

&lt;p&gt;Now, process change requires effort to roll out, so a good question to ask here is how to find the time/people to carry this out. There&#39;s a related performance tuning concept here known as the &lt;a href=&quot;http://en.wikipedia.org/wiki/Theory_of_Constraints&quot;&gt;Theory of Constraints&lt;/a&gt;, which I&#39;ll just paraphrase as &quot;there&#39;s always a bottleneck somewhere.&quot; If we keep reducing work in-flight, and we have the end-to-end process visualized somewhere, we should be able to see where the bottleneck in the process is. The Theory of Constraints also says that you don&#39;t need to take on any more work than the bottleneck can process, which means, depending on your process and organizational structure, that we may find that we can apply folks both &quot;upstream&quot; and &quot;downstream&quot; of the bottleneck to a process change experiment &lt;b&gt;without actually decreasing overall throughput&lt;/b&gt;. Furthermore, by identifying the bottleneck, we have a good starting point for &lt;i&gt;selecting&lt;/i&gt; an experiment to run: let&#39;s try something that will alleviate the bottleneck (or, as the Theory of Constraints says, just move it elsewhere).&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In this article, we&#39;ve seen that managers really only need a few easy-to-collect metrics on an end-to-end software delivery flow to enable them to optimize throughput:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;total number of items in-flight&lt;/li&gt;
&lt;li&gt;number of &quot;idle&quot; in-flight items (not actively being worked)&lt;/li&gt;
&lt;li&gt;number of in-flight items that are failure demand&lt;/li&gt;
&lt;li&gt;end-to-end average cycle time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We&#39;ve also identified several mechanisms, ranging from reducing work-in-progress to root cause fixes of failure demand, that can enable managers to perform optimizations on their process &lt;i&gt;at a pace that suits the business&lt;/i&gt;. This is the classic empirical process control (&quot;inspect and adapt&quot;) model that has been demonstrated to work effectively time and again in many settings, from the shop floor of Toyota factories to the team rooms of agile development organizations.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/8677414750617399992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/8677414750617399992' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8677414750617399992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/8677414750617399992'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2010/11/managing-software-development-flow.html' title='Managing Software Development Flow'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-5062957053625057189</id><published>2010-11-25T06:37:00.011-05:00</published><updated>2019-11-18T13:18:06.859-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cycle time"/><category scheme="http://www.blogger.com/atom/ns#" term="flow"/><category scheme="http://www.blogger.com/atom/ns#" term="optimization"/><category scheme="http://www.blogger.com/atom/ns#" term="throughput"/><title type='text'>Intuitions about Software Development Flow</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/intuitions-about-software-development-flow/&quot;&gt;https://blog.jonm.dev/posts/intuitions-about-software-development-flow/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/intuitions-about-software-development-flow/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/5062957053625057189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/5062957053625057189' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/5062957053625057189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/5062957053625057189'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2010/11/intuitions-about-software-development.html' title='Intuitions about Software Development Flow'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-7784093812384051574</id><published>2010-11-19T21:11:00.014-05:00</published><updated>2019-11-18T13:17:23.179-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cycle time"/><category scheme="http://www.blogger.com/atom/ns#" term="flow"/><category scheme="http://www.blogger.com/atom/ns#" term="kanban"/><category scheme="http://www.blogger.com/atom/ns#" term="littles law"/><category scheme="http://www.blogger.com/atom/ns#" term="process improvement"/><category scheme="http://www.blogger.com/atom/ns#" term="throughput"/><title type='text'>How to Go Faster</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/how-to-go-faster/&quot;&gt;https://blog.jonm.dev/posts/how-to-go-faster/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/how-to-go-faster/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/7784093812384051574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/7784093812384051574' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7784093812384051574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/7784093812384051574'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2010/11/how-to-go-faster.html' title='How to Go Faster'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-843557200279799073</id><published>2010-10-29T21:11:00.002-04:00</published><updated>2019-11-18T13:16:34.250-05:00</updated><title type='text'>Tales of Test-Driven Development</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/tales-of-test-driven-development/&quot;&gt;https://blog.jonm.dev/posts/tales-of-test-driven-development/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/tales-of-test-driven-development/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/843557200279799073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/843557200279799073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/843557200279799073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/843557200279799073'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2010/10/tales-of-test-driven-development.html' title='Tales of Test-Driven Development'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-631933842798219175.post-4715356872960854277</id><published>2010-09-26T07:52:00.005-04:00</published><updated>2019-11-18T13:15:48.830-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile"/><category scheme="http://www.blogger.com/atom/ns#" term="kanban"/><category scheme="http://www.blogger.com/atom/ns#" term="process improvement"/><category scheme="http://www.blogger.com/atom/ns#" term="scrum"/><category scheme="http://www.blogger.com/atom/ns#" term="wip"/><title type='text'>The Power of Visualizing Iterative Waterfall</title><content type='html'>This content has moved permanently to:&lt;br /&gt;
&lt;a href=&quot;https://blog.jonm.dev/posts/the-power-of-visualizing-iterative-waterfall/&quot;&gt;https://blog.jonm.dev/posts/the-power-of-visualizing-iterative-waterfall/&lt;/a&gt;&lt;br /&gt;
&lt;script&gt;
window.location.href = &quot;https://blog.jonm.dev/posts/the-power-of-visualizing-iterative-waterfall/&quot;;
&lt;/script&gt;&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;p&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1136626927500183&quot;;
/* 468x60, created 9/8/08 */
google_ad_slot = &quot;4192662419&quot;;
google_ad_width = 468;
google_ad_height = 60;
//--&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;
&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codeartisan.blogspot.com/feeds/4715356872960854277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/631933842798219175/4715356872960854277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/4715356872960854277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/631933842798219175/posts/default/4715356872960854277'/><link rel='alternate' type='text/html' href='http://codeartisan.blogspot.com/2010/09/power-of-visualizing-iterative.html' title='The Power of Visualizing Iterative Waterfall'/><author><name>Jon Moore</name><uri>http://www.blogger.com/profile/16766484929210129406</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>