<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://citconf.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Douglassquirrel</id>
	<title>CitconWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://citconf.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Douglassquirrel"/>
	<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Special:Contributions/Douglassquirrel"/>
	<updated>2026-06-03T20:11:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=16174</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=16174"/>
		<updated>2016-03-28T11:31:42Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consulting CTO and executive coach - in a few months, I can fix what&#039;s broken in a development team and grow its internal leadership. See http://douglassquirrel.com for more.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
&lt;br /&gt;
* I helped with the [[One_Day_To_Live_Elephant_Carpaccio]] session at CITCON Helsinki 2015.&lt;br /&gt;
* I helped with the [[How_to_be_awesome]], [[MicroservicesComboStyle]], and [[Normal_Accidents_and_Root_Cause_Analysis]] sessions at CITCON Zagreb 2014.&lt;br /&gt;
* I helped with the [[Continuous_Rewriting]] session at CITCON Turin 2013.&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am always happy to talk to anyone about any of the tools or ideas I discussed in these sessions.&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15994</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15994"/>
		<updated>2015-09-12T12:01:00Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org and https://en.m.wikipedia.org/wiki/Spaced_repetition)&lt;br /&gt;
&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
&lt;br /&gt;
* 7 stages of naming - Belshee https://mobile.twitter.com/arlobelshee/status/636605852984545280/photo/1&lt;br /&gt;
  * nonsense&lt;br /&gt;
  * honest&lt;br /&gt;
  * honest &amp;amp; complete&lt;br /&gt;
  * does the right thing&lt;br /&gt;
  * intent&lt;br /&gt;
  * domain abstraction&lt;br /&gt;
&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
&lt;br /&gt;
7. larger modifications&lt;br /&gt;
&lt;br /&gt;
8. mocking&lt;br /&gt;
&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;br /&gt;
&lt;br /&gt;
Note mobbing works great to de-risk turnover and improve onboarding - a nine-year-old girl joined a mob and made a meaningful contribution as both driver and navigator&lt;br /&gt;
&lt;br /&gt;
Llewelyn has not tried remote mobbing, but has been tried with one remote person (in an experienced mob) at Hunter&lt;br /&gt;
&lt;br /&gt;
mobbing coaching tips https://github.com/isidore/AgileTechinicalCoaching/blob/master/Coaching%20CheatSheet.md&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15989</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15989"/>
		<updated>2015-09-12T11:55:08Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org and https://en.m.wikipedia.org/wiki/Spaced_repetition)&lt;br /&gt;
&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
&lt;br /&gt;
* 7 stages of naming - Belshee https://mobile.twitter.com/arlobelshee/status/636605852984545280/photo/1&lt;br /&gt;
  * nonsense&lt;br /&gt;
  * honest&lt;br /&gt;
  * honest &amp;amp; complete&lt;br /&gt;
  * does the right thing&lt;br /&gt;
  * intent&lt;br /&gt;
  * domain abstraction&lt;br /&gt;
&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
&lt;br /&gt;
7. larger modifications&lt;br /&gt;
&lt;br /&gt;
8. mocking&lt;br /&gt;
&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;br /&gt;
&lt;br /&gt;
Note mobbing works great to de-risk turnover and improve onboarding - a nine-year-old girl joined a mob and made a meaningful contribution as both driver and navigator&lt;br /&gt;
&lt;br /&gt;
Llewelyn has not tried remote mobbing, but has been tried with one remote person (in an experienced mob) at Hunter&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15979</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15979"/>
		<updated>2015-09-12T11:42:47Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org and https://en.m.wikipedia.org/wiki/Spaced_repetition)&lt;br /&gt;
&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
&lt;br /&gt;
* 7 stages of naming - Belshee https://mobile.twitter.com/arlobelshee/status/636605852984545280/photo/1&lt;br /&gt;
  * nonsense&lt;br /&gt;
  * honest&lt;br /&gt;
  * honest &amp;amp; complete&lt;br /&gt;
  * does the right thing&lt;br /&gt;
  * intent&lt;br /&gt;
  * domain abstraction&lt;br /&gt;
&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
&lt;br /&gt;
7. larger modifications&lt;br /&gt;
&lt;br /&gt;
8. mocking&lt;br /&gt;
&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15978</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15978"/>
		<updated>2015-09-12T11:38:45Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org)&lt;br /&gt;
&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
&lt;br /&gt;
* 7 stages of naming - Belshee https://mobile.twitter.com/arlobelshee/status/636605852984545280/photo/1&lt;br /&gt;
  * nonsense&lt;br /&gt;
  * honest&lt;br /&gt;
  * honest &amp;amp; complete&lt;br /&gt;
  * does the right thing&lt;br /&gt;
  * intent&lt;br /&gt;
  * domain abstraction&lt;br /&gt;
&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
&lt;br /&gt;
7. larger modifications&lt;br /&gt;
&lt;br /&gt;
8. mocking&lt;br /&gt;
&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15977</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15977"/>
		<updated>2015-09-12T11:36:32Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org)&lt;br /&gt;
&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
&lt;br /&gt;
* 7 stages of naming - Belshee&lt;br /&gt;
  * nonsense&lt;br /&gt;
  * honest&lt;br /&gt;
  * honest &amp;amp; complete&lt;br /&gt;
  * does the right thing&lt;br /&gt;
  * intent&lt;br /&gt;
  * domain abstraction&lt;br /&gt;
&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
&lt;br /&gt;
7. larger modifications&lt;br /&gt;
&lt;br /&gt;
8. mocking&lt;br /&gt;
&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15976</id>
		<title>Path From Legacy Code To Unit Tests</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Path_From_Legacy_Code_To_Unit_Tests&amp;diff=15976"/>
		<updated>2015-09-12T11:30:26Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: Created page with &amp;quot;Llewellyn Falco http://llewellynfalco.blogspot.co.uk  1. organise team to do 2 hours of mob programming a day (see mobprogramming.org) 2. get into habit of extracting methods...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Llewellyn Falco http://llewellynfalco.blogspot.co.uk&lt;br /&gt;
&lt;br /&gt;
1. organise team to do 2 hours of mob programming a day (see mobprogramming.org)&lt;br /&gt;
2. get into habit of extracting methods and renaming - that&#039;s all the mob does to start&lt;br /&gt;
7 stages of naming - Belshee&lt;br /&gt;
  nonsense&lt;br /&gt;
  honest&lt;br /&gt;
  honest &amp;amp; complete&lt;br /&gt;
  does the right thing&lt;br /&gt;
  intent&lt;br /&gt;
  domain abstraction&lt;br /&gt;
(Note TDD starts at end - domain abstraction - and works backward!)&lt;br /&gt;
3. repeat until you find a functional component (input-&amp;gt;deterministic processing-&amp;gt;output)&lt;br /&gt;
4. create unit test using poking. Determine what the functional component does by passing in simple, valid, self-documenting values like 0, 1, &amp;quot;FirstName&amp;quot;, &amp;quot;FlightNumber&amp;quot;, or even null. Whatever it returns (if not an exception) is right - put it into a test and check it in&lt;br /&gt;
5. start measuring code coverage&lt;br /&gt;
6. so far we have been extracting functional components by accident - now we can start making simple changes, like extracting parameters previously read from a web request, that make components functional&lt;br /&gt;
7. larger modifications&lt;br /&gt;
8. mocking&lt;br /&gt;
9. modifictation to lighten the mocks&lt;br /&gt;
10. now we can actually do a little bit of test-first!&lt;br /&gt;
&lt;br /&gt;
this takes a couple of months at 2 hours/day&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=CITCONEurope2015Sessions&amp;diff=15975</id>
		<title>CITCONEurope2015Sessions</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=CITCONEurope2015Sessions&amp;diff=15975"/>
		<updated>2015-09-12T11:25:35Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* 2:00 Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CITCON Europe 2015 Helsinki Sessions&lt;br /&gt;
