<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Bits 'n Widgets</title>
    <link>http://bitsnwidgets.com/</link>
    <description>&amp;nbsp;&amp;nbsp;Thoughts on real-world, practical, common-sense approaches to Agile software development using Scrum and XP</description>
    <language>en-us</language>
    <copyright>John E. Boal</copyright>
    <lastBuildDate>Thu, 25 Sep 2008 01:47:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>webmaster@bitsnwidgets.com</managingEditor>
    <webMaster>webmaster@bitsnwidgets.com</webMaster>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=567be265-1963-4c5d-939d-10d0543ab86f</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,567be265-1963-4c5d-939d-10d0543ab86f.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,567be265-1963-4c5d-939d-10d0543ab86f.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=567be265-1963-4c5d-939d-10d0543ab86f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Why is your team doing Scrum? Check the
appropriate box below.<br /><br /><input name="r1" value="1" disabled="false" type="checkbox" />Somebody's boss someplace
said we have to do Agile now. 
<br /><input name="r2" value="2" disabled="false" type="checkbox" />Agile sounded like a
good thing to have on my resume.<br /><input name="r3" value="3" disabled="false" type="checkbox" />Our software has problems
and Agile is the magic bullet solution.<br /><input name="r4" value="4" disabled="false" type="checkbox" />Our team wants to get
better at quality software delivery and estimation.<br /><br />
Those of you who chose the last option, keep reading. Everyone else, please click <a target="_wf06" href="http://www.waterfall2006.com/">HERE</a>.<br /><br />
We do Scrum because the process yields better results. We do it because we want people
to think and be empowered as a team, rather than just being told what to do. We want
our software to please our customers. We want to please our customers regularly and
often. We want to be able to respond to changes in direction, changes in requirements,
or just change in general - in a positive way and continue to deliver useful software.
We like the notion of teamwork and collective ownership. We like collaboration. We
like to get feedback often, and integrate it into our process so we get better, faster.
We measure our success and progress only in terms of delivered, working software.<br /><br />
Scrum is more than a process for managing projects, it is a change in mindset. Just
deciding to do mini-waterfalls in 4-week cycles isn't Scrum. And it isn't very useful
or productive either. [BTW just so we're clear: A mini-waterfall looks like a 4-week
"sprint" where the first week is design and specification generation, two weeks are
coding, and the last week is testing and bug fixing.]<br /><br />
It takes a mind shift to a willingness to be a <b><i>TEAM</i></b> rather than just
a bunch of people working on the same project. There IS a difference. Without an attitude
of cooperation and collaboration, Scrum will not succeed (nor will any approach really),
and Scrum will just seem to be an additional burden to those forced into it.<br /><br />
Don't mandate that your team adopt Scrum. Explain to them why it's better. (At this
point I should probably mention that YOU should understand why it's better...) Convince
them. If they aren't convinced, keep at it until they are. If they are skeptical,
that's OK but they need to be open-minded enough to actually try it for a while. If
they aren't truly open-minded, or can't be convinced - DON'T DO SCRUM. This kind of
a process needs to have WILLING participants that are cooperative. It's not for everyone.
Be prepared for the fact that some people just don't get it, or WON'T get it. They
really need to find a different team to work on. Don't burden those on a Scrum team
with members who don't want to be there.<br /><br />
Scrum is not a silver bullet. It's not always the answer, but it is ONE answer. Educate
your team. Be supportive, and explain why the tenets of the <a href="http://agilemanifesto.org/">Agile
Manifesto</a> and the <a href="http://agilemanifesto.org/principles.html">twelve principles</a> behind
it are a good idea and that they can really work in your organization.<br /><br />
More advice. Have a Scrum master. This person should be trained in the role and understand
it. Have a true Product Owner (NOT the Scrum master by the way) who represents [ALL]
of the stakeholders. Make sure they really do identify and represent the real stakeholders,
and have the authority to prioritize. Hire a Scrum consultant, or bring in an experienced
person who has helped teams get up to speed on Scrum - and LISTEN TO THEM. Don't pick
and choose which pieces of Scrum you like at first, just do them all "by the book."
You can fine-tune your process in response to sprint retrospectives later.<br /><br />
Scrum can be a great way to develop software, or it can feel like a horrible burden.
It all depends on the attitude and openness of the team doing the process. Make sure
you make your experience the former instead of the latter.<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=567be265-1963-4c5d-939d-10d0543ab86f" /></body>
      <title>Why do we do Scrum?</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,567be265-1963-4c5d-939d-10d0543ab86f.aspx</guid>
      <link>http://BitsNWidgets.com/2008/09/25/WhyDoWeDoScrum.aspx</link>
      <pubDate>Thu, 25 Sep 2008 01:47:42 GMT</pubDate>
      <description>Why is your team doing Scrum? Check the appropriate box below.&lt;br&gt;
&lt;br&gt;
&lt;input name="r1" value="1" disabled="false" type="checkbox"&gt;Somebody's boss someplace
said we have to do Agile now. 
&lt;br&gt;
&lt;input name="r2" value="2" disabled="false" type="checkbox"&gt;Agile sounded like a good
thing to have on my resume.&lt;br&gt;
&lt;input name="r3" value="3" disabled="false" type="checkbox"&gt;Our software has problems
and Agile is the magic bullet solution.&lt;br&gt;
&lt;input name="r4" value="4" disabled="false" type="checkbox"&gt;Our team wants to get
better at quality software delivery and estimation.&lt;br&gt;
&lt;br&gt;
Those of you who chose the last option, keep reading. Everyone else, please click &lt;a target="_wf06" href="http://www.waterfall2006.com/"&gt;HERE&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
We do Scrum because the process yields better results. We do it because we want people
to think and be empowered as a team, rather than just being told what to do. We want
our software to please our customers. We want to please our customers regularly and
often. We want to be able to respond to changes in direction, changes in requirements,
or just change in general - in a positive way and continue to deliver useful software.
We like the notion of teamwork and collective ownership. We like collaboration. We
like to get feedback often, and integrate it into our process so we get better, faster.
We measure our success and progress only in terms of delivered, working software.&lt;br&gt;
&lt;br&gt;
Scrum is more than a process for managing projects, it is a change in mindset. Just
deciding to do mini-waterfalls in 4-week cycles isn't Scrum. And it isn't very useful
or productive either. [BTW just so we're clear: A mini-waterfall looks like a 4-week
"sprint" where the first week is design and specification generation, two weeks are
coding, and the last week is testing and bug fixing.]&lt;br&gt;
&lt;br&gt;
It takes a mind shift to a willingness to be a &lt;b&gt;&lt;i&gt;TEAM&lt;/i&gt;&lt;/b&gt; rather than just
a bunch of people working on the same project. There IS a difference. Without an attitude
of cooperation and collaboration, Scrum will not succeed (nor will any approach really),
and Scrum will just seem to be an additional burden to those forced into it.&lt;br&gt;
&lt;br&gt;
Don't mandate that your team adopt Scrum. Explain to them why it's better. (At this
point I should probably mention that YOU should understand why it's better...) Convince
them. If they aren't convinced, keep at it until they are. If they are skeptical,
that's OK but they need to be open-minded enough to actually try it for a while. If
they aren't truly open-minded, or can't be convinced - DON'T DO SCRUM. This kind of
a process needs to have WILLING participants that are cooperative. It's not for everyone.
Be prepared for the fact that some people just don't get it, or WON'T get it. They
really need to find a different team to work on. Don't burden those on a Scrum team
with members who don't want to be there.&lt;br&gt;
&lt;br&gt;
Scrum is not a silver bullet. It's not always the answer, but it is ONE answer. Educate
your team. Be supportive, and explain why the tenets of the &lt;a href="http://agilemanifesto.org/"&gt;Agile
Manifesto&lt;/a&gt; and the &lt;a href="http://agilemanifesto.org/principles.html"&gt;twelve principles&lt;/a&gt; behind
it are a good idea and that they can really work in your organization.&lt;br&gt;
&lt;br&gt;
More advice. Have a Scrum master. This person should be trained in the role and understand
it. Have a true Product Owner (NOT the Scrum master by the way) who represents [ALL]
of the stakeholders. Make sure they really do identify and represent the real stakeholders,
and have the authority to prioritize. Hire a Scrum consultant, or bring in an experienced
person who has helped teams get up to speed on Scrum - and LISTEN TO THEM. Don't pick
and choose which pieces of Scrum you like at first, just do them all "by the book."
You can fine-tune your process in response to sprint retrospectives later.&lt;br&gt;
&lt;br&gt;
Scrum can be a great way to develop software, or it can feel like a horrible burden.
It all depends on the attitude and openness of the team doing the process. Make sure
you make your experience the former instead of the latter.&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=567be265-1963-4c5d-939d-10d0543ab86f" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,567be265-1963-4c5d-939d-10d0543ab86f.aspx</comments>
      <category>scrum</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=82459be8-dc69-43af-b4de-8ca996a0c626</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,82459be8-dc69-43af-b4de-8ca996a0c626.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,82459be8-dc69-43af-b4de-8ca996a0c626.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=82459be8-dc69-43af-b4de-8ca996a0c626</wfw:commentRss>
      <title>Pair Programming - A Guideline</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,82459be8-dc69-43af-b4de-8ca996a0c626.aspx</guid>
      <link>http://BitsNWidgets.com/2008/09/23/PairProgrammingAGuideline.aspx</link>
      <pubDate>Tue, 23 Sep 2008 13:00:44 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;Here
is a kind of step-by-step guide to doing pair programming. If your team doesn’t adopt
any other principles of XP or lean, this is the one thing that will give the greatest
benefit for adoption. This is a good recipe for ROI++.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Attitudes&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;In
my experience, programmers are the least willing of all professionals in the software
development industry to be paired up on tasks. For some reason, we developers seem
to have attitudes and fears about this mode of work. I have heard attitudes expressed
like "I don't want someone to be nitpicking every character I type," "I dont want
to share my keyboard." There are also un-spoken fears that I have heard told: "They
might find out that I'm not as smart as they think I am," "the other guy might make
me look stupid," and "I don't want them to know how I really write code." These attitudes
and fears are the number one barrier to doing pair programming.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;C4
Requirements Checklist&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;For
people to be able to do pair programming, I suggest the following readiness checklist
to determine if someone is ready. Not everyone is at a point where pairing makes sense
for them. When creating a team to do pairing, it is important that everyone have an
open mind to trying the process. Give the list to the people and let them do it on
their own, and decide for themselves. Don't collect their lists, just their yes or
no answer.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ol style="MARGIN-TOP: 0in" type=1&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l2 level1 lfo1"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Am I willing to &lt;em&gt;&lt;u&gt;&lt;strong&gt;C&lt;/strong&gt;ooperate&lt;/u&gt;&lt;/em&gt; –
do I really want to do this or is someone just telling me I have to do it? Am I bought-in
to the idea or is it being forced on me?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l2 level1 lfo1"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Am I willing to &lt;em&gt;&lt;u&gt;&lt;strong&gt;C&lt;/strong&gt;ollaborate&lt;/u&gt;&lt;/em&gt; –
can I work together with others in a team environment where we all pitch in together
to accomplish a task, or do I need to do things only by myself to be successful?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l2 level1 lfo1"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Am I willing to &lt;em&gt;&lt;u&gt;&lt;strong&gt;C&lt;/strong&gt;ommunicate&lt;/u&gt;&lt;/em&gt; –
can I tell my team mates what I am thinking? Can I get a point across verbally? Can
I take a spontaneous thought and talk it through verbally and get someone else to
understand me? Am I willing to work toward these goals if I’m not quite there yet?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l2 level1 lfo1"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Am I willing to &lt;em&gt;&lt;u&gt;&lt;strong&gt;C&lt;/strong&gt;reate&lt;/u&gt;&lt;/em&gt; –
can I be of a mind-set that I am creating something of value regardless of the process,
and am I willing to try something new to accomplish this?&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Implementing
It&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;If
your team is on-board with the C4 checklist, congratulations! You now are able to
start off on a wonderful process of building some great software. My suggestion now
is to get some resources together. Here’s a starting recommendation. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ol style="MARGIN-TOP: 0in" type=1&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l0 level1 lfo3"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Pair Working Space&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol style="MARGIN-TOP: 0in" type=1&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level2 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The team should ideally
have a smallish space to do their pair programming work. This should be separate from
offices or cubicles. While this is not always possible, I have seen some great creativity
used to put the team together in their own space. Sometimes this means just adopting
a round meeting table in the middle of a cube farm. Whatever it means for your team,
do establish the pair working space. Use the guideline of 6-8 square feet per person,
and keep the team size under 10.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level1 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Desks, chairs&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level2 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;One desk for every
two people, and one chair per person, with one extra chair is just about perfect.
Don’t have the desks more than a few feet apart. Keep the team together in a smallish
space. This will greatly aid cross-communication between pairs while development is
happening.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level1 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Machines&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level2 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;One development machine
per desk. Two team members will be sharing one machine.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level1 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Monitors, Keyboards,
Mice&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l1 level2 lfo2"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Two of each per desk.
Space them two feet apart so that people can have a little personal space. Connect
both monitors to the dual-head video card, and clone the display so both have the
same image. Use USB keyboards and mice, and place one each in front of each monitor.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Orienting
the Team to Pairing&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;Be
sure to orient your team to this kind of thing first. Let them know that they will
be expected to work together on one machine sharing control, but that each will have
their own keyboard, monitor, and mouse. Remind them that cooperation and verbal communication
is essential when working with a partner.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Hours
and Etiquette&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;When
working closely with other people in this way, we need to be polite, focused, and
productive. There are times for all of us when we just aren’t all three of these,
and that’s OK – it’s just human nature. We need to be able to “check out” and go elsewhere
if that’s the case for anyone at a given time. [Assuming a standard 8AM-5PM day…]
Start pairing at 10am, take lunch at noon, and stop by 3PM. This gives everyone some
time to work on other things or take meetings outside of pairing. Adjust times accordingly
for your team, but this is a good starting point. Don’t make the mistake of thinking
your team can pair for 8 hours a day. A 5 or 6 hour pairing day is a lot, even for
an experienced team.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Challenges&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;At
first, there may be personality challenges. Some people are more easily able to communicate
and share control. Don’t worry if the first few days are a bit rocky, this actually
can be a good learning experience (as long as nobody blows up). Keep an eye on tempers
to make sure that hot situations can be defused before they cause problems. One technique
that works well is to switch pairing partners at the middle of the day, or at least
every day. This gets people new learning experiences and moves knowledge around the
team (another great benefit).&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;There
is one specific challenge that I want to bring up, because on a pairing team it can
be a real issue. Everyone should wash their hands. A lot. We shouldn’t have to remind
people to wash after visiting the bathroom, but DO it anyway. I encourage and ask
people to use hand sanitizer before touching the keyboard at my workstation. Bugs
have really gotten nasty out there, if you haven’t noticed. If there is an illness,
be sure to make the people stay at home, or a single cold or flu can wipe out all
development pretty fast. I recommend spending $2 for a small bottle of hand sanitizer
for every workstation and placing it in plain sight.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Benefits&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ul style="MARGIN-TOP: 0in" type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Team knowledge share&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Knowledge will naturally
migrate through the team, since people working together will share knowledge about
a task. Rotating people through tasks is a fantastic way to raise product knowledge
and awareness for a low cost.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Better code&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Two pair of eyes
on a piece of code are always better than one pair. We sometimes call this process
“real-time code review.” Mistakes are simply caught far, far sooner. Code mistakes
and poor design decisions simply just evaporate as two people think about the code
as it’s being written.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Quicker code&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Not that it executes
faster, but it probably will do that too. A pair can produce a solution to a feature
request far faster than a single developer in almost all cases I have seen, and every
study I have ever read. It’s not half the time, but it’s probably more like 2/3 (a
33% speed improvement for you percentage folks…)&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Tight-knit team&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The team will be
more integrated, stick together, be more cohesive, and more social together. People
on a pairing team will be united for the delivery of a product, and it the experience
will form bonds between team members.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;High-performance
team&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Pair programming
teams will almost always outperform teams that don’t use this technique. The more
experience teams get to have with pairing will yield even higher performance results.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level1 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Higher morale&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;ol style="MARGIN-TOP: 0in" type=a&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none; mso-list: l3 level2 lfo4"&gt;
&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Teams that use pair
programming are almost always happier, and more positive about their working experience.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 16pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Summary&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;When
we find the people who have an open mind, and are committed to success as a team,
we have a great asset to leverage to write good software. Using the technique of pair
programming in a shared workspace, we have many benefits for all - the company, the
team, and most importantly, the customer. It takes a little work to get to a high-performance
team, but it really isn’t much, and in my opinion, easier than finding a way to coax
performance from a non-paired team.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;
&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-pagination: none; mso-layout-grid-align: none"&gt;
&lt;span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Arial','sans-serif'"&gt;If
you have any input or feedback on this article, I welcome it – please post a comment
below.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=82459be8-dc69-43af-b4de-8ca996a0c626" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,82459be8-dc69-43af-b4de-8ca996a0c626.aspx</comments>
      <category>Team</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=8b2ac547-a215-4a09-851c-0898f0dff3b5</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,8b2ac547-a215-4a09-851c-0898f0dff3b5.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,8b2ac547-a215-4a09-851c-0898f0dff3b5.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8b2ac547-a215-4a09-851c-0898f0dff3b5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Please join us at the September Agile Beer
Night, at the Celtic Bayou in Redmond, from 5PM to 7 (or whenever). Looks to be a
pretty good turnout this time. We'll have someone say a few words for starters on
topics of conversation, and of course there will be beer...<br /><br />
Please stay tuned to the blog for the Agile Beer User's Group at <a href="http://AgileBUG.com">http://AgileBUG.com</a><br /><br /><p></p><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=8b2ac547-a215-4a09-851c-0898f0dff3b5" /></body>
      <title>September Agile Beer Night is Tue Sep 30</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,8b2ac547-a215-4a09-851c-0898f0dff3b5.aspx</guid>
      <link>http://BitsNWidgets.com/2008/09/21/SeptemberAgileBeerNightIsTueSep30.aspx</link>
      <pubDate>Sun, 21 Sep 2008 00:07:28 GMT</pubDate>
      <description>Please join us at the September Agile Beer Night, at the Celtic Bayou in Redmond, from 5PM to 7 (or whenever). Looks to be a pretty good turnout this time. We'll have someone say a few words for starters on topics of conversation, and of course there will be beer...&lt;br&gt;
&lt;br&gt;
Please stay tuned to the blog for the Agile Beer User's Group at &lt;a href="http://AgileBUG.com"&gt;http://AgileBUG.com&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=8b2ac547-a215-4a09-851c-0898f0dff3b5" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,8b2ac547-a215-4a09-851c-0898f0dff3b5.aspx</comments>
      <category>ABN</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=38568418-bfa3-4f54-9804-e01a5c854c2f</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,38568418-bfa3-4f54-9804-e01a5c854c2f.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,38568418-bfa3-4f54-9804-e01a5c854c2f.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=38568418-bfa3-4f54-9804-e01a5c854c2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Acceptance criteria are the key to making
sure our stories are done, and have as few bugs as possible. When the criteria are
weak, not complete, unclear or misunderstood, this can be the root of a whole host
of problems. Acceptance criteria are a critical point on which a team can focus to
improve their results and delivery.<br /><br />
Acceptance criteria can be implemented as automated acceptance tests. The PO, the
Developers, and the QA people on the team should all be in agreement that the acceptance
tests do illustrate that the software works as desired.<br /><br />
I wrote another article with more thoughts on acceptance criteria, in a <a href="http://testdrivendeveloper.com/2008/09/20/AcceptanceCriteriaIsCriticalForTestDrivenDevelopment.aspx">recent
post on the TestDrivenDeveloper.com</a> blog site, please check it out!<br /><br />
Acceptance criteria can be a tricky bit, especially if the customer and the team don't
have much experience at generating and capturing them. I would definitely consider
it a process smell if I saw a continuing pattern of low quality acceptance criteria.
Really this can kill a project if left untended to fester on its own.<br /><br />
From what I have seen on several teams, we should all focus more time and effort on
acceptance criteria gathering and then automating it in the sprint as part of the
criteria for Done.<br /><br />
If you have mechanisms or practices that enhance or enable better collection or identification
of acceptance criteria, please post a comment below.<br /><p></p><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=38568418-bfa3-4f54-9804-e01a5c854c2f" /></body>
      <title>Poor Acceptance Criteria is a Process Smell</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,38568418-bfa3-4f54-9804-e01a5c854c2f.aspx</guid>
      <link>http://BitsNWidgets.com/2008/09/14/PoorAcceptanceCriteriaIsAProcessSmell.aspx</link>
      <pubDate>Sun, 14 Sep 2008 16:06:14 GMT</pubDate>
      <description>Acceptance criteria are the key to making sure our stories are done, and have as few bugs as possible. When the criteria are weak, not complete, unclear or misunderstood, this can be the root of a whole host of problems. Acceptance criteria are a critical point on which a team can focus to improve their results and delivery.&lt;br&gt;
&lt;br&gt;
Acceptance criteria can be implemented as automated acceptance tests. The PO, the
Developers, and the QA people on the team should all be in agreement that the acceptance
tests do illustrate that the software works as desired.&lt;br&gt;
&lt;br&gt;
I wrote another article with more thoughts on acceptance criteria, in a &lt;a href="http://testdrivendeveloper.com/2008/09/20/AcceptanceCriteriaIsCriticalForTestDrivenDevelopment.aspx"&gt;recent
post on the TestDrivenDeveloper.com&lt;/a&gt; blog site, please check it out!&lt;br&gt;
&lt;br&gt;
Acceptance criteria can be a tricky bit, especially if the customer and the team don't
have much experience at generating and capturing them. I would definitely consider
it a process smell if I saw a continuing pattern of low quality acceptance criteria.
Really this can kill a project if left untended to fester on its own.&lt;br&gt;
&lt;br&gt;
From what I have seen on several teams, we should all focus more time and effort on
acceptance criteria gathering and then automating it in the sprint as part of the
criteria for Done.&lt;br&gt;
&lt;br&gt;
If you have mechanisms or practices that enhance or enable better collection or identification
of acceptance criteria, please post a comment below.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=38568418-bfa3-4f54-9804-e01a5c854c2f" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,38568418-bfa3-4f54-9804-e01a5c854c2f.aspx</comments>
      <category>Acceptance Testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=05c94d1b-afb9-4461-b1cd-bc0abb6889c7</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,05c94d1b-afb9-4461-b1cd-bc0abb6889c7.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,05c94d1b-afb9-4461-b1cd-bc0abb6889c7.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=05c94d1b-afb9-4461-b1cd-bc0abb6889c7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">"As a user, I can select my preferences
and save them<br /><p></p><img src="http://bitsnwidgets.com/content/binary/DoTheRightThing.jpg" border="0" /><br /><br />
so that the program will do the right thing."<br /><br />
ahem...<br /><br />
Sometimes we in the software business need to realize that the people using our software
are not experts in the field. We must become experts at understanding the requirements
and implications of the domain for which we write software, but we can not expect
our users to do the same. We must be able to make some decisions with the software
so that it does the "right thing" for the user. In today's world, software users have
little time to fiddle with settings or options. They just need the software to do
a job for them and do it the right way the first time. Our impatient "get it now"
society of users definitely has this attitude. If our software doesn't do what they
need it to do, they will more likely abandon it for something else before attempting
to fiddle with settings, parameters, options, and preferences.<br /><br />
Our product owners need to be keenly aware of this attitude, and get the balance right
with the features and stories that the customer base needs. While this is not an easy
task, it is a very important one. As our software gets smarter and smarter, it should
be more aware of what the user is attempting to accomplish, and it should make some
decisions and assumptions based on the mode of intent. In addition (here is the key
point missing from most software today) we need to *tell* the user what the mode is,
and what the assumptions are. If we got it wrong, or the user wanted something else,
then s/he has the opportunity to change the operating mode before the software attempts
to do the "wrong" thing.<br /><br />
A "mode" could be an entire slate of preference settings, that come packaged out of
the box with the defaults set for performing a specific task, or scenario. This entire
slate could be modified if the user is advanced and cares to fiddle with them, but
having the entire slate saved as a set, that could be chosen as a very simple selection.
Then, always make it clear what the system operating mode is, and how to change it.<br /><br />
Keep it simple by being smart about what the user is trying to accomplish and make
some decisions. Select the most appropriate mode, then - most importantly - communicate
those decisions to the user, and let them know what the software is assuming about
the task they are trying to perform. Give the user choices about how to control the
software, and change its mode, but keep the goal to be helping the user stay more
focused on performing the task at hand.<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=05c94d1b-afb9-4461-b1cd-bc0abb6889c7" /></body>
      <title>Preferences User Story</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,05c94d1b-afb9-4461-b1cd-bc0abb6889c7.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/27/PreferencesUserStory.aspx</link>
      <pubDate>Wed, 27 Aug 2008 13:00:11 GMT</pubDate>
      <description>"As a user, I can select my preferences and save them&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://bitsnwidgets.com/content/binary/DoTheRightThing.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
so that the program will do the right thing."&lt;br&gt;
&lt;br&gt;
ahem...&lt;br&gt;
&lt;br&gt;
Sometimes we in the software business need to realize that the people using our software
are not experts in the field. We must become experts at understanding the requirements
and implications of the domain for which we write software, but we can not expect
our users to do the same. We must be able to make some decisions with the software
so that it does the "right thing" for the user. In today's world, software users have
little time to fiddle with settings or options. They just need the software to do
a job for them and do it the right way the first time. Our impatient "get it now"
society of users definitely has this attitude. If our software doesn't do what they
need it to do, they will more likely abandon it for something else before attempting
to fiddle with settings, parameters, options, and preferences.&lt;br&gt;
&lt;br&gt;
Our product owners need to be keenly aware of this attitude, and get the balance right
with the features and stories that the customer base needs. While this is not an easy
task, it is a very important one. As our software gets smarter and smarter, it should
be more aware of what the user is attempting to accomplish, and it should make some
decisions and assumptions based on the mode of intent. In addition (here is the key
point missing from most software today) we need to *tell* the user what the mode is,
and what the assumptions are. If we got it wrong, or the user wanted something else,
then s/he has the opportunity to change the operating mode before the software attempts
to do the "wrong" thing.&lt;br&gt;
&lt;br&gt;
A "mode" could be an entire slate of preference settings, that come packaged out of
the box with the defaults set for performing a specific task, or scenario. This entire
slate could be modified if the user is advanced and cares to fiddle with them, but
having the entire slate saved as a set, that could be chosen as a very simple selection.
Then, always make it clear what the system operating mode is, and how to change it.&lt;br&gt;
&lt;br&gt;
Keep it simple by being smart about what the user is trying to accomplish and make
some decisions. Select the most appropriate mode, then - most importantly - communicate
those decisions to the user, and let them know what the software is assuming about
the task they are trying to perform. Give the user choices about how to control the
software, and change its mode, but keep the goal to be helping the user stay more
focused on performing the task at hand.&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=05c94d1b-afb9-4461-b1cd-bc0abb6889c7" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,05c94d1b-afb9-4461-b1cd-bc0abb6889c7.aspx</comments>
      <category>Design</category>
      <category>User Interface</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=378af5de-9e67-49a0-8b4d-cbd81713eca6</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=378af5de-9e67-49a0-8b4d-cbd81713eca6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">"Obviously, Development should be responsible
for the acceptance tests. The developers are the ones on the team who are the best
at writing good code. The developers are best able to turn the acceptance criteria
into valid executable specifications. Development then can use the automated acceptance
tests to drive the development TDD cycle."<br /><p></p><br />
"In QA, we never totally trust the developers. We do trust them to do the right thing.
However, we have a saying in QA - Trust but Verify. QA should be responsible for the
acceptance tests. At the end of the day, it is our job to make sure that the software
meets the criteria for acceptance, so it's really a QA ballpark. Dev's should focus
on unit tests."<br /><br />
Two strong opinions, and really I think both are right. Development should be using
acceptance tests to drive an ATDD cycle. Developers are (usually) better at writing
code than SDETs, so they do a more efficient job on acceptance tests. But QA probably
has a more even overall view of the software, and from a different and more independent
perspective, so they should be writing the acceptance tests as well as the other test
automation. QA also has the responsibility of signing off on the code, so they should
be writing the acceptance tests.<br /><br />
So, this may be one way to resolve the issue. Have developers and testers both work
on automated acceptance tests for the first story. When the tests are completed, developers
are free to begin working on the unit tests and code to satisfy the acceptance tests.
QA can then begin test case generation and automation implementation.<br /><br />
I believe that this solution is the best of both worlds, because Development and QA
will be completely in sync and on the same page for all of the stories where the acceptance
tests are co-developed. There won't be any ambiguity on whether the software meets
criteria, and both teams will be in agreement as to what is passing and what isn't.
The tests will be well-written, and they will run as efficiently and accurately as
possible. They will be written with multiple perspectives - the customer (who supplied
the acceptance criteria), QA who makes sure that the test accurately guarantees the
outcome, and Development, who makes automation quicker to implement and more efficient.<br /><br />
With automated acceptance tests co-written by dev and test, we have a great common
point of communication, and a good example of how teamwork can really help software
shine and inspire confidence and trust in the eye of the customer.<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=378af5de-9e67-49a0-8b4d-cbd81713eca6" /></body>
      <title>Automated Acceptance Tests - Who Should Write Them, Dev or QA?</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/22/AutomatedAcceptanceTestsWhoShouldWriteThemDevOrQA.aspx</link>
      <pubDate>Fri, 22 Aug 2008 04:21:44 GMT</pubDate>
      <description>"Obviously, Development should be responsible for the acceptance tests. The developers are the ones on the team who are the best at writing good code. The developers are best able to turn the acceptance criteria into valid executable specifications. Development then can use the automated acceptance tests to drive the development TDD cycle."&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
"In QA, we never totally trust the developers. We do trust them to do the right thing.
However, we have a saying in QA - Trust but Verify. QA should be responsible for the
acceptance tests. At the end of the day, it is our job to make sure that the software
meets the criteria for acceptance, so it's really a QA ballpark. Dev's should focus
on unit tests."&lt;br&gt;
&lt;br&gt;
Two strong opinions, and really I think both are right. Development should be using
acceptance tests to drive an ATDD cycle. Developers are (usually) better at writing
code than SDETs, so they do a more efficient job on acceptance tests. But QA probably
has a more even overall view of the software, and from a different and more independent
perspective, so they should be writing the acceptance tests as well as the other test
automation. QA also has the responsibility of signing off on the code, so they should
be writing the acceptance tests.&lt;br&gt;
&lt;br&gt;
So, this may be one way to resolve the issue. Have developers and testers both work
on automated acceptance tests for the first story. When the tests are completed, developers
are free to begin working on the unit tests and code to satisfy the acceptance tests.
QA can then begin test case generation and automation implementation.&lt;br&gt;
&lt;br&gt;
I believe that this solution is the best of both worlds, because Development and QA
will be completely in sync and on the same page for all of the stories where the acceptance
tests are co-developed. There won't be any ambiguity on whether the software meets
criteria, and both teams will be in agreement as to what is passing and what isn't.
The tests will be well-written, and they will run as efficiently and accurately as
possible. They will be written with multiple perspectives - the customer (who supplied
the acceptance criteria), QA who makes sure that the test accurately guarantees the
outcome, and Development, who makes automation quicker to implement and more efficient.&lt;br&gt;
&lt;br&gt;
With automated acceptance tests co-written by dev and test, we have a great common
point of communication, and a good example of how teamwork can really help software
shine and inspire confidence and trust in the eye of the customer.&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=378af5de-9e67-49a0-8b4d-cbd81713eca6" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,378af5de-9e67-49a0-8b4d-cbd81713eca6.aspx</comments>
      <category>Team</category>
      <category>testing</category>
      <category>Acceptance Testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=c6618fc9-440e-432c-9a83-05ae28fba06b</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c6618fc9-440e-432c-9a83-05ae28fba06b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have posted the acceptance test code
in both Selenium and WatiN on the <a href="http://agilebug.com/2008/08/21/MeetingTonightOwlThistleSeattle5PM.aspx">AgileBUG.com</a> site.
This code is a short demo and example of how we can do acceptance testing using both
tools. The presentation is a short one on what ATDD is, and why we should do it. It
serves as a prelude to the tools demo.<br /><br />
Join us at the Owl and Thistle tonight in person for a pint and some good agile discussions!<br /><p></p><br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c6618fc9-440e-432c-9a83-05ae28fba06b" /></body>
      <title>Selenium and WatiN code examples, ATDD presentation</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/21/SeleniumAndWatiNCodeExamplesATDDPresentation.aspx</link>
      <pubDate>Thu, 21 Aug 2008 17:22:20 GMT</pubDate>
      <description>I have posted the acceptance test code in both Selenium and WatiN on the &lt;a href="http://agilebug.com/2008/08/21/MeetingTonightOwlThistleSeattle5PM.aspx"&gt;AgileBUG.com&lt;/a&gt; site.
This code is a short demo and example of how we can do acceptance testing using both
tools. The presentation is a short one on what ATDD is, and why we should do it. It
serves as a prelude to the tools demo.&lt;br&gt;
&lt;br&gt;
Join us at the Owl and Thistle tonight in person for a pint and some good agile discussions!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=c6618fc9-440e-432c-9a83-05ae28fba06b" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,c6618fc9-440e-432c-9a83-05ae28fba06b.aspx</comments>
      <category>ABN</category>
      <category>TDD</category>
      <category>testing</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=a30602ce-09c3-421c-94b3-b14cf7609829</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,a30602ce-09c3-421c-94b3-b14cf7609829.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,a30602ce-09c3-421c-94b3-b14cf7609829.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a30602ce-09c3-421c-94b3-b14cf7609829</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">The UW Extension for Professional Development
and Continuing Education now has a <a href="http://www.extension.washington.edu/ext/certificates/agi/agi_gen.asp">Certificate
Program in Agile Development</a>. It's being taught by some guys I used to work with
first-hand, so I happen to know they are all pretty good at Agile Development. They
are certainly highly qualified, and this certification course is a good opportunity
for those folks who may not be as familiar with Agile principles to get some good
instruction on how to do it well. Be sure to <a href="http://www.extension.washington.edu/ext/certificates/agi/agi_hta.asp">apply
now</a>, as this course is likely to fill fast.<br /><br /><p></p><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=a30602ce-09c3-421c-94b3-b14cf7609829" /></body>
      <title>Become a Certified Agile Developer!</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,a30602ce-09c3-421c-94b3-b14cf7609829.aspx</guid>
      <link>http://BitsNWidgets.com/2008/08/01/BecomeACertifiedAgileDeveloper.aspx</link>
      <pubDate>Fri, 01 Aug 2008 20:10:31 GMT</pubDate>
      <description>The UW Extension for Professional Development and Continuing Education now has a &lt;a href="http://www.extension.washington.edu/ext/certificates/agi/agi_gen.asp"&gt;Certificate
Program in Agile Development&lt;/a&gt;. It's being taught by some guys I used to work with
first-hand, so I happen to know they are all pretty good at Agile Development. They
are certainly highly qualified, and this certification course is a good opportunity
for those folks who may not be as familiar with Agile principles to get some good
instruction on how to do it well. Be sure to &lt;a href="http://www.extension.washington.edu/ext/certificates/agi/agi_hta.asp"&gt;apply
now&lt;/a&gt;, as this course is likely to fill fast.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=a30602ce-09c3-421c-94b3-b14cf7609829" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,a30602ce-09c3-421c-94b3-b14cf7609829.aspx</comments>
      <category>scrum</category>
      <category>Team</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=b2875290-cf6c-4cda-bd77-7e01f73480f9</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,b2875290-cf6c-4cda-bd77-7e01f73480f9.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,b2875290-cf6c-4cda-bd77-7e01f73480f9.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=b2875290-cf6c-4cda-bd77-7e01f73480f9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Arial" size="2">The next <a href="http://agilebug.com/2008/07/23/AgileBeerNight.aspx">Agile
Beer Night is on Thursday August 21 2008</a> 5PM to 8PM at the <a href="http://www.owlnthistle.com/owlhome.html">Owl
and Thistle Irish Pub and Restaurant</a> at 808 Post Avenue in downtown Seattle.</font>
        </p>
        <p>
          <font size="2">
            <font face="Arial">More information can be found here at the AgileBUG.com
web site. There will be a presentation on Automated Acceptance Tests, and UI testing.
It's a great opportunity for networking and just having a fun time.<br /></font>
          </font>
        </p>
Please tell everyone... track it back... spread the word... oh - and SHOW UP!!!<br /><br />
Carpool if possible. Bus if able. The location is on the corner of Post and Columbia,
around the corner from the Mae Phim Thai restaurant, and just below the Fado Irish
pub.<br /><br />
The food is good, they have lots of beers and it will be happy hour, so it's $3 burgers,
$3 fish and chips, and $2.50 beers and well drinks!<br /><br />
Today's nerd dinner was successful... let's make this event successful also!<br /><br />
Practice agile? Want to? Like to meet some folks who do it well? Then let's get together
in Seattle for a pint and discus Agile!<br /><br />
See you there...<br /><img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=b2875290-cf6c-4cda-bd77-7e01f73480f9" /></body>
      <title>Agile Beer Night is Aug. 21</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,b2875290-cf6c-4cda-bd77-7e01f73480f9.aspx</guid>
      <link>http://BitsNWidgets.com/2008/07/23/AgileBeerNightIsAug21.aspx</link>
      <pubDate>Wed, 23 Jul 2008 06:17:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font face="Arial" size="2"&gt;The next &lt;a href="http://agilebug.com/2008/07/23/AgileBeerNight.aspx"&gt;Agile
Beer Night is on Thursday August 21 2008&lt;/a&gt; 5PM to 8PM at the &lt;a href="http://www.owlnthistle.com/owlhome.html"&gt;Owl
and Thistle Irish Pub and Restaurant&lt;/a&gt; at 808 Post Avenue in downtown Seattle.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;&lt;font face="Arial"&gt;More information can be found here at the AgileBUG.com
web site. There will be a presentation on Automated Acceptance Tests, and UI testing.
It's a great opportunity for networking and just having a fun time.&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;
&lt;/p&gt;
Please tell everyone... track it back... spread the word... oh - and SHOW UP!!!&lt;br&gt;
&lt;br&gt;
Carpool if possible. Bus if able. The location is on the corner of Post and Columbia,
around the corner from the Mae Phim Thai restaurant, and just below the Fado Irish
pub.&lt;br&gt;
&lt;br&gt;
The food is good, they have lots of beers and it will be happy hour, so it's $3 burgers,
$3 fish and chips, and $2.50 beers and well drinks!&lt;br&gt;
&lt;br&gt;
Today's nerd dinner was successful... let's make this event successful also!&lt;br&gt;
&lt;br&gt;
Practice agile? Want to? Like to meet some folks who do it well? Then let's get together
in Seattle for a pint and discus Agile!&lt;br&gt;
&lt;br&gt;
See you there...&lt;br&gt;
&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=b2875290-cf6c-4cda-bd77-7e01f73480f9" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,b2875290-cf6c-4cda-bd77-7e01f73480f9.aspx</comments>
      <category>ABN</category>
    </item>
    <item>
      <trackback:ping>http://bitsnwidgets.com/Trackback.aspx?guid=fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a</trackback:ping>
      <pingback:server>http://bitsnwidgets.com/pingback.aspx</pingback:server>
      <pingback:target>http://bitsnwidgets.com/PermaLink,guid,fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a.aspx</pingback:target>
      <dc:creator>John Boal</dc:creator>
      <wfw:comment>http://bitsnwidgets.com/CommentView,guid,fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a.aspx</wfw:comment>
      <wfw:commentRss>http://bitsnwidgets.com/SyndicationService.asmx/GetEntryCommentsRss?guid=fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I have heard a lot of discussion lately
about the use of the "#region" directive in C#. There are various camps (some religious)
on this topic, so let me throw in my twopence.<br /><br /><p></p>
Many developers like to use regions to collapse sections of the code because it makes
it easier for them to focus on a particular section. That's nice.<br /><br />
If there is that much code in a single file (which *should* be only ONE class), then
there is probably too much code in that class. Class design should be focused on one
specific thing. According to good OO principles, classes should be autonomous, and
do one specific thing. Classes should be intelligent groupings for functionality relating
to a specific, focused purpose. The use of the region to group code bits together
in a file is a good indication that there is probably too much code.<br /><br />
Simplicity is a highly desired principle in software development. It's the simplest
thing that gets the kudos, not the most complicated. Developers who try to write complex,
convoluted code so that they can look good to their peers are really doing the opposite.
Added complexity is very costly, in time for other people to understand it, debug
it, and maintain it.<br /><br />
Here are some ways to determine some code smells in this area.<br /><br /><ul><li>
Do methods have more than 25 lines of code? If so they are probably too big - this
is a code smell.</li><li>
Do classes have more than 12 methods? If so, this may be another code smell. Classes
that have lots of methods probably are doing too much. See if they can be broken out
into more focused pieces.</li><li>
Are there more than 3 constructors? Sometimes a lot of constructors could be a code
smell indicating using a class for different things in different places.</li></ul>
Anyone else have any metrics that they use? Please respond with comments below.<br /><br />
These kinds of things should be completely discussed on a team, and woven into working
agreements, and coding standards guidelines. Teams that work within these are the
most productive because everyone is on the same page and playing by the same set of
rules. If your team doesn't have a guideline for these kinds of things, I would encourage
you to write one up today and get input from your team.<img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a" /></body>
      <title>#region is a Code Smell.</title>
      <guid isPermaLink="false">http://bitsnwidgets.com/PermaLink,guid,fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a.aspx</guid>
      <link>http://BitsNWidgets.com/2008/07/18/regionIsACodeSmell.aspx</link>
      <pubDate>Fri, 18 Jul 2008 16:19:59 GMT</pubDate>
      <description>I have heard a lot of discussion lately about the use of the "#region" directive in C#. There are various camps (some religious) on this topic, so let me throw in my twopence.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
Many developers like to use regions to collapse sections of the code because it makes
it easier for them to focus on a particular section. That's nice.&lt;br&gt;
&lt;br&gt;
If there is that much code in a single file (which *should* be only ONE class), then
there is probably too much code in that class. Class design should be focused on one
specific thing. According to good OO principles, classes should be autonomous, and
do one specific thing. Classes should be intelligent groupings for functionality relating
to a specific, focused purpose. The use of the region to group code bits together
in a file is a good indication that there is probably too much code.&lt;br&gt;
&lt;br&gt;
Simplicity is a highly desired principle in software development. It's the simplest
thing that gets the kudos, not the most complicated. Developers who try to write complex,
convoluted code so that they can look good to their peers are really doing the opposite.
Added complexity is very costly, in time for other people to understand it, debug
it, and maintain it.&lt;br&gt;
&lt;br&gt;
Here are some ways to determine some code smells in this area.&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Do methods have more than 25 lines of code? If so they are probably too big - this
is a code smell.&lt;/li&gt;
&lt;li&gt;
Do classes have more than 12 methods? If so, this may be another code smell. Classes
that have lots of methods probably are doing too much. See if they can be broken out
into more focused pieces.&lt;/li&gt;
&lt;li&gt;
Are there more than 3 constructors? Sometimes a lot of constructors could be a code
smell indicating using a class for different things in different places.&lt;/li&gt;
&lt;/ul&gt;
Anyone else have any metrics that they use? Please respond with comments below.&lt;br&gt;
&lt;br&gt;
These kinds of things should be completely discussed on a team, and woven into working
agreements, and coding standards guidelines. Teams that work within these are the
most productive because everyone is on the same page and playing by the same set of
rules. If your team doesn't have a guideline for these kinds of things, I would encourage
you to write one up today and get input from your team.&lt;img width="0" height="0" src="http://bitsnwidgets.com/aggbug.ashx?id=fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a" /&gt;</description>
      <comments>http://bitsnwidgets.com/CommentView,guid,fc1e21d2-66c8-4e1c-a0aa-02c558c40e4a.aspx</comments>
      <category>Design</category>
      <category>Team</category>
    </item>
  </channel>
</rss>