&lt;br /&gt;
Back to the [[Main Page]]&lt;br /&gt;
&lt;br /&gt;
== 10:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[Test Tools The Next Generation]]&lt;br /&gt;
# [[Advanced Unit Testing]]&lt;br /&gt;
# [[One Day To Live Elephant Carpaccio]]&lt;br /&gt;
# [[Alerts Everywhere]]&lt;br /&gt;
# [[GIT Branching]]&lt;br /&gt;
&lt;br /&gt;
== 11:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[Dynamic CI Automatic Test Scope]]&lt;br /&gt;
# [[Performance Testing]]&lt;br /&gt;
# [[Why Should I Dockerize My App?]]&lt;br /&gt;
# [[Manual QA Without Tears]]&lt;br /&gt;
# [[Automation vs Security]]&lt;br /&gt;
&lt;br /&gt;
== Lunch Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
&lt;br /&gt;
== 2:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[Test Automation Pyramid Adoption]]&lt;br /&gt;
# [[Path From Legacy Code To Unit Tests]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
&lt;br /&gt;
== 3:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
&lt;br /&gt;
== 4:30 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
# [[...]]&lt;br /&gt;
&lt;br /&gt;
== Table View ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Room name&lt;br /&gt;
! 10:00&lt;br /&gt;
! 11:15&lt;br /&gt;
! 2:00&lt;br /&gt;
! 3:15&lt;br /&gt;
! 4:30&lt;br /&gt;
|-&lt;br /&gt;
| Auditorium &lt;br /&gt;
| [[Test Tools The Next Generation]]&lt;br /&gt;
| [[Dynamic CI Automatic Test Scope]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| [[Advanced Unit Testing]]&lt;br /&gt;
| [[Performance Testing]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| [[One Day To Live Elephant Carpaccio]]&lt;br /&gt;
| [[Why Should I Dockerize My App?]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [[Alerts Everywhere]]&lt;br /&gt;
| [[Manual QA Without Tears]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [[GIT Branching]]&lt;br /&gt;
| [[Automation vs Security]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
| [[...]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15972</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15972"/>
		<updated>2015-09-12T09:14:54Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow - Gawande http://www.amazon.co.uk/The-Checklist-Manifesto-Things-Right/dp/1846683149&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list http://www.thebraidytester.com/downloads/YouAreNotDoneYet.pdf&lt;br /&gt;
&lt;br /&gt;
Little Black Book on test design Edgren - http://www.thetesteye.com/papers/TheLittleBlackBookOnTestDesign.pdf&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;br /&gt;
&lt;br /&gt;
One team spends one hour every morning on learning new things&lt;br /&gt;
&lt;br /&gt;
Tester pairing with dev can be silent but still trigger good testing behaviour - almost like a voodoo doll or cardboard cutout. To replicate more scalably, try setting time aside or make it fun - &amp;quot;I know she will complain about this, better add a test!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you need to switch between developer and testing modes, go for coffee in between - it&#039;s a big switch!&lt;br /&gt;
&lt;br /&gt;
If bored when testing, that&#039;s a signal that something is wrong! Try some techniques to change it up: test with others (even random people found on twitter) or keep a log of your thoughts during the testing session&lt;br /&gt;
&lt;br /&gt;
Dice game taught by Bolton and Bach: http://www.bettertesting.co.uk/content/?p=438 - helps you get into an exploratory testing mode&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15971</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15971"/>
		<updated>2015-09-12T09:11:47Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow - Gawande http://www.amazon.co.uk/The-Checklist-Manifesto-Things-Right/dp/1846683149&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;br /&gt;
&lt;br /&gt;
One team spends one hour every morning on learning new things&lt;br /&gt;
&lt;br /&gt;
Tester pairing with dev can be silent but still trigger good testing behaviour - almost like a voodoo doll or cardboard cutout. To replicate more scalably, try setting time aside or make it fun - &amp;quot;I know she will complain about this, better add a test!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you need to switch between developer and testing modes, go for coffee in between - it&#039;s a big switch!&lt;br /&gt;
&lt;br /&gt;
If bored when testing, that&#039;s a signal that something is wrong! Try some techniques to change it up: test with others (even random people found on twitter) or keep a log of your thoughts during the testing session&lt;br /&gt;
&lt;br /&gt;
Dice game taught by Bolton and Bach: http://www.bettertesting.co.uk/content/?p=438 - helps you get into an exploratory testing mode&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15970</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15970"/>
		<updated>2015-09-12T09:06:30Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow - Gawande http://www.amazon.co.uk/The-Checklist-Manifesto-Things-Right/dp/1846683149&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;br /&gt;
&lt;br /&gt;
One team spends one hour every morning on learning new things&lt;br /&gt;
&lt;br /&gt;
Tester pairing with dev can be silent but still trigger good testing behaviour - almost like a voodoo doll or cardboard cutout. To replicate more scalably, try setting time aside or make it fun - &amp;quot;I know she will complain about this, better add a test!&amp;quot;&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15969</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15969"/>
		<updated>2015-09-12T09:02:30Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow - Gawande http://www.amazon.co.uk/The-Checklist-Manifesto-Things-Right/dp/1846683149&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;br /&gt;
&lt;br /&gt;
One team spends one hour every morning on learning new things&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15968</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15968"/>
		<updated>2015-09-12T08:55:20Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;br /&gt;
&lt;br /&gt;
One team spends one hour every morning on learning new things&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15967</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15967"/>
		<updated>2015-09-12T08:51:51Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed - http://testobsessed.com/2007/02/test-heuristics-cheat-sheet/&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;br /&gt;
&lt;br /&gt;
If a tester takes on writing technical tests, a danger is that he or she may stop or lose the skill to do manual tests - ensure they do both&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15966</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15966"/>
		<updated>2015-09-12T08:48:06Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
&lt;br /&gt;
then introduce checklist for developers to follow&lt;br /&gt;
&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place&lt;br /&gt;
&lt;br /&gt;
Cheat Sheet by Hendrickson - test obsessed&lt;br /&gt;
 &lt;br /&gt;
You Ain&#039;t done yet list&lt;br /&gt;
&lt;br /&gt;
Tester does part-time tech support to get context and knowledge&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15964</id>
		<title>Manual QA Without Tears</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Manual_QA_Without_Tears&amp;diff=15964"/>
		<updated>2015-09-12T08:43:07Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: Created page with &amp;quot;new tester - use exploratory testing charters, file bugs then introduce checklist for developers to follow try moving checklist to JIRA tickets you can assign to multiple peop...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;new tester - use exploratory testing charters, file bugs&lt;br /&gt;
then introduce checklist for developers to follow&lt;br /&gt;
try moving checklist to JIRA tickets you can assign to multiple people (checklists can be better if used by many people, less checklist fatigue)&lt;br /&gt;
introduce a best before date for checklist items, remove and see if problem comes back&lt;br /&gt;
serendipity for tests: vary text used, persona simulated, avoid boredom and find more problems&lt;br /&gt;
Jerry Wineberg: Perfect Software and other Illusions - uncovering what the software was supposed to do in the first place&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15950</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15950"/>
		<updated>2015-09-11T06:24:21Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consulting CTO and executive coach - in a few months, I can fix what&#039;s broken in a development team and grow its internal leadership. See http://douglassquirrel.com for more.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
&lt;br /&gt;
* I helped with the [[How_to_be_awesome]], [[MicroservicesComboStyle]], and [[Normal_Accidents_and_Root_Cause_Analysis]] sessions at CITCON Zagreb 2014.&lt;br /&gt;
* I helped with the [[Continuous_Rewriting]] session at CITCON Turin 2013.&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am always happy to talk to anyone about any of the tools or ideas I discussed in these sessions.&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15949</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15949"/>
		<updated>2015-09-11T06:17:48Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consulting CTO and executive coach - in a few months, I can fix what&#039;s broken in a development team and grow its internal leadership. See http://douglassquirrel.com for more.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
&lt;br /&gt;
* I helped with the [[Continuous_Rewriting]] session at CITCON Turin 2013.&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am always happy to talk to anyone about any of the tools or ideas I discussed in these sessions.&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=MicroservicesComboStyle&amp;diff=15743</id>
		<title>MicroservicesComboStyle</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=MicroservicesComboStyle&amp;diff=15743"/>
		<updated>2014-09-21T10:34:41Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: Created page with &amp;quot;* What do we think micro services are.. *        We want to be able to rewrite services and remove legacy code **    Make all &amp;quot;objects&amp;quot; separate processes that can run on diff...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* What do we think micro services are..&lt;br /&gt;
*        We want to be able to rewrite services and remove legacy code&lt;br /&gt;
**    Make all &amp;quot;objects&amp;quot; separate processes that can run on different machines&lt;br /&gt;
**    Rather than single process tight binding between classes&lt;br /&gt;
**    We could run two of them on the same box to scale&lt;br /&gt;
**    Ability to rewrite each object even using different languages if required&lt;br /&gt;
**    Could communicate using direct RPC, e.g. as a fully meshed graph&lt;br /&gt;
***         Would require agreement on contracts between objects&lt;br /&gt;
***         Not favoured approach&lt;br /&gt;
***         &amp;quot;Orchestrated style&amp;quot;&lt;br /&gt;
**    Combo Model&lt;br /&gt;
***         Tuple Spaces - Immutable data store&lt;br /&gt;
***         Objects publish immutable facts to central store&lt;br /&gt;
***         Objects can publish requests to store&lt;br /&gt;
***         Other objects can publish responses to requests to store&lt;br /&gt;
***         Objects interested in responses can take those and relay to end users/devices&lt;br /&gt;
***         Basically it&#039;s pub/sub&lt;br /&gt;
***         Can add other subscribers after the fact and consume existing events&lt;br /&gt;
***         Promotes loose coupling&lt;br /&gt;
***         &amp;quot;Combo Style&amp;quot;&lt;br /&gt;
***         What about large messages, too large to pass round&lt;br /&gt;
****  Upload the large payload to a repository e.g. via webservice&lt;br /&gt;
****  Publish a &amp;quot;pointer&amp;quot; to the data&lt;br /&gt;
***         Why not just do RPC to request data directly&lt;br /&gt;
***         How do you handle errors&lt;br /&gt;
****  If you don’t get a response in a given time frame there is a problem&lt;br /&gt;
****  The client only needs to care the other service wsa unavailable and timed out, it should not concern itself with the specific error&lt;br /&gt;
***         How do you handle say an order fulfilment scenario where the micro service handling fulfilment was down when the fulfilment request was sent&lt;br /&gt;
****  In our case, each subscriber e.g the OrderProcessingService has its own unique persistent queue of messages it will resume processing when it starts up again&lt;br /&gt;
***        How do you &amp;quot;fix&amp;quot; data&lt;br /&gt;
****  E.g. order sent with wrong email&lt;br /&gt;
****  We want to correct the email without double fullfiilling the order&lt;br /&gt;
****         The order fulfilment step needs to be idempotent&lt;br /&gt;
****         The email sending service would not be, it would send the confirmation email again regardless&lt;br /&gt;
****         Each service will still hold its own state, or have its own database&lt;br /&gt;
***         When would you switch a service to use queues/RabbitMQ&lt;br /&gt;
*    Prediction: 20/09/14 DS: Formal verification of microservices system proof, using COQ?  &amp;lt;- fix me&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=CITCONEurope2014Sessions&amp;diff=15742</id>
		<title>CITCONEurope2014Sessions</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=CITCONEurope2014Sessions&amp;diff=15742"/>
		<updated>2014-09-21T10:31:40Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* 2:00 Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CITCON Europe 2014 Zagreb Sessions&lt;br /&gt;
&lt;br /&gt;
Back to the [[Main Page]]&lt;br /&gt;
&lt;br /&gt;
== 10:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[Normal Accidents and Root Cause Analysis]]&lt;br /&gt;
# [[big scale commit handling]]&lt;br /&gt;
# [[polytesting]]&lt;br /&gt;
# [[how to make the testing pyramid stand on its base]]&lt;br /&gt;
&lt;br /&gt;
== 11:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[working with large amounts of tests]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[CI CD 101]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
&lt;br /&gt;
== Lunch Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[?]]&lt;br /&gt;
&lt;br /&gt;
== 2:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[MicroservicesComboStyle]]&lt;br /&gt;
# [[Introduction to Puppet]]&lt;br /&gt;
# [[packaging for deployment]]&lt;br /&gt;
&lt;br /&gt;
== 3:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[Security Testing]]&lt;br /&gt;
# [[home brewing for process improvement]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
&lt;br /&gt;
== 4:30 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
# [[?]]&lt;br /&gt;
&lt;br /&gt;
== Table View ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Room name&lt;br /&gt;
! 10:00&lt;br /&gt;
! 11:15&lt;br /&gt;
! 2:00&lt;br /&gt;
! 3:15&lt;br /&gt;
! 4:30&lt;br /&gt;
|-&lt;br /&gt;
| Square&lt;br /&gt;
| [[Normal Accidents and Root Cause Analysis]]&lt;br /&gt;
| [[working with large amounts of tests]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
|-&lt;br /&gt;
| Long Room&lt;br /&gt;
| [[big scale commit handling]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[Security Testing]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
|-&lt;br /&gt;
| Long Room Doors&lt;br /&gt;
| [[polytesting]]&lt;br /&gt;
| [[CI CD 101]]&lt;br /&gt;
| [[Introduction to Puppet]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
|-&lt;br /&gt;
| Entry&lt;br /&gt;
| [[how to make the testing pyramid stand on its base]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
| [[?]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15741</id>
		<title>Normal Accidents and Root Cause Analysis</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15741"/>
		<updated>2014-09-21T10:00:30Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Normal Accidents book: http://press.princeton.edu/titles/6596.html&lt;br /&gt;
&lt;br /&gt;
Systems are categorized by Interactions that are Simple vs Complex, and Tightly Coupled vs Loosely Coupled.  &lt;br /&gt;
&lt;br /&gt;
There are a few different versions of the quadrant: http://paei.wdfiles.com/local--files/perrow-charles-normal-accident-theory/PAEI_043_Perrow_Normal_Accident_Theory.gif  https://www.flickr.com/photos/metanick/139214026/  http://media.peakprosperity.com/images/3-Perrow-from-Accidents-Normal.png&lt;br /&gt;
&lt;br /&gt;
[[Douglas Squirrel]] talking about root-cause analysis: https://skillsmatter.com/skillscasts/1986-talk-by-squirrel&lt;br /&gt;
&lt;br /&gt;
Notes on Squirrel&#039;s talk: http://www.markhneedham.com/blog/2011/12/10/the-5-whysroot-cause-analysis-douglas-squirrel/&lt;br /&gt;
&lt;br /&gt;
Notes from John Bradshaw:&lt;br /&gt;
&lt;br /&gt;
Normal accidents:&lt;br /&gt;
* 3 Mile Island Accident - Blamed Operators&lt;br /&gt;
* Any system can and will fail, and you should plan for it to fail&lt;br /&gt;
* 2 Axis graph&lt;br /&gt;
** Complexity -&amp;gt; Simple&lt;br /&gt;
** Loose Coupling -&amp;gt; Tight Coupling&lt;br /&gt;
**    Complex &amp;amp; Tightly Coupled = Accident&lt;br /&gt;
*        Complex system that is Loosely coupled is the CITCON open space set up evening&lt;br /&gt;
**    We did not all rush to get food and beer&lt;br /&gt;
*         E.g had there been a Lion in there, 1 person could have warned rest&lt;br /&gt;
*         Chance to warn of danger&lt;br /&gt;
*         Simple but tightly coupled = Dam&lt;br /&gt;
**    Accident is water gets through the damn&lt;br /&gt;
**    Anything goes wrong with dam e.g. hole, no chance to resolve&lt;br /&gt;
**   Simple to reason about, wall of rock with a hole in&lt;br /&gt;
**    But is high risk&lt;br /&gt;
*         In nuclear plant accident, cooling system near radioactive rods&lt;br /&gt;
**    Operators can see there was a leak, but no context e.g. they can see the leak is leaking near/into the radioactive rod storage which would lead to an accident&lt;br /&gt;
*         Book to Read: Normal Accidents by Perrow&lt;br /&gt;
*         Are micro services tightly coupled and complex?&lt;br /&gt;
**    Depends&lt;br /&gt;
**    It&#039;s down to design and implementation&lt;br /&gt;
*        Always strive to be in the bottom right corner of the graph, low complexity loosely coupled&lt;br /&gt;
*         How do people plan for failure?&lt;br /&gt;
**    Rob - We go through a certification process to get into Retail&lt;br /&gt;
*         Each system that could fail is tested, e.g. chaos monkey style someone will manually go take down services&lt;br /&gt;
*         Internal team will run same tests internally before handing over to external certification team&lt;br /&gt;
 &lt;br /&gt;
How do you verify or even test your logging? Instance of a service that logged every time on failure, in a tight loop and filled the disks leading to further failure = Simple Tightly Coupled System&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Root Cause Analysis&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Database deliberately down for maintenance. Instance of a service that logged every time on failure connecting to database, in a tight loop and filled the disks leading to further failure&lt;br /&gt;
 &lt;br /&gt;
*         Basic principals&lt;br /&gt;
**    Everybody who was affected comes to the meeting&lt;br /&gt;
*         To identity cultural or people problems&lt;br /&gt;
*         Not allowed to place blame&lt;br /&gt;
*         Ask/poll everyone what was the problem&lt;br /&gt;
**  Customer:&lt;br /&gt;
***        No system, was down, can&#039;t log on&lt;br /&gt;
**  Operations:&lt;br /&gt;
***        Confused by phone call&lt;br /&gt;
**  Customer Service:&lt;br /&gt;
***         Angry calls from customers, did not know what was going on&lt;br /&gt;
**  Developer:&lt;br /&gt;
***        Database down, no disk space&lt;br /&gt;
***         Then ask why:&lt;br /&gt;
** Customer:&lt;br /&gt;
**  Operations:&lt;br /&gt;
**  Customer Service:&lt;br /&gt;
**  Developer:&lt;br /&gt;
***         Why: Maintenance on database, database down&lt;br /&gt;
***         Why: Analysed log files, saw huge files, checked code,  logged with no delay&lt;br /&gt;
***         Why: Developer skills lacking&lt;br /&gt;
***         Why: No code review/inspection&lt;br /&gt;
***         Why: Test for this logging case lacking&lt;br /&gt;
***         When QA tested database was running&lt;br /&gt;
***         QA too busy to investigate database failures cases&lt;br /&gt;
***         No new blood in organisation&lt;br /&gt;
***         QA assigned/overbooked to too many projects&lt;br /&gt;
***         Action: Maintenance on DB, have redundant database to switch to&lt;br /&gt;
***         Action: QA involved earlier&lt;br /&gt;
 &lt;br /&gt;
*  Actions must be assigned and completed with a timeframe e.g. 1 week&lt;br /&gt;
*  When you hit that uncomfortable silence half way down, keep pushing&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
*         The root cause of failure is always the culture in an organisation&lt;br /&gt;
*    It’s always about people e.g.&lt;br /&gt;
**        The developer adding no delay to logging&lt;br /&gt;
**         Lack of testing&lt;br /&gt;
*        Create a RCA timeline of failure&lt;br /&gt;
**    At what time did system go down&lt;br /&gt;
**    At what time did customers complain&lt;br /&gt;
**    At what time did developers react&lt;br /&gt;
**    At what time was the system back up&lt;br /&gt;
**    Etc&lt;br /&gt;
*        Do as much technical investigation as possible before the RCA meeting&lt;br /&gt;
**    Eg this was the problem&lt;br /&gt;
**    We had these tests&lt;br /&gt;
***         But we didn’t have one for this scenario&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15740</id>
		<title>Normal Accidents and Root Cause Analysis</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15740"/>
		<updated>2014-09-21T09:58:50Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Normal Accidents book: http://press.princeton.edu/titles/6596.html&lt;br /&gt;
&lt;br /&gt;
Systems are categorized by Interactions that are Simple vs Complex, and Tightly Coupled vs Loosely Coupled.  &lt;br /&gt;
&lt;br /&gt;
There are a few different versions of the quadrant: http://paei.wdfiles.com/local--files/perrow-charles-normal-accident-theory/PAEI_043_Perrow_Normal_Accident_Theory.gif  https://www.flickr.com/photos/metanick/139214026/  http://media.peakprosperity.com/images/3-Perrow-from-Accidents-Normal.png&lt;br /&gt;
&lt;br /&gt;
[[Douglas Squirrel]] talking about root-cause analysis: https://skillsmatter.com/skillscasts/1986-talk-by-squirrel&lt;br /&gt;
&lt;br /&gt;
Notes on Squirrel&#039;s talk: http://www.markhneedham.com/blog/2011/12/10/the-5-whysroot-cause-analysis-douglas-squirrel/&lt;br /&gt;
&lt;br /&gt;
Notes from John Bradshaw:&lt;br /&gt;
&lt;br /&gt;
Normal accidents:&lt;br /&gt;
* 3 Mile Island Accident - Blamed Operators&lt;br /&gt;
* Any system can and will fail, and you should plan for it to fail&lt;br /&gt;
* 2 Axis graph&lt;br /&gt;
** Complexity -&amp;gt; Simple&lt;br /&gt;
** Loose Coupling -&amp;gt; Tight Coupling&lt;br /&gt;
**    Complex &amp;amp; Tightly Coupled = Accident&lt;br /&gt;
*        Complex system that is Loosely coupled is the CITCON open space set up evening&lt;br /&gt;
**    We did not all rush to get food and beer&lt;br /&gt;
*         E.g had there been a Lion in there, 1 person could have warned rest&lt;br /&gt;
*         Chance to warn of danger&lt;br /&gt;
*         Simple but tightly coupled = Dam&lt;br /&gt;
**    Accident is water gets through the damn&lt;br /&gt;
**    Anything goes wrong with dam e.g. hole, no chance to resolve&lt;br /&gt;
**   Simple to reason about, wall of rock with a hole in&lt;br /&gt;
**    But is high risk&lt;br /&gt;
*         In nuclear plant accident, cooling system near radioactive rods&lt;br /&gt;
**    Operators can see there was a leak, but no context e.g. they can see the leak is leaking near/into the radioactive rod storage which would lead to an accident&lt;br /&gt;
*         Book to Read: Normal Accidents by Perrow&lt;br /&gt;
*         Are micro services tightly coupled and complex?&lt;br /&gt;
**    Depends&lt;br /&gt;
**    It&#039;s down to design and implementation&lt;br /&gt;
*        Always strive to be in the bottom right corner of the graph, low complexity loosely coupled&lt;br /&gt;
*         How do people plan for failure?&lt;br /&gt;
**    Rob - We go through a certification process to get into Retail&lt;br /&gt;
*         Each system that could fail is tested, e.g. chaos monkey style someone will manually go take down services&lt;br /&gt;
*         Internal team will run same tests internally before handing over to external certification team&lt;br /&gt;
 &lt;br /&gt;
How do you verify or even test your logging? Instance of a service that logged every time on failure, in a tight loop and filled the disks leading to further failure = Simple Tightly Coupled System&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Root Cause Analysis&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Database deliberately down for maintenance. Instance of a service that logged every time on failure connecting to database, in a tight loop and filled the disks leading to further failure&lt;br /&gt;
 &lt;br /&gt;
*         Basic principals&lt;br /&gt;
**    Everybody who was affected comes to the meeting&lt;br /&gt;
*         To identity cultural or people problems&lt;br /&gt;
*         Not allowed to place blame&lt;br /&gt;
*         Ask/poll everyone what was the problem&lt;br /&gt;
**  Customer:&lt;br /&gt;
***        No system, was down, can&#039;t log on&lt;br /&gt;
**  Operations:&lt;br /&gt;
***        Confused by phone call&lt;br /&gt;
**  Customer Service:&lt;br /&gt;
***         Angry calls from customers, did not know what was going on&lt;br /&gt;
**  Developer:&lt;br /&gt;
***        Database down, no disk space&lt;br /&gt;
***         Then ask why:&lt;br /&gt;
** Customer:&lt;br /&gt;
**  Operations:&lt;br /&gt;
**  Customer Service:&lt;br /&gt;
**  Developer:&lt;br /&gt;
·         Why: Maintenance on database, database down&lt;br /&gt;
·         Why: Analysed log files, saw huge files, checked code,  logged with no delay&lt;br /&gt;
·         Why: Developer skills lacking&lt;br /&gt;
·         Why: No code review/inspection&lt;br /&gt;
·         Why: Test for this logging case lacking&lt;br /&gt;
·         When QA tested database was running&lt;br /&gt;
·         QA too busy to investigate database failures cases&lt;br /&gt;
·         No new blood in organisation&lt;br /&gt;
·         QA assigned/overbooked to too many projects&lt;br /&gt;
·         Action: Maintenance on DB, have redundant database to switch to&lt;br /&gt;
·         Action: QA involved earlier&lt;br /&gt;
 &lt;br /&gt;
§  Actions must be assigned and completed with a timeframe e.g. 1 week&lt;br /&gt;
§  When you hit that uncomfortable silence half way down, keep pushing&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
·         The root cause of failure is always the culture in an organisation&lt;br /&gt;
o    It’s always about people e.g.&lt;br /&gt;
·         The developer adding no delay to logging&lt;br /&gt;
·         Lack of testing&lt;br /&gt;
·         Create a RCA timeline of failure&lt;br /&gt;
o    At what time did system go down&lt;br /&gt;
o    At what time did customers complain&lt;br /&gt;
o    At what time did developers react&lt;br /&gt;
o    At what time was the system back up&lt;br /&gt;
o    Etc&lt;br /&gt;
·         Do as much technical investigation as possible before the RCA meeting&lt;br /&gt;
o    Eg this was the problem&lt;br /&gt;
o    We had these tests&lt;br /&gt;
·         But we didn’t have one for this scenario&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15739</id>
		<title>Normal Accidents and Root Cause Analysis</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Normal_Accidents_and_Root_Cause_Analysis&amp;diff=15739"/>
		<updated>2014-09-21T09:54:40Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Normal Accidents book: http://press.princeton.edu/titles/6596.html&lt;br /&gt;
&lt;br /&gt;
Systems are categorized by Interactions that are Simple vs Complex, and Tightly Coupled vs Loosely Coupled.  &lt;br /&gt;
&lt;br /&gt;
There are a few different versions of the quadrant: http://paei.wdfiles.com/local--files/perrow-charles-normal-accident-theory/PAEI_043_Perrow_Normal_Accident_Theory.gif  https://www.flickr.com/photos/metanick/139214026/  http://media.peakprosperity.com/images/3-Perrow-from-Accidents-Normal.png&lt;br /&gt;
&lt;br /&gt;
[[Douglas Squirrel]] talking about root-cause analysis: https://skillsmatter.com/skillscasts/1986-talk-by-squirrel&lt;br /&gt;
&lt;br /&gt;
Notes on Squirrel&#039;s talk: http://www.markhneedham.com/blog/2011/12/10/the-5-whysroot-cause-analysis-douglas-squirrel/&lt;br /&gt;
&lt;br /&gt;
Notes from John Bradshaw:&lt;br /&gt;
&lt;br /&gt;
Normal accidents:&lt;br /&gt;
·         3 Mile Island Accident - Blamed Operators&lt;br /&gt;
·         Any system can and will fail, and you should plan for it to fail&lt;br /&gt;
·         2 Axis graph&lt;br /&gt;
o    Complexity -&amp;gt; Simple&lt;br /&gt;
o    Loose Coupling -&amp;gt; Tight Coupling&lt;br /&gt;
o    Complex &amp;amp; Tightly Coupled = Accident&lt;br /&gt;
·         Complex system that is Loosely coupled is the CITCON open space set up evening&lt;br /&gt;
o    We did not all rush to get food and beer&lt;br /&gt;
·         E.g had there been a Lion in there, 1 person could have warned rest&lt;br /&gt;
·         Chance to warn of danger&lt;br /&gt;
·         Simple but tightly coupled = Dam&lt;br /&gt;
o    Accident is water gets through the damn&lt;br /&gt;
o    Anything goes wrong with dam e.g. hole, no chance to resolve&lt;br /&gt;
o    Simple to reason about, wall of rock with a hole in&lt;br /&gt;
o    But is high risk&lt;br /&gt;
·         In nuclear plant accident, cooling system near radioactive rods&lt;br /&gt;
o    Operators can see there was a leak, but no context e.g. they can see the leak is leaking near/into the radioactive rod storage which would lead to an accident&lt;br /&gt;
·         Book to Read: Normal Accidents by Perrow&lt;br /&gt;
·         Are micro services tightly coupled and complex?&lt;br /&gt;
o    Depends&lt;br /&gt;
o    It&#039;s down to design and implementation&lt;br /&gt;
·         Always strive to be in the bottom right corner of the graph, low complexity loosely coupled&lt;br /&gt;
·         How do people plan for failure?&lt;br /&gt;
o    Rob - We go through a certification process to get into Retail&lt;br /&gt;
·         Each system that could fail is tested, e.g. chaos monkey style someone will manually go take down services&lt;br /&gt;
·         Internal team will run same tests internally before handing over to external certification team&lt;br /&gt;
 &lt;br /&gt;
How do you verify or even test your logging? Instance of a service that logged every time on failure, in a tight loop and filled the disks leading to further failure = Simple Tightly Coupled System&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Root Cause Analysis&lt;br /&gt;
 &lt;br /&gt;
Scenario:  Database deliberately down for maintenance. Instance of a service that logged every time on failure connecting to database, in a tight loop and filled the disks leading to further failure&lt;br /&gt;
 &lt;br /&gt;
·         Basic principals&lt;br /&gt;
o    Everybody who was affected comes to the meeting&lt;br /&gt;
·         To identity cultural or people problems&lt;br /&gt;
·         Not allowed to place blame&lt;br /&gt;
·         Ask/poll everyone what was the problem&lt;br /&gt;
§  Customer:&lt;br /&gt;
·         No system, was down, can&#039;t log on&lt;br /&gt;
§  Operations:&lt;br /&gt;
·         Confused by phone call&lt;br /&gt;
§  Customer Service:&lt;br /&gt;
·         Angry calls from customers, did not know what was going on&lt;br /&gt;
§  Developer:&lt;br /&gt;
·         Database down, no disk space&lt;br /&gt;
·         Then ask why:&lt;br /&gt;
§  Customer:&lt;br /&gt;
§  Operations:&lt;br /&gt;
§  Customer Service:&lt;br /&gt;
§  Developer:&lt;br /&gt;
·         Why: Maintenance on database, database down&lt;br /&gt;
·         Why: Analysed log files, saw huge files, checked code,  logged with no delay&lt;br /&gt;
·         Why: Developer skills lacking&lt;br /&gt;
·         Why: No code review/inspection&lt;br /&gt;
·         Why: Test for this logging case lacking&lt;br /&gt;
·         When QA tested database was running&lt;br /&gt;
·         QA too busy to investigate database failures cases&lt;br /&gt;
·         No new blood in organisation&lt;br /&gt;
·         QA assigned/overbooked to too many projects&lt;br /&gt;
·         Action: Maintenance on DB, have redundant database to switch to&lt;br /&gt;
·         Action: QA involved earlier&lt;br /&gt;
 &lt;br /&gt;
§  Actions must be assigned and completed with a timeframe e.g. 1 week&lt;br /&gt;
§  When you hit that uncomfortable silence half way down, keep pushing&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
·         The root cause of failure is always the culture in an organisation&lt;br /&gt;
o    It’s always about people e.g.&lt;br /&gt;
·         The developer adding no delay to logging&lt;br /&gt;
·         Lack of testing&lt;br /&gt;
·         Create a RCA timeline of failure&lt;br /&gt;
o    At what time did system go down&lt;br /&gt;
o    At what time did customers complain&lt;br /&gt;
o    At what time did developers react&lt;br /&gt;
o    At what time was the system back up&lt;br /&gt;
o    Etc&lt;br /&gt;
·         Do as much technical investigation as possible before the RCA meeting&lt;br /&gt;
o    Eg this was the problem&lt;br /&gt;
o    We had these tests&lt;br /&gt;
·         But we didn’t have one for this scenario&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15694</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15694"/>
		<updated>2014-09-19T07:30:45Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VP Technology at Osper - we give kids from 8 to 18 a real debit card to help them learn about money.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
&lt;br /&gt;
* I helped with the [[Continuous_Rewriting]] session at CITCON Turin 2013.&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am always happy to talk to anyone about any of the tools or ideas I discussed in these sessions.&lt;br /&gt;
&lt;br /&gt;
Personal site: http://douglassquirrel.com&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15693</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15693"/>
		<updated>2014-09-19T07:26:38Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VP Technology at Osper - we give kids from 8 to 18 a real debit card to help them learn about money.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am always happy to talk to anyone about any of the tools or ideas I talked about in these sessions.&lt;br /&gt;
&lt;br /&gt;
Personal site: http://douglassquirrel.com&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_Rewriting&amp;diff=15512</id>
		<title>Continuous Rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_Rewriting&amp;diff=15512"/>
		<updated>2013-09-28T15:40:08Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* How? Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Continuos Rewriting =&lt;br /&gt;
&lt;br /&gt;
CITCON Europe 2013 4:30-5:30 pm topic. See also [[Continuous rewriting]] session from CITCON Europe 2012 Budapest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
Business people find smart people that write a lot of crappy code fast. The code does the job done, but it really needs to be rewritten. If you have read Joel Spolsky&#039;s blog post on how completely rewriting the code is really really (really) bad, then you know it is not what needs to be done.&lt;br /&gt;
&lt;br /&gt;
The speaker found himself several times in a situation to start working on a project that is in a &amp;quot;needs rewrite desperately&amp;quot; mode. What if we could rewrite continuously?&lt;br /&gt;
&lt;br /&gt;
Every week, even if the code is not broken, we rewrite a piece of code. After a while, all code base will be rewritten. We might not use the rewritten code. &lt;br /&gt;
&lt;br /&gt;
One has to invest a amount of time to do that.&lt;br /&gt;
&lt;br /&gt;
You can rewrite a piece of PHP application in Ruby, another piece in Python, and end up with an application that is written in three languages.&lt;br /&gt;
&lt;br /&gt;
If you rewrite, you end up with better code and you understand the code better.&lt;br /&gt;
&lt;br /&gt;
Similar to pair programming, one would invest some time in continuos rewriting, but there are benefits.&lt;br /&gt;
&lt;br /&gt;
== How? Theory ==&lt;br /&gt;
&lt;br /&gt;
(Insert slide.)&lt;br /&gt;
&lt;br /&gt;
If a piece of software (for example Factplace) has several components in one language with one architecture, single small components (for example, component A) could be rewritten in different ways or languages. The slide shows how component A is implemented in two different languages (A and A&#039;).&lt;br /&gt;
&lt;br /&gt;
(Jason promised to add two links here. One is http://backstage.soundcloud.com/2012/08/evolution-of-soundclouds-architecture/ )&lt;br /&gt;
&lt;br /&gt;
(Squirrel thinks the links are http://www.slideshare.net/mobile/pcalcado/from-a-monolithic-ruby-on-rails-app-to-the-jvm and http://www.infoq.com/news/2013/05/dystopia-as-a-service .)&lt;br /&gt;
&lt;br /&gt;
== How? Practice ==&lt;br /&gt;
&lt;br /&gt;
The speaker showed Whooshingby web application that has a slider which determines how much Ruby or Python code the application uses.&lt;br /&gt;
&lt;br /&gt;
How to do it? Find some time every week, find a quiet piece of code (that is not changing a lot at the moment) and rewrite it.&lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
How to find opportunities (paid or open source)  where he could exercise continuous rewriting.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_Rewriting&amp;diff=15510</id>
		<title>Continuous Rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_Rewriting&amp;diff=15510"/>
		<updated>2013-09-28T15:35:30Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* How? Theory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Continuos Rewriting =&lt;br /&gt;
&lt;br /&gt;
CITCON Europe 2013 4:30-5:30 pm topic.&lt;br /&gt;
&lt;br /&gt;
== Why? ==&lt;br /&gt;
&lt;br /&gt;
Business people find smart people that write a lot of crappy code fast. The code does the job done, but it really needs to be rewritten. If you have read Joel Spolsky&#039;s blog post on how completely rewriting the code is really really (really) bad, then you know it is not what needs to be done.&lt;br /&gt;
&lt;br /&gt;
The speaker found himself several times in a situation to start working on a project that is in a &amp;quot;needs rewrite desperately&amp;quot; mode. What if we could rewrite continuously?&lt;br /&gt;
&lt;br /&gt;
Every week, even if the code is not broken, we rewrite a piece of code. After a while, all code base will be rewritten. We might not use the rewritten code. &lt;br /&gt;
&lt;br /&gt;
One has to invest a amount of time to do that.&lt;br /&gt;
&lt;br /&gt;
You can rewrite a piece of PHP application in Ruby, another piece in Python, and end up with an application that is written in three languages.&lt;br /&gt;
&lt;br /&gt;
If you rewrite, you end up with better code and you understand the code better.&lt;br /&gt;
&lt;br /&gt;
Similar to pair programming, one would invest some time in continuos rewriting, but there are benefits.&lt;br /&gt;
&lt;br /&gt;
== How? Theory ==&lt;br /&gt;
&lt;br /&gt;
(Insert slide.)&lt;br /&gt;
&lt;br /&gt;
If a piece of software (for example Factplace) has several components in one language with one architecture, single small components (for example, component A) could be rewritten in different ways or languages. The slide shows how component A is implemented in two different languages (A and A&#039;).&lt;br /&gt;
&lt;br /&gt;
(Jason promised to add two links here.)&lt;br /&gt;
&lt;br /&gt;
(Squirrel thinks the links are http://www.slideshare.net/mobile/pcalcado/from-a-monolithic-ruby-on-rails-app-to-the-jvm and http://www.infoq.com/news/2013/05/dystopia-as-a-service .)&lt;br /&gt;
&lt;br /&gt;
== How? Practice ==&lt;br /&gt;
&lt;br /&gt;
The speaker showed Whooshingby web application that has a slider which determines how much Ruby or Python code the application uses.&lt;br /&gt;
&lt;br /&gt;
How to do it? Find some time every week, find a quiet piece of code (that is not changing a lot at the moment) and rewrite it.&lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
How to find opportunities (paid or open source)  where he could exercise continuous rewriting.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=ContinuousDeploymentWithoutCI&amp;diff=15484</id>
		<title>ContinuousDeploymentWithoutCI</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=ContinuousDeploymentWithoutCI&amp;diff=15484"/>
		<updated>2013-09-28T12:54:56Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: Created page with &amp;quot;Secret sales does e-commerce.  Cont. deployment 3-4 times a day, keep system running. Use Jenkins, but not do release to P. Some tests on the newly created code.  Team does no...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Secret sales does e-commerce.&lt;br /&gt;
&lt;br /&gt;
Cont. deployment 3-4 times a day, keep system running. Use Jenkins, but not do release to P. Some tests on the newly created code.&lt;br /&gt;
&lt;br /&gt;
Team does not do TDD. Despite being a big ball of code. The code is not testable. Because recovering can be really fast, the urgency is not that high.&lt;br /&gt;
&lt;br /&gt;
It has 24/7 monitoring. Devs are on call. This helps on ensuring commitment from the devs. Hence monitoring is quite okay.&lt;br /&gt;
&lt;br /&gt;
A fellow developer does a code review.&lt;br /&gt;
QA and product person check the application.&lt;br /&gt;
&lt;br /&gt;
Google Experiments is used to do A-B testing.&lt;br /&gt;
&lt;br /&gt;
PHP has some nice features, for one, each customer is running in it&#039;s own process.&lt;br /&gt;
Capistrano is used to do release the code. It can do rollback. A couple of &lt;br /&gt;
&lt;br /&gt;
How about doing something similar on a Java platform. You can do Red/Green deployment.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=CITCONEurope2013Sessions&amp;diff=15483</id>
		<title>CITCONEurope2013Sessions</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=CITCONEurope2013Sessions&amp;diff=15483"/>
		<updated>2013-09-28T12:54:25Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* 2:00 Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CITCON Europe 2013 Turin Sessions&lt;br /&gt;
&lt;br /&gt;
Back to the [[Main Page]]&lt;br /&gt;
&lt;br /&gt;
== 10:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[Are we doing improvement wrong?]]&lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
&lt;br /&gt;
== 11:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
# [[Continuous Delivery with Puppet - what is missing?]]&lt;br /&gt;
# &lt;br /&gt;
# &lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
== Lunch Topics ==&lt;br /&gt;
&lt;br /&gt;
# ---&lt;br /&gt;
&lt;br /&gt;
== 2:00 Topics ==&lt;br /&gt;
&lt;br /&gt;
# [[ContinuousDeploymentWithoutCI]]&lt;br /&gt;
# ---&lt;br /&gt;
# &lt;br /&gt;
# &lt;br /&gt;
# ---&lt;br /&gt;
&lt;br /&gt;
== 3:15 Topics ==&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
# &lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
== 4:30 Topics ==&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
# &lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
# ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Final session==&lt;br /&gt;
[[CitconEurope2013: Ah-ha moments]]&lt;br /&gt;
&lt;br /&gt;
== Table View ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Room name&lt;br /&gt;
! 10:00&lt;br /&gt;
! 11:15&lt;br /&gt;
! 2:00&lt;br /&gt;
! 3:15&lt;br /&gt;
! 4:30&lt;br /&gt;
|-&lt;br /&gt;
| The Big Room&lt;br /&gt;
| --- &lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
|-&lt;br /&gt;
| Meeting One&lt;br /&gt;
| --- &lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
|-&lt;br /&gt;
| Library&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
|-&lt;br /&gt;
| Meeting Two&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
|-&lt;br /&gt;
| Garden&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
| ---&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15445</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15445"/>
		<updated>2013-09-26T05:23:27Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VP Engineering at Secretsales, a fast-growing online retailer.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
* I helped with the [[Continuous_rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am happy to provide free tech support for any of the tools I talked about in these sessions, particularly Hudson plugins. And yes, Secretsales is recruiting: http://secretsales.com/careers/&lt;br /&gt;
&lt;br /&gt;
Personal site: http://douglassquirrel.com&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15444</id>
		<title>Douglas Squirrel</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Douglas_Squirrel&amp;diff=15444"/>
		<updated>2013-09-26T05:22:49Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;VP Engineering at Secretsales, a fast-growing online retailer.&lt;br /&gt;
&lt;br /&gt;
I have attended every CITCON in Europe:&lt;br /&gt;
* I helped with the [[Continuous_Rewriting]] session at CITCON Budapest 2012.&lt;br /&gt;
* I helped with the [[Root_Cause_Analysis]] and [[Dev_and_Ops_and_System_Ops_oh_my]] sessions at CITCON London 2011.&lt;br /&gt;
* I helped with the [[Pairing_Techniques]] and [[Overcoming_Organisational_Defensiveness]] sessions at CITCON London 2010.&lt;br /&gt;
* I helped with the [[HudsonAndOtherPlugins]] session at CITCON Paris 2009. &lt;br /&gt;
* I helped with two sessions at CITCON Brussels 2007: [[Karma_For_Continuous_Integration]] and [[MutationTesting]]. &lt;br /&gt;
* I attended CITCON London 2006 and CITCON Amsterdam 2008 but don&#039;t seem to have written anything up! Shame on me.&lt;br /&gt;
&lt;br /&gt;
I am happy to provide free tech support for any of the tools I talked about in these sessions, particularly Hudson plugins. And yes, Secretsales is recruiting: http://secretsales.com/careers/&lt;br /&gt;
&lt;br /&gt;
Personal site: http://douglassquirrel.com&lt;br /&gt;
&lt;br /&gt;
Email: ds at douglassquirrel dot com&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15059</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15059"/>
		<updated>2013-02-07T06:04:23Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Post-CITCON comments and ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
What would happen if your team rewrote every line of code in your application every six months? &lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;br /&gt;
&lt;br /&gt;
== Post-CITCON comments and ideas ==&lt;br /&gt;
&lt;br /&gt;
[[Peter Zsoldos]] made several helpful comments after the conference; he asked &lt;br /&gt;
* what role acceptance tests might play in a CR world (do we keep them or delete them on a rewrite? Squirrel thinks we keep them and modify as needed)&lt;br /&gt;
* what might a CR advocate say to the points raised by Joel Spolsky in his [http://www.joelonsoftware.com/articles/fog0000000069.html article on rewrites]?&lt;br /&gt;
Peter also wrote a [http://zsoldosp.blogspot.com/2013/01/continuous-team-switching.html blog post] addressing some of the issues raised in this session and raising a new question: how might CR help teams rotate developers more effectively?&lt;br /&gt;
&lt;br /&gt;
An [http://blog.appfog.com/what-the-obama-it-team-teaches-us-about-polyglot-programming/ article on the Obama campaign&#039;s software] by [http://www.linkedin.com/pub/luc-perkins/22/7b3/a08 Luc Perkins] suggests that the Democrats used some of the techniques described here, such as combining many small components with a short half-life, though the article doesn&#039;t mention how much rewriting they did.&lt;br /&gt;
&lt;br /&gt;
[http://andypalmer.com/ Andy Palmer] drew comparisons with the [http://www.infoq.com/presentations/Micro-Services micro-services ideas] described by [http://www.linkedin.com/pub/james-lewis/2/4b/5b1 James Lewis] of Thoughtworks. Here are some [http://www.slideshare.net/jamesalewis/java-microservices slides on micro-services].&lt;br /&gt;
&lt;br /&gt;
[[Julian Gamble]] pointed to the [http://queue.acm.org/detail.cfm?id=1531242 continuous rewriting of a language] by [http://en.wikipedia.org/wiki/Arthur_Whitney_%28computer_scientist%29 Arthur Whitney].&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15058</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15058"/>
		<updated>2013-02-07T06:00:34Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Post-CITCON comments and ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
What would happen if your team rewrote every line of code in your application every six months? &lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;br /&gt;
&lt;br /&gt;
== Post-CITCON comments and ideas ==&lt;br /&gt;
&lt;br /&gt;
[[Peter Zsoldos]] made several helpful comments after the conference; he asked &lt;br /&gt;
* what role acceptance tests might play in a CR world (do we keep them or delete them on a rewrite? Squirrel thinks we keep them and modify as needed)&lt;br /&gt;
* what might a CR advocate say to the points raised by Joel Spolsky in his [http://www.joelonsoftware.com/articles/fog0000000069.html article on rewrites]?&lt;br /&gt;
Peter also wrote a [http://zsoldosp.blogspot.com/2013/01/continuous-team-switching.html blog post] addressing some of the issues raised in this session and raising a new question: how might CR help teams rotate developers more effectively?&lt;br /&gt;
&lt;br /&gt;
An [http://blog.appfog.com/what-the-obama-it-team-teaches-us-about-polyglot-programming/ article on the Obama campaign&#039;s software] by [http://www.linkedin.com/pub/luc-perkins/22/7b3/a08 Luc Perkins] suggests that the Democrats used some of the techniques described here, such as combining many small components with a short half-life, though the article doesn&#039;t mention how much rewriting they did.&lt;br /&gt;
&lt;br /&gt;
[http://andypalmer.com/ Andy Palmer] drew comparisons with the [http://www.infoq.com/presentations/Micro-Services micro-services ideas] described by [http://www.linkedin.com/pub/james-lewis/2/4b/5b1 James Lewis] of Thoughtworks. Here are some [http://www.slideshare.net/jamesalewis/java-microservices slides on micro-services].&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15057</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15057"/>
		<updated>2013-02-06T08:57:09Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Post-CITCON comments and ideas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
What would happen if your team rewrote every line of code in your application every six months? &lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;br /&gt;
&lt;br /&gt;
== Post-CITCON comments and ideas ==&lt;br /&gt;
&lt;br /&gt;
[[Peter Zsoldos]] made several helpful comments after the conference; he asked &lt;br /&gt;
* what role acceptance tests might play in a CR world (do we keep them or delete them on a rewrite? Squirrel thinks we keep them and modify as needed)&lt;br /&gt;
* what might a CR advocate say to the points raised by Joel Spolsky in his [http://www.joelonsoftware.com/articles/fog0000000069.html article on rewrites]?&lt;br /&gt;
Peter also wrote a [http://zsoldosp.blogspot.com/2013/01/continuous-team-switching.html blog post] addressing some of the issues raised in this session and raising a new question: how might CR help teams rotate developers more effectively?&lt;br /&gt;
&lt;br /&gt;
An [http://blog.appfog.com/what-the-obama-it-team-teaches-us-about-polyglot-programming/ article on the Obama campaign&#039;s software] by [http://www.linkedin.com/pub/luc-perkins/22/7b3/a08 Luc Perkins] suggests that the Democrats used some of the techniques described here, such as combining many small components with a short half-life, though the article doesn&#039;t mention how much rewriting they did.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15056</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=15056"/>
		<updated>2013-02-06T08:48:34Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
What would happen if your team rewrote every line of code in your application every six months? &lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;br /&gt;
&lt;br /&gt;
== Post-CITCON comments and ideas ==&lt;br /&gt;
&lt;br /&gt;
[[Peter Zsoldos]] made several helpful comments after the conference; he asked &lt;br /&gt;
* what role acceptance tests might play in a CR world (do we keep them or delete them on a rewrite? Squirrel thinks we keep them and modify as needed)&lt;br /&gt;
* what might a CR advocate say to the points raised by Joel Spolsky in his [http://www.joelonsoftware.com/articles/fog0000000069.html article on rewrites]?&lt;br /&gt;
Peter also wrote a [http://zsoldosp.blogspot.com/2013/01/continuous-team-switching.html blog post] addressing some of the issues raised in this session and raising a new question: how might CR help teams rotate developers more effectively?&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14953</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14953"/>
		<updated>2013-01-14T05:32:11Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
What would happen if your team rewrote every line of code in your application every six months? &lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14952</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14952"/>
		<updated>2013-01-14T05:31:07Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. Continuous Rewriting (CR) promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. For example, what would happen if your team ensured that every line of code in the application got replaced every six months? &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14947</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14947"/>
		<updated>2013-01-08T18:21:19Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;, which promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. For example, what would happen if your team ensured that every line of code in the application got replaced every six months? &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;br /&gt;
&lt;br /&gt;
== Characteristics ==&lt;br /&gt;
&lt;br /&gt;
We thought of these characteristics a system built using CR would likely have:&lt;br /&gt;
* Made up of small components (e.g. source code under 10K bytes)&lt;br /&gt;
* Components connected by messaging system&lt;br /&gt;
* Reduced usage of database, perhaps no database at all&lt;br /&gt;
* Deployment in stages - component live but isolated, then side-by-side with existing component, then fully deployed&lt;br /&gt;
* Polyglot - components written in a wide variety of languages&lt;br /&gt;
* Business metrics monitored, automated actions to address (similar to [http://timothyfitz.com/2009/02/10/continuous-deployment-at-imvu-doing-the-impossible-fifty-times-a-day/ IMVU&#039;s continuous delivery system], which automatically rolls back if revenue drops)&lt;br /&gt;
* Team develop rewriting rules, goals, guidelines&lt;br /&gt;
* Business receptive to new ideas, driven to change quickly&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14946</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14946"/>
		<updated>2013-01-08T18:05:59Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;, which promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. For example, what would happen if your team ensured that every line of code in the application got replaced every six months? &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;br /&gt;
&lt;br /&gt;
== Benefits ==&lt;br /&gt;
&lt;br /&gt;
We brainstormed these possible benefits of adopting CR:&lt;br /&gt;
* Code evolves with business understanding&lt;br /&gt;
* Eliminate code ownership&lt;br /&gt;
* Fast feedback and fixes&lt;br /&gt;
* Reduces team [http://en.wikipedia.org/wiki/Bus_factor bus number], i.e. more people know more of the code&lt;br /&gt;
* Simpler, shorter code&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14945</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14945"/>
		<updated>2013-01-08T17:54:40Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Techniques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;, which promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. For example, what would happen if your team ensured that every line of code in the application got replaced every six months? &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system checks whether they got the same result and takes appropriate action if they didn&#039;t. Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14811</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14811"/>
		<updated>2012-11-08T22:26:31Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;, which promises better responsiveness, faster feedback, improved understanding, and simpler code through regular rewriting of every part of a complex software product. For example, what would happen if your team ensured that every line of code in the application got replaced every six months? &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
The model is similar to [http://en.wikipedia.org/wiki/Spaced_learning spaced learning], where you repeat things you want to learn at intervals to help you retain them.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system that checks whether they got the same result and takes appropriate action if they didn&#039;t. (Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;br /&gt;
&lt;br /&gt;
== Problems and Questions ==&lt;br /&gt;
&lt;br /&gt;
We raised these questions and thought of these problems with Continuous Rewriting:&lt;br /&gt;
&lt;br /&gt;
Front-end, visual code could be a problem area; A-B testing could help.&lt;br /&gt;
&lt;br /&gt;
Infrequent events - e.g. an annual audit or quarterly report - could form roadblocks to a CR-using team, as they won&#039;t easily have the opportunity to check that the rewritten code gets the same result as the old code in production.&lt;br /&gt;
&lt;br /&gt;
A stack of unanswered questions:&lt;br /&gt;
* What about infrastructure? Retrofitting to existing software? Organisational acceptance? (Fast feedback and fix may help with the latter.) &lt;br /&gt;
* Are there types of application where this approach won&#039;t work?&lt;br /&gt;
* Can you get the same learning benefits from team rotation?&lt;br /&gt;
* Will increased readability for the rewriter mean better code, or will it mean less comprehension for others on the team?&lt;br /&gt;
* Will CR-using teams have tacit code ownership or will CR eliminate that ownership?&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14810</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14810"/>
		<updated>2012-11-08T22:12:41Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;, which promises better responsiveness, faster feedback, improved understanding, and simpler code. &lt;br /&gt;
&lt;br /&gt;
The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system that checks whether they got the same result and takes appropriate action if they didn&#039;t. (Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14809</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14809"/>
		<updated>2012-11-08T22:09:34Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Techniques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system that checks whether they got the same result and takes appropriate action if they didn&#039;t. (Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;br /&gt;
&lt;br /&gt;
[http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work LMAX Disruptor] and [http://martinfowler.com/eaaDev/EventSourcing.html Event Sourcing] are models that may be helpful for CR.&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14808</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14808"/>
		<updated>2012-11-08T22:05:49Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: /* Discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;br /&gt;
&lt;br /&gt;
Will CR scale as CI and CD appear to? Way too early to know, but Fred George at Forward has large teams using their &amp;quot;programmer anarchy&amp;quot; model.&lt;br /&gt;
&lt;br /&gt;
== Techniques ==&lt;br /&gt;
&lt;br /&gt;
We moved on to discuss methods that might be used by teams adopting Continuous Rewriting. These included:&lt;br /&gt;
&lt;br /&gt;
Dan North&#039;s &amp;quot;Spike and Stabilise&amp;quot; method, where you code something quickly, prove it is useful, then write tests that help you explore your code and stabilise it.&lt;br /&gt;
&lt;br /&gt;
Hot-swapping or simultaneous running of old and new code - for example, both old and new code draw the same work items from a common queue and a voting or filtering system that checks whether they got the same result and takes appropriate action if they didn&#039;t. (Related example: NASA put four computers in the Space Shuttle that voted on how to steer the ship:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;On the Shuttle, four identical AP-101Bs would function simultaneously as a quadruple-redundant set during critical mission phases such as ascent and reentry, processing the same information, derived from completely separate data buses, in precise synchronization. If a conflict arose among the four primary computers, the majority would rule, voting the conflicting unit out of the loop. None of the computers, singly or en masse, could turn off any other—that step was left to the crew. An errant machine would announce itself to the crew with warning lights, audio signals, and display-screen messages—all suggesting that the crew might want to isolate (i.e.; turn off) the offending computer from the system.&amp;quot; - [http://history.nasa.gov/sts1/pages/computer.html NASA history]&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14807</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14807"/>
		<updated>2012-11-08T21:20:56Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: start of discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. The session opened with discussion of the chart and two examples below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example 1: DRW ===&lt;br /&gt;
&lt;br /&gt;
* Small, expendable, co-operating components&lt;br /&gt;
* Each fit for purpose&lt;br /&gt;
* Hard shell, soft centre&lt;br /&gt;
* Message = API&lt;br /&gt;
* Identifiable boundaries for experiment&lt;br /&gt;
&lt;br /&gt;
References: [http://vimeo.com/43659070 Dan North talk], [http://qconlondon.com/dl/qcon-london-2012/slides/DanNorth_DecisionsDecisions.pdf Slides]&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Forward ===&lt;br /&gt;
&lt;br /&gt;
* Small, short-lived apps&lt;br /&gt;
* No testing&lt;br /&gt;
* Continuous deployment&lt;br /&gt;
&lt;br /&gt;
References: [http://forwardtechnology.co.uk/videos/32447325 Fred George talk], [http://www.slideshare.net/fredgeorge/programmer-anarchy-chinese Slides]&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
We discussed and criticised the thesis and examples. Points made included:&lt;br /&gt;
&lt;br /&gt;
Why does rewriting hurt? You may have crack devs who push for a rewrite, but the new code doesn&#039;t quite match the old, and the rewrite causes a delay, and the new code becomes legacy quickly. If you have slobs, they may just live with the old code which is equally bad.&lt;br /&gt;
&lt;br /&gt;
[http://www.red-gate.com Red Gate] use a strategy called &amp;quot;continuous monitoring&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some strategies for piecemeal rewrites:&lt;br /&gt;
* when you get a change request, extract the relevant component and rewrite it&lt;br /&gt;
* the [http://www.martinfowler.com/bliki/StranglerApplication.html Strangler pattern]&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14806</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14806"/>
		<updated>2012-11-08T20:53:30Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: chart finished&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. The session opened with discussion of this chart:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Delivery hurts, so automate &amp;amp; do more often.&#039;&#039; - one-click deploy, IMVU&lt;br /&gt;
| Tools and culture! - DevOps, Puppet, Chef, Capistrano, Octopus&lt;br /&gt;
| General adoption by advanced teams? - CD book&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Rewrites hurt, so automate &amp;amp; do more often.&#039;&#039; - DRW (Dan North), Forward (Fred George)&lt;br /&gt;
| ????&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14805</id>
		<title>Continuous rewriting</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=Continuous_rewriting&amp;diff=14805"/>
		<updated>2012-11-08T20:49:19Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: first draft of chart&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Squirrel presented for discussion the thesis that &amp;quot;Continuous Rewriting&amp;quot; is an emerging theme for software development, a successor to better-known ideas &amp;quot;Continuous Integration&amp;quot; and &amp;quot;Continuous Deployment&amp;quot;. The session opened with discussion of this chart:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| &lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2000-3&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2004-6&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2007-9&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2010-12&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2012-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Integration&lt;br /&gt;
| &#039;&#039;Integration hurts, so automate &amp;amp; do more often.&#039;&#039; - Daily Builds, Ant, CruiseControl&lt;br /&gt;
| More tools! - JetBrains, Hudson, BuildForge&lt;br /&gt;
| Adopted by advanced teams - CI books, CITCON&lt;br /&gt;
| Tool shakeout, standard for new teams - Jenkins&lt;br /&gt;
| Adopted by late majority?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Continuous Deployment&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Continuous Rewriting&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
| foo&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14703</id>
		<title>TDD2012</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14703"/>
		<updated>2012-10-20T09:03:34Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://coderetreat.org Global Day of Code Retreat] 8th December 2012&lt;br /&gt;
&lt;br /&gt;
How deep to go in TDD?&lt;br /&gt;
&lt;br /&gt;
What do you mean by deep? Have to mock a lot, could have a million assertions&lt;br /&gt;
&lt;br /&gt;
[http://www.growing-object-oriented-software.com/ Growing Object Oriented Software, Guided by Tests]&lt;br /&gt;
&lt;br /&gt;
Pavel - TDD not suitable for prototyping&lt;br /&gt;
&lt;br /&gt;
Henk &amp;amp; Jeffrey - works for them, aids in figuring out what code should do&lt;br /&gt;
&lt;br /&gt;
[http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-theo.html Clean Room development], Feathers - similar thinking about what your code should do but no tests&lt;br /&gt;
&lt;br /&gt;
Have to have a mock for everything not in this class -&amp;gt; listening to code&lt;br /&gt;
&lt;br /&gt;
[http://www.exampler.com/old-blog/2003/08/21/ Testing Quadrant] - Brian Marick, classification of tests&lt;br /&gt;
&lt;br /&gt;
Jeffrey - earlier projects rescued by tests&lt;br /&gt;
&lt;br /&gt;
* One project&#039;s code was bad, acceptance tests correct, rescued by running ATs and fixing&lt;br /&gt;
* Another project had good code in Java, porting to Ruby; ported tests first, then wrote code until tests passed, smooth process&lt;br /&gt;
&lt;br /&gt;
Can write tests only after initial design, when in &amp;quot;bug-fix&amp;quot; mode - Pavel&lt;br /&gt;
&lt;br /&gt;
Painful to retrofit tests - see [http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 Working Effectively with Legacy Code, Feathers]&lt;br /&gt;
&lt;br /&gt;
Does writing tests make you think less hard? Lets you decouple and delay decision about implementation as you are focussing on output. Henk - makes me think more, consider design and API&lt;br /&gt;
&lt;br /&gt;
Do you use pairing? Not currently, feel I need someone at same experience level to go fast - PJ has a talk on pairing styles including how to work with differing skill levels&lt;br /&gt;
&lt;br /&gt;
Some people don&#039;t always write tests if few customers or code is for fun&lt;br /&gt;
&lt;br /&gt;
Jeffrey - experience writing fun code for robot wars competition, expectation about quality of code != actual quality, so always writes tests&lt;br /&gt;
&lt;br /&gt;
Do you find TDD lets you think less? Decouples and lets you delay implementation decision&lt;br /&gt;
&lt;br /&gt;
Henk - makes me think _more_ about design and API&lt;br /&gt;
&lt;br /&gt;
Jeffrey - maybe thinking hard but about _fewer things_&lt;br /&gt;
&lt;br /&gt;
PJ - Don&#039;t write production code without a failing test&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Pair partner is both conscience (did you write a test?) and gives you permission (OK not to figure that out now)&lt;br /&gt;
&lt;br /&gt;
How about performance? Should run thousands of unit tests per second, but existing code may be too slow (Henk: reading file stream one byte at a time), need to revise&lt;br /&gt;
&lt;br /&gt;
Pavel - we do continuous delivery and find that you need to have tests for every change; don&#039;t deploy if this is missing&lt;br /&gt;
&lt;br /&gt;
How do you motivate yourself to do TDD? [http://www.butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata Screencast from Uncle Bob] and similar examples can be motivating&lt;br /&gt;
&lt;br /&gt;
Other examples: [http://www.jamesshore.com/Blog/Lets-Play/Episode-176.html Jeff Shore Let&#039;s Play TDD], [http://pairwith.us PairWithUs]&lt;br /&gt;
&lt;br /&gt;
Do brainteaser for every bug: how could I have written a test for this bug?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - one dev wrote tests because he didn&#039;t trust colleagues, they broke his code and he could detect right away, eventually said &amp;quot;how do you know? [CI &amp;amp; tests] oh, we should all do that&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pavel - wants to know about changes, continuous testing tells him about them&lt;br /&gt;
&lt;br /&gt;
Relative salary of dev &amp;amp; testers can be a motive for testing&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Scott Ambler discussing pairing with CTO, polled team, only 20% had code on screen &amp;amp; looking at it, so pairing would double productivity&lt;br /&gt;
&lt;br /&gt;
These are not personal motivations;&lt;br /&gt;
&lt;br /&gt;
Personal motivations:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;to be less wrong&amp;quot;&lt;br /&gt;
* not to be in debugger&lt;br /&gt;
* not get stuck&lt;br /&gt;
* Want not to be afraid of refactoring&lt;br /&gt;
* want to change code with confidence&lt;br /&gt;
* feel safer&lt;br /&gt;
* avoid angry emails from customers&lt;br /&gt;
* not find from &amp;quot;git blame&amp;quot; that the jerk who wrote the awful code was yourself&lt;br /&gt;
* love experience of writing code for 4 hours, check in, works first time&lt;br /&gt;
&lt;br /&gt;
Jeffrey - at Agitar, didn&#039;t want generated tests for their own code (because of course it was fine) but to protect themselves against someone else breaking their code&lt;br /&gt;
&lt;br /&gt;
How do you convince others to adopt TDD?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Crossing the Chasm and what motivates change&lt;br /&gt;
&lt;br /&gt;
* Early adopters adopt TDD because it&#039;s better - only 15% of world&lt;br /&gt;
* Later adopters have to have it solve a live problem for them&lt;br /&gt;
&lt;br /&gt;
Easy to &amp;quot;make&amp;quot; some teams use TDD, others harder, especially third parties, as they are not convinced - Jeffrey &amp;quot;not a problem for them&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Coding dojo to practise better methods every couple of weeks, majority accept that this works, six months in most are still doing unit testing&lt;br /&gt;
&lt;br /&gt;
Squirrel - &amp;quot;Convincing&amp;quot; people wrong mindset, help team to solve problems that they observe&lt;br /&gt;
&lt;br /&gt;
Writing tests that pass is like sex - after you have it the first time you never look back&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14702</id>
		<title>TDD2012</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14702"/>
		<updated>2012-10-20T09:01:00Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How deep to go in TDD?&lt;br /&gt;
&lt;br /&gt;
What do you mean by deep? Have to mock a lot, could have a million assertions&lt;br /&gt;
&lt;br /&gt;
[http://www.growing-object-oriented-software.com/ Growing Object Oriented Software, Guided by Tests]&lt;br /&gt;
&lt;br /&gt;
Pavel - TDD not suitable for prototyping&lt;br /&gt;
&lt;br /&gt;
Henk &amp;amp; Jeffrey - works for them, aids in figuring out what code should do&lt;br /&gt;
&lt;br /&gt;
[http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-theo.html Clean Room development], Feathers - similar thinking about what your code should do but no tests&lt;br /&gt;
&lt;br /&gt;
Have to have a mock for everything not in this class -&amp;gt; listening to code&lt;br /&gt;
&lt;br /&gt;
[http://www.exampler.com/old-blog/2003/08/21/ Testing Quadrant] - Brian Marick, classification of tests&lt;br /&gt;
&lt;br /&gt;
Jeffrey - earlier projects rescued by tests&lt;br /&gt;
&lt;br /&gt;
* One project&#039;s code was bad, acceptance tests correct, rescued by running ATs and fixing&lt;br /&gt;
* Another project had good code in Java, porting to Ruby; ported tests first, then wrote code until tests passed, smooth process&lt;br /&gt;
&lt;br /&gt;
Can write tests only after initial design, when in &amp;quot;bug-fix&amp;quot; mode - Pavel&lt;br /&gt;
&lt;br /&gt;
Painful to retrofit tests - see [http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 Working Effectively with Legacy Code, Feathers]&lt;br /&gt;
&lt;br /&gt;
Does writing tests make you think less hard? Lets you decouple and delay decision about implementation as you are focussing on output. Henk - makes me think more, consider design and API&lt;br /&gt;
&lt;br /&gt;
Do you use pairing? Not currently, feel I need someone at same experience level to go fast - PJ has a talk on pairing styles including how to work with differing skill levels&lt;br /&gt;
&lt;br /&gt;
Some people don&#039;t always write tests if few customers or code is for fun&lt;br /&gt;
&lt;br /&gt;
Jeffrey - experience writing fun code for robot wars competition, expectation about quality of code != actual quality, so always writes tests&lt;br /&gt;
&lt;br /&gt;
Do you find TDD lets you think less? Decouples and lets you delay implementation decision&lt;br /&gt;
&lt;br /&gt;
Henk - makes me think _more_ about design and API&lt;br /&gt;
&lt;br /&gt;
Jeffrey - maybe thinking hard but about _fewer things_&lt;br /&gt;
&lt;br /&gt;
PJ - Don&#039;t write production code without a failing test&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Pair partner is both conscience (did you write a test?) and gives you permission (OK not to figure that out now)&lt;br /&gt;
&lt;br /&gt;
How about performance? Should run thousands of unit tests per second, but existing code may be too slow (Henk: reading file stream one byte at a time), need to revise&lt;br /&gt;
&lt;br /&gt;
Pavel - we do continuous delivery and find that you need to have tests for every change; don&#039;t deploy if this is missing&lt;br /&gt;
&lt;br /&gt;
How do you motivate yourself to do TDD? [http://www.butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata Screencast from Uncle Bob] and similar examples can be motivating&lt;br /&gt;
&lt;br /&gt;
Other examples: [http://www.jamesshore.com/Blog/Lets-Play/Episode-176.html Jeff Shore Let&#039;s Play TDD], [http://pairwith.us PairWithUs]&lt;br /&gt;
&lt;br /&gt;
Do brainteaser for every bug: how could I have written a test for this bug?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - one dev wrote tests because he didn&#039;t trust colleagues, they broke his code and he could detect right away, eventually said &amp;quot;how do you know? [CI &amp;amp; tests] oh, we should all do that&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pavel - wants to know about changes, continuous testing tells him about them&lt;br /&gt;
&lt;br /&gt;
Relative salary of dev &amp;amp; testers can be a motive for testing&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Scott Ambler discussing pairing with CTO, polled team, only 20% had code on screen &amp;amp; looking at it, so pairing would double productivity&lt;br /&gt;
&lt;br /&gt;
These are not personal motivations;&lt;br /&gt;
&lt;br /&gt;
Personal motivations:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;to be less wrong&amp;quot;&lt;br /&gt;
* not to be in debugger&lt;br /&gt;
* not get stuck&lt;br /&gt;
* Want not to be afraid of refactoring&lt;br /&gt;
* want to change code with confidence&lt;br /&gt;
* feel safer&lt;br /&gt;
* avoid angry emails from customers&lt;br /&gt;
* not find from &amp;quot;git blame&amp;quot; that the jerk who wrote the awful code was yourself&lt;br /&gt;
* love experience of writing code for 4 hours, check in, works first time&lt;br /&gt;
&lt;br /&gt;
Jeffrey - at Agitar, didn&#039;t want generated tests for their own code (because of course it was fine) but to protect themselves against someone else breaking their code&lt;br /&gt;
&lt;br /&gt;
How do you convince others to adopt TDD?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Crossing the Chasm and what motivates change&lt;br /&gt;
&lt;br /&gt;
* Early adopters adopt TDD because it&#039;s better - only 15% of world&lt;br /&gt;
* Later adopters have to have it solve a live problem for them&lt;br /&gt;
&lt;br /&gt;
Easy to &amp;quot;make&amp;quot; some teams use TDD, others harder, especially third parties, as they are not convinced - Jeffrey &amp;quot;not a problem for them&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Coding dojo to practise better methods every couple of weeks, majority accept that this works, six months in most are still doing unit testing&lt;br /&gt;
&lt;br /&gt;
Squirrel - &amp;quot;Convincing&amp;quot; people wrong mindset, help team to solve problems that they observe&lt;br /&gt;
&lt;br /&gt;
Writing tests that pass is like sex - after you have it the first time you never look back&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
	<entry>
		<id>https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14701</id>
		<title>TDD2012</title>
		<link rel="alternate" type="text/html" href="https://citconf.com/wiki/index.php?title=TDD2012&amp;diff=14701"/>
		<updated>2012-10-20T08:54:53Z</updated>

		<summary type="html">&lt;p&gt;Douglassquirrel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How deep to go in TDD?&lt;br /&gt;
&lt;br /&gt;
What do you mean by deep? Have to mock a lot, could have a million assertions&lt;br /&gt;
&lt;br /&gt;
[http://www.growing-object-oriented-software.com/ Growing Object Oriented Software, Guided by Tests]&lt;br /&gt;
&lt;br /&gt;
Pavel - TDD not suitable for prototyping&lt;br /&gt;
&lt;br /&gt;
Henk &amp;amp; Jeffrey - works for them, aids in figuring out what code should do&lt;br /&gt;
&lt;br /&gt;
[http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-theo.html Clean Room development], Feathers - similar thinking about what your code should do but no tests&lt;br /&gt;
&lt;br /&gt;
Have to have a mock for everything not in this class -&amp;gt; listening to code&lt;br /&gt;
&lt;br /&gt;
[http://www.exampler.com/old-blog/2003/08/21/ Testing Quadrant] - Brian Marick, classification of tests&lt;br /&gt;
&lt;br /&gt;
Jeffrey - earlier projects rescued by tests&lt;br /&gt;
&lt;br /&gt;
* One project&#039;s code was bad, acceptance tests correct, rescued by running ATs and fixing&lt;br /&gt;
* Another project had good code in Java, porting to Ruby; ported tests first, then wrote code until tests passed, smooth process&lt;br /&gt;
&lt;br /&gt;
Can write tests only after initial design, when in &amp;quot;bug-fix&amp;quot; mode - Pavel&lt;br /&gt;
&lt;br /&gt;
Painful to retrofit tests - see [http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052 Working Effectively with Legacy Code, Feathers]&lt;br /&gt;
&lt;br /&gt;
Does writing tests make you think less hard? Lets you decouple and delay decision about implementation as you are focussing on output. Henk - makes me think more, consider design and API&lt;br /&gt;
&lt;br /&gt;
Do you use pairing? Not currently, feel I need someone at same experience level to go fast - PJ has a talk on pairing styles including how to work with differing skill levels&lt;br /&gt;
&lt;br /&gt;
Some people don&#039;t always write tests if few customers or code is for fun&lt;br /&gt;
&lt;br /&gt;
Jeffrey - experience writing fun code for robot wars competition, expectation about quality of code != actual quality, so always writes tests&lt;br /&gt;
&lt;br /&gt;
Do you find TDD lets you think less? Decouples and lets you delay implementation decision&lt;br /&gt;
&lt;br /&gt;
Henk - makes me think _more_ about design and API&lt;br /&gt;
&lt;br /&gt;
Jeffrey - maybe thinking hard but about _fewer things_&lt;br /&gt;
&lt;br /&gt;
PJ - Don&#039;t write production code without a failing test&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Pair partner is both conscience (did you write a test?) and gives you permission (OK not to figure that out now)&lt;br /&gt;
&lt;br /&gt;
How about performance? Should run thousands of unit tests per second, but existing code may be too slow (Henk: reading file stream one byte at a time), need to revise&lt;br /&gt;
&lt;br /&gt;
Pavel - we do continuous delivery and find that you need to have tests for every change; don&#039;t deploy if this is missing&lt;br /&gt;
&lt;br /&gt;
How do you motivate yourself to do TDD? [http://www.butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata Screencast from Uncle Bob] and similar examples can be motivating&lt;br /&gt;
&lt;br /&gt;
Other examples: [http://www.jamesshore.com/Blog/Lets-Play/Episode-176.html Jeff Shore Let&#039;s Play TDD], [http://pairwith.us PairWithUs]&lt;br /&gt;
&lt;br /&gt;
Do brainteaser for every bug: how could I have written a test for this bug?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - one dev wrote tests because he didn&#039;t trust colleagues, they broke his code and he could detect right away, eventually said &amp;quot;how do you know? [CI &amp;amp; tests] oh, we should all do that&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pavel - wants to know about changes, continuous testing tells him about them&lt;br /&gt;
&lt;br /&gt;
Relative salary of dev &amp;amp; testers can be a motive for testing&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Scott Ambler discussing pairing with CTO, polled team, only 20% had code on screen &amp;amp; looking at it, so pairing would double productivity&lt;br /&gt;
&lt;br /&gt;
These are not personal motivations;&lt;br /&gt;
&lt;br /&gt;
Personal motivations:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;to be less wrong&amp;quot;&lt;br /&gt;
* not to be in debugger&lt;br /&gt;
* not get stuck&lt;br /&gt;
* Want not to be afraid of refactoring&lt;br /&gt;
* want to change code with confidence&lt;br /&gt;
* feel safer&lt;br /&gt;
* avoid angry emails from customers&lt;br /&gt;
* not find from &amp;quot;git blame&amp;quot; that the jerk who wrote the awful code was yourself&lt;br /&gt;
* love experience of writing code for 4 hours, check in, works first time&lt;br /&gt;
&lt;br /&gt;
Jeffrey - at Agitar, didn&#039;t want generated tests for their own code (because of course it was fine) but to protect themselves against someone else breaking their code&lt;br /&gt;
&lt;br /&gt;
How do you convince others to adopt TDD?&lt;br /&gt;
&lt;br /&gt;
Jeffrey - Crossing the Chasm and what motivates change&lt;br /&gt;
&lt;br /&gt;
* Early adopters adopt TDD because it&#039;s better - only 15% of world&lt;br /&gt;
* Later adopters have to have it solve a live problem for them&lt;/div&gt;</summary>
		<author><name>Douglassquirrel</name></author>
	</entry>
</feed>