<?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:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Mo Khan: My Blog! - Agile</title>
    <link>http://mokhan.ca/blog/</link>
    <description>Update your gray matter, because one day it may matter!</description>
    <language>en-us</language>
    <copyright>Mo Khan</copyright>
    <lastBuildDate>Wed, 10 Dec 2008 14:17:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>mo@mokhan.ca</managingEditor>
    <webMaster>mo@mokhan.ca</webMaster>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=e2692ad3-2c09-4403-9d4f-e1b7f834cc94</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,e2692ad3-2c09-4403-9d4f-e1b7f834cc94.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thank you everyone who attended <a href="http://calgaryagile.com/node/25">our presentation</a> last
night at the <a href="http://calgaryagile.com/">Calgary Agile Methodologies User Group</a>.
We had a tonne of fun, and hope that you took away some valuable information.
</p>
        <p>
          <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image045_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image045_thumb.jpg" width="244" border="0" />
          </a>
          <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image044_2.jpg">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image044_thumb.jpg" width="244" border="0" />
          </a>   <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image046_6.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image046_thumb_2.jpg" width="196" border="0" /></a></p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=e2692ad3-2c09-4403-9d4f-e1b7f834cc94" />
      </body>
      <title>Shortening The Feedback Loop</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,e2692ad3-2c09-4403-9d4f-e1b7f834cc94.aspx</guid>
      <link>http://mokhan.ca/blog/2008/12/10/Shortening+The+Feedback+Loop.aspx</link>
      <pubDate>Wed, 10 Dec 2008 14:17:36 GMT</pubDate>
      <description>&lt;p&gt;
Thank you everyone who attended &lt;a href="http://calgaryagile.com/node/25"&gt;our presentation&lt;/a&gt; last
night at the &lt;a href="http://calgaryagile.com/"&gt;Calgary Agile Methodologies User Group&lt;/a&gt;.
We had a tonne of fun, and hope that you took away some valuable information.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image045_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image045_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image044_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image044_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image046_6.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="CAMUG eCompliance" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/e33079bad413_65E8/Image046_thumb_2.jpg" width="196" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=e2692ad3-2c09-4403-9d4f-e1b7f834cc94" /&gt;</description>
      <category>Agile</category>
      <category>Conferences</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=a8246146-0925-44e9-89b0-0cee5d869d56</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,a8246146-0925-44e9-89b0-0cee5d869d56.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you're going to practice any form of unit testing you need to learn about the different
types of tests. I have yet to read XUnit Test Patterns, but I'm sure this will offer
a great deal more detail then this post. Also, I'm anxiously awaiting "The Art
Of Unit Testing"
</p>
        <h3>Unit Tests
</h3>
        <p>
Unit tests are blocks of code that exercise very specific areas of a code base to
ensure the it is meeting it's responsibility (NOT responsibilities in the plural sense.
See Single Responsibility Principal). At it's core its asserting that a very specific
result or behavior is met. Unit tests can be broken down into two types. 
</p>
        <h4>Black Box Testing (State)
</h4>
        <p>
The first is the traditional state based (black box) unit tests. These are unit tests
that assert that components of the system exert a behavior that expected from the
perspective of a client component. It cares less about the actual implementation of
the component and more about the result. These types of tests tend to be easier to
refactor and are a great way to start learning about test driven development or unit
testing in general. The unit tests give you the confidence to go in to the trenches
and make significant changes to the underlying implementation. This allows you to
evolve a code base with confidence and precision. (And remember software development
is an evolution. Using the same architecture and tools that you did from several years
ago could indicate a smell.)
</p>
        <p>
For example:
</p>
        <pre class="code">        [<span style="color: rgb(43,145,175)">Test</span>] <span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,255)">void</span> Should_be_able_to_lease_a_slip()
{ <span style="color: rgb(43,145,175)">ICustomer</span> customer = CreateSUT( ); <span style="color: rgb(43,145,175)">ISlip</span> slip
= <span style="color: rgb(43,145,175)">ObjectMother</span>.Slip( ); <span style="color: rgb(43,145,175)">ILeaseDuration</span> duration
= <span style="color: rgb(43,145,175)">LeaseDurations</span>.Monthly; customer.Lease(
slip, duration ); <span style="color: rgb(43,145,175)">Assert</span>.AreEqual( 1, <span style="color: rgb(43,145,175)">ListFactory</span>.From(
customer.Leases( ) ).Count ); }</pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <h4>White Box Testing (Interaction)
</h4>
        <p>
This type of unit test is more focused on the interaction of components then the result.
It's verifying expectations that components are working as expected with it's dependencies
under different conditions. It's a way to simulate different environment conditions
without actually having to exercise the component in that environment. The canonical
example is to mock or stub out an interaction with a database or third party component.
</p>
        <p>
It's called white box testing because it's like you can see clearly through the box
to see what's going on inside. It might make more sense to refer to this as glass
box testing. 
</p>
        <p>
For example:
</p>
        <pre class="code">        [<span style="color: rgb(43,145,175)">Test</span>] <span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,255)">void</span> Should_leverage_task_to_retrieve_all_registered_boats_for_customer()
{ <span style="color: rgb(0,0,255)">long</span> customerId = 23; <span style="color: rgb(43,145,175)">IList</span>&lt; <span style="color: rgb(43,145,175)">BoatRegistrationDTO</span> &gt;
boats = <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(43,145,175)">List</span>&lt; <span style="color: rgb(43,145,175)">BoatRegistrationDTO</span> &gt;(
); <span style="color: rgb(0,0,255)">using</span> ( _mockery.Record( ) ) { <span style="color: rgb(43,145,175)">SetupResult</span>.For(
_mockRequest.ParsePayloadFor( <span style="color: rgb(43,145,175)">PayloadKeys</span>.CustomerId
) ).Return( customerId ); <span style="color: rgb(43,145,175)">Expect</span>.Call(
_mockTask.AllBoatsFor( customerId ) ).Return( boats ); } <span style="color: rgb(0,0,255)">using</span> (
_mockery.Playback( ) ) { CreateSUT( ).Initialize( ); } }</pre>
        <a href="http://11011.net/software/vspaste">
        </a>
        <h3>Integration Test
</h3>
        <p>
Integration tests are tests that sweep across a system. They exercise the system from
top down, to ensure that it is behaving as expected in a production like environment.
This is a great place to weed out contracts that have not been implemented, and help
to identify different environment scenarios that may need further unit testing. These
tests actually hit the third party components and exercise the full system. These
tests typically take a little longer depending on the environment conditions such
as hitting a database.
</p>
        <p>
There are frameworks available, such as Fit, that allow business analysts to define
test criteria that can then exercise the system top down. The problem with some of
these frameworks is that they can implicitly allow the BA to start designing how the
system is implemented if taken as a literal design spec. I much prefer writing top
down tests rather then implementing fit-like fixtures. 
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=a8246146-0925-44e9-89b0-0cee5d869d56" />
      </body>
      <title>The different flavors of tests</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,a8246146-0925-44e9-89b0-0cee5d869d56.aspx</guid>
      <link>http://mokhan.ca/blog/2008/02/01/The+Different+Flavors+Of+Tests.aspx</link>
      <pubDate>Fri, 01 Feb 2008 23:02:32 GMT</pubDate>
      <description>&lt;p&gt;
If you're going to practice any form of unit testing you need to learn about the different
types of tests. I have yet to read XUnit Test Patterns, but I'm sure this will offer
a great deal more detail then this post. Also, I'm anxiously awaiting &amp;quot;The Art
Of Unit Testing&amp;quot;
&lt;/p&gt;
&lt;h3&gt;Unit Tests
&lt;/h3&gt;
&lt;p&gt;
Unit tests are blocks of code that exercise very specific areas of a code base to
ensure the it is meeting it's responsibility (NOT responsibilities in the plural sense.
See Single Responsibility Principal). At it's core its asserting that a very specific
result or behavior is met. Unit tests can be broken down into two types. 
&lt;/p&gt;
&lt;h4&gt;Black Box Testing (State)
&lt;/h4&gt;
&lt;p&gt;
The first is the traditional state based (black box) unit tests. These are unit tests
that assert that components of the system exert a behavior that expected from the
perspective of a client component. It cares less about the actual implementation of
the component and more about the result. These types of tests tend to be easier to
refactor and are a great way to start learning about test driven development or unit
testing in general. The unit tests give you the confidence to go in to the trenches
and make significant changes to the underlying implementation. This allows you to
evolve a code base with confidence and precision. (And remember software development
is an evolution. Using the same architecture and tools that you did from several years
ago could indicate a smell.)
&lt;/p&gt;
&lt;p&gt;
For example:
&lt;/p&gt;
&lt;pre class="code"&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;Test&lt;/span&gt;] &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Should_be_able_to_lease_a_slip()
{ &lt;span style="color: rgb(43,145,175)"&gt;ICustomer&lt;/span&gt; customer = CreateSUT( ); &lt;span style="color: rgb(43,145,175)"&gt;ISlip&lt;/span&gt; slip
= &lt;span style="color: rgb(43,145,175)"&gt;ObjectMother&lt;/span&gt;.Slip( ); &lt;span style="color: rgb(43,145,175)"&gt;ILeaseDuration&lt;/span&gt; duration
= &lt;span style="color: rgb(43,145,175)"&gt;LeaseDurations&lt;/span&gt;.Monthly; customer.Lease(
slip, duration ); &lt;span style="color: rgb(43,145,175)"&gt;Assert&lt;/span&gt;.AreEqual( 1, &lt;span style="color: rgb(43,145,175)"&gt;ListFactory&lt;/span&gt;.From(
customer.Leases( ) ).Count ); }&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; 
&lt;h4&gt;White Box Testing (Interaction)
&lt;/h4&gt;
&lt;p&gt;
This type of unit test is more focused on the interaction of components then the result.
It's verifying expectations that components are working as expected with it's dependencies
under different conditions. It's a way to simulate different environment conditions
without actually having to exercise the component in that environment. The canonical
example is to mock or stub out an interaction with a database or third party component.
&lt;/p&gt;
&lt;p&gt;
It's called white box testing because it's like you can see clearly through the box
to see what's going on inside. It might make more sense to refer to this as glass
box testing. 
&lt;/p&gt;
&lt;p&gt;
For example:
&lt;/p&gt;
&lt;pre class="code"&gt;        [&lt;span style="color: rgb(43,145,175)"&gt;Test&lt;/span&gt;] &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Should_leverage_task_to_retrieve_all_registered_boats_for_customer()
{ &lt;span style="color: rgb(0,0,255)"&gt;long&lt;/span&gt; customerId = 23; &lt;span style="color: rgb(43,145,175)"&gt;IList&lt;/span&gt;&amp;lt; &lt;span style="color: rgb(43,145,175)"&gt;BoatRegistrationDTO&lt;/span&gt; &amp;gt;
boats = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;List&lt;/span&gt;&amp;lt; &lt;span style="color: rgb(43,145,175)"&gt;BoatRegistrationDTO&lt;/span&gt; &amp;gt;(
); &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; ( _mockery.Record( ) ) { &lt;span style="color: rgb(43,145,175)"&gt;SetupResult&lt;/span&gt;.For(
_mockRequest.ParsePayloadFor( &lt;span style="color: rgb(43,145,175)"&gt;PayloadKeys&lt;/span&gt;.CustomerId
) ).Return( customerId ); &lt;span style="color: rgb(43,145,175)"&gt;Expect&lt;/span&gt;.Call(
_mockTask.AllBoatsFor( customerId ) ).Return( boats ); } &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; (
_mockery.Playback( ) ) { CreateSUT( ).Initialize( ); } }&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; 
&lt;h3&gt;Integration Test
&lt;/h3&gt;
&lt;p&gt;
Integration tests are tests that sweep across a system. They exercise the system from
top down, to ensure that it is behaving as expected in a production like environment.
This is a great place to weed out contracts that have not been implemented, and help
to identify different environment scenarios that may need further unit testing. These
tests actually hit the third party components and exercise the full system. These
tests typically take a little longer depending on the environment conditions such
as hitting a database.
&lt;/p&gt;
&lt;p&gt;
There are frameworks available, such as Fit, that allow business analysts to define
test criteria that can then exercise the system top down. The problem with some of
these frameworks is that they can implicitly allow the BA to start designing how the
system is implemented if taken as a literal design spec. I much prefer writing top
down tests rather then implementing fit-like fixtures. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=a8246146-0925-44e9-89b0-0cee5d869d56" /&gt;</description>
      <category>Agile</category>
      <category>TDD</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=1c2e3c8c-5c3e-47bd-aaba-9ef398991acf</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,1c2e3c8c-5c3e-47bd-aaba-9ef398991acf.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the books I've read this month is....
</p>
        <p>
          <table border="0">
            <tbody>
              <tr>
                <td valign="top">
                  <img src="http://ecx.images-amazon.com/images/I/118wBG9VziL.jpg" border="1" />
                </td>
                <td valign="top">
                  <b>Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</b>
                  <br />
by Kent Beck, Cynthia Andres 
<br /><br /><a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321278658%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321278658%253FSubscriptionId=0525E2PQ81DD7ZTWTK82">Read
more about this title...</a></td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
I really enjoyed reading this book. It paints a picture of what an ideal XP team can
look like and talks about the principals, practices and values of XP. I'd like to
share some excerpts from the book that really stuck out and hand an impact on me.
</p>
        <p>
"If you have six weeks to get a project done, the only thing you can control
is your own behavior. Will you get six weeks' worth of work done or less? you can't
control others' expectations. You can tell them what you know about the project so
their expectations have a chance of matching reality. My terror of deadlines vanished
when I learned this lesson. It's not my job to "manage" someone else's expectations.
It's their job to manage their own expectations. It's my job to do my best and to
communicate clearly."
</p>
        <p>
One of the things I learned about myself is that I hate being late. This isn't a great
trait to have in the world of software development. When I'm handed a deadline I become
so eager to meet it that in the process of racing to the deadline quality is compromised.
I can't control deadlines or others expectations but I can control my own behavior
and if I work consistently as hard as I can without letting go of quality.
</p>
        <p>
"I chose practices for XP because they meet both business and personal needs.
There are other human needs; such as rest, exercise, and socialization; that don't
need to be met in the work environment. Time away from the team gives each individual
more energy and perspective to bring back to the team. Limiting work hours allows
time for these other human needs and enhances each person's contributions while he
is with the team."
</p>
        <p>
It sucks how XP and Agile have become buzzwords in the industry that mean more to
the marketing department then to the software developers. I've said it before and
I'll say it again...
</p>
        <blockquote>
          <p>
"You aren't doing Agile. YOU ARE AGILE!"
</p>
        </blockquote>
        <p>
"Part of the challenge of team software development is balancing the needs of
the individual with the needs of the team. The team's needs may meet your own long-term
individual goals, so are worth some amount of sacrifice. Always sacrificing your own
needs for the team's doesn't work. If I need privacy, I am responsible for find a
ways to get my need met in a way that doesn't hurt the team. The magic of great teams
is that after the team members develop trust they find that they are free to be <em>more</em> themselves
as a result of their work together."
</p>
        <p>
You've got to sacrifice something, regardless of context you're talking about, in
order to succeed. What's important is deciding on what you're willing to sacrifice
in order to get closer to your end goals. I have found that pushing the people outside
of their comfort zone a little bit not only helped me in growing but also the team
as a whole. I also learned that it's important to slow down and reflect. The up and
down rhythm of an XP team is balanced by the different members of a team, and with
trust it's much easier to maintain that balance. 
</p>
        <p>
E.G. Team member A might be a hardcore, heads down, must punch out code as efficiently
as possible. Team member B may be more of a let's take it a little slower and sit
back and think about the problem at hand kind of guy. With trust the two team members
will be able to develop a rhythm that keeps the project going at a sustainable pace
without sacrificing quality.
</p>
        <p>
"I trust two metrics to measure the health of XP teams. The first is the number
of defects found after development. An XP team should have dramatically fewer defects
in its first deployment and make rapid progress from there. Some XP teams that have
been on the path of improvement for several years see only a handful of defects per
year. No defect is acceptable; each is an opportunity for the team to learn and improve."
</p>
        <p>
Test-driven development/design rather then design in your head driven code. The test
is a clear statement of truth. It documents the design that would otherwise be locked
up in your head and is very black of white about whether or not the subject under
test satisfies the test specification or behavior that is expected. If the team is
not disciplined even the best of the best XP teams can forget about the principals
behind the practices, and stop following the practices. One of the most important
things about unit tests is the early feedback. I want to know as soon as possible
when a component in the system is not behaving as expected. By waiting for QA to pick
out bugs, then log a bug, then assign a developer to look at the bug does not deliver
early feedback, I consider this waste! It's a vicious cycle that can be reduced greatly.
</p>
        <p>
"The problem with reviews is that most reviews and raises are based on individual
goals and achievements, but XP focuses on team performance. If a programmer spends
half of his time pairing with others, how can you evaluate his individual performance?
How much incentive does he have to help others if he will be evaluated on individual
performance?"
</p>
        <p>
Out of all the chapters in this book I think chapter 3 is my favorite. It's titled
"Values, Principles, and Practices", and to me it speaks the loudest of
what is XP and why would we want to consider using it as a methodology for building
and delivering software.
</p>
        <p>
I highly recommend this book!
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=1c2e3c8c-5c3e-47bd-aaba-9ef398991acf" />
      </body>
      <title>XP What?</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,1c2e3c8c-5c3e-47bd-aaba-9ef398991acf.aspx</guid>
      <link>http://mokhan.ca/blog/2008/02/01/XP+What.aspx</link>
      <pubDate>Fri, 01 Feb 2008 23:01:41 GMT</pubDate>
      <description>&lt;p&gt;
One of the books I've read this month is....
&lt;/p&gt;
&lt;p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/118wBG9VziL.jpg" border="1" /&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;b&gt;Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)&lt;/b&gt; 
&lt;br /&gt;
by Kent Beck, Cynthia Andres 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321278658%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321278658%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read
more about this title...&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
I really enjoyed reading this book. It paints a picture of what an ideal XP team can
look like and talks about the principals, practices and values of XP. I'd like to
share some excerpts from the book that really stuck out and hand an impact on me.
&lt;/p&gt;
&lt;p&gt;
&amp;quot;If you have six weeks to get a project done, the only thing you can control
is your own behavior. Will you get six weeks' worth of work done or less? you can't
control others' expectations. You can tell them what you know about the project so
their expectations have a chance of matching reality. My terror of deadlines vanished
when I learned this lesson. It's not my job to &amp;quot;manage&amp;quot; someone else's expectations.
It's their job to manage their own expectations. It's my job to do my best and to
communicate clearly.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
One of the things I learned about myself is that I hate being late. This isn't a great
trait to have in the world of software development. When I'm handed a deadline I become
so eager to meet it that in the process of racing to the deadline quality is compromised.
I can't control deadlines or others expectations but I can control my own behavior
and if I work consistently as hard as I can without letting go of quality.
&lt;/p&gt;
&lt;p&gt;
&amp;quot;I chose practices for XP because they meet both business and personal needs.
There are other human needs; such as rest, exercise, and socialization; that don't
need to be met in the work environment. Time away from the team gives each individual
more energy and perspective to bring back to the team. Limiting work hours allows
time for these other human needs and enhances each person's contributions while he
is with the team.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
It sucks how XP and Agile have become buzzwords in the industry that mean more to
the marketing department then to the software developers. I've said it before and
I'll say it again...
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;quot;You aren't doing Agile. YOU ARE AGILE!&amp;quot;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;quot;Part of the challenge of team software development is balancing the needs of
the individual with the needs of the team. The team's needs may meet your own long-term
individual goals, so are worth some amount of sacrifice. Always sacrificing your own
needs for the team's doesn't work. If I need privacy, I am responsible for find a
ways to get my need met in a way that doesn't hurt the team. The magic of great teams
is that after the team members develop trust they find that they are free to be &lt;em&gt;more&lt;/em&gt; themselves
as a result of their work together.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
You've got to sacrifice something, regardless of context you're talking about, in
order to succeed. What's important is deciding on what you're willing to sacrifice
in order to get closer to your end goals. I have found that pushing the people outside
of their comfort zone a little bit not only helped me in growing but also the team
as a whole. I also learned that it's important to slow down and reflect. The up and
down rhythm of an XP team is balanced by the different members of a team, and with
trust it's much easier to maintain that balance. 
&lt;/p&gt;
&lt;p&gt;
E.G. Team member A might be a hardcore, heads down, must punch out code as efficiently
as possible. Team member B may be more of a let's take it a little slower and sit
back and think about the problem at hand kind of guy. With trust the two team members
will be able to develop a rhythm that keeps the project going at a sustainable pace
without sacrificing quality.
&lt;/p&gt;
&lt;p&gt;
&amp;quot;I trust two metrics to measure the health of XP teams. The first is the number
of defects found after development. An XP team should have dramatically fewer defects
in its first deployment and make rapid progress from there. Some XP teams that have
been on the path of improvement for several years see only a handful of defects per
year. No defect is acceptable; each is an opportunity for the team to learn and improve.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Test-driven development/design rather then design in your head driven code. The test
is a clear statement of truth. It documents the design that would otherwise be locked
up in your head and is very black of white about whether or not the subject under
test satisfies the test specification or behavior that is expected. If the team is
not disciplined even the best of the best XP teams can forget about the principals
behind the practices, and stop following the practices. One of the most important
things about unit tests is the early feedback. I want to know as soon as possible
when a component in the system is not behaving as expected. By waiting for QA to pick
out bugs, then log a bug, then assign a developer to look at the bug does not deliver
early feedback, I consider this waste! It's a vicious cycle that can be reduced greatly.
&lt;/p&gt;
&lt;p&gt;
&amp;quot;The problem with reviews is that most reviews and raises are based on individual
goals and achievements, but XP focuses on team performance. If a programmer spends
half of his time pairing with others, how can you evaluate his individual performance?
How much incentive does he have to help others if he will be evaluated on individual
performance?&amp;quot;
&lt;/p&gt;
&lt;p&gt;
Out of all the chapters in this book I think chapter 3 is my favorite. It's titled
&amp;quot;Values, Principles, and Practices&amp;quot;, and to me it speaks the loudest of
what is XP and why would we want to consider using it as a methodology for building
and delivering software.
&lt;/p&gt;
&lt;p&gt;
I highly recommend this book!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=1c2e3c8c-5c3e-47bd-aaba-9ef398991acf" /&gt;</description>
      <category>Agile</category>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=9c82a835-5d78-482d-9ce8-c07709c67f98</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,9c82a835-5d78-482d-9ce8-c07709c67f98.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ok so I have to admit that yesterdays entry cleverly titled <a href="http://mokhan.ca/blog/2007/12/19/Software+Sucks.aspx">"Software
Sucks"</a> was a little impulsive and over the top. <strong>Software does not
suck!</strong></p>
        <p>
I suppose I over reacted a little bit, but I think the reason I was so upset is because
I want people to have positive experiences when working with software that I hand
craft for them. 
</p>
        <p>
At Subway I love their concept of "Sandwich Artists" where they craft the
sandwich right in front of you. You're there for every step of the process, minus
the baking of the bread and prepping of the toppings etc etc...
</p>
        <p>
What if software were built in a similar fashion? Do you follow where I'm going..
what if the end user was there for every step of development so that they get the
software that they want. Now in an ideal world that would probably amount to bloated
budgets and the never complete software. But what if we could get the end user to
prioritize and pick the things that are most important to them and guide us as we
build the software for them.
</p>
        <p>
          <a href="http://mokhan.ca/blog/2007/05/28/Responding+To+Change.aspx">You are not doing
Agile, you are Agile!</a>
        </p>
        <p>
I was a part of an interesting conversation today with <a href="http://weblogs.asp.net/sfeldman/">Sean</a> and <a href="http://blog.streamlinelogic.ca/">Adam</a> where <a href="http://weblogs.asp.net/sfeldman/">Sean</a> brought
up a great point. (Pardon me <a href="http://weblogs.asp.net/sfeldman/">Sean</a> if
I paraphrase incorrectly!) In the eyes most companies, a software project was successful
if it was on time and on budget. Until you can prove to the company how the inefficiencies
in software are actually costing them money, you probably wont be heard.
</p>
        <p>
So how does one go about creating change, well start with the all mighty dollar! Perhaps
one tactic for introducing Agility into an environment is to discuss how it can save
you money. I'm not a big fan of graphs and excel sheets and charts, but I've found
that it's usually a good way to communicate with people who have money or are responsible
for spending money.
</p>
        <p>
So hit 'em up with a little <a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/09/20/agile-vs-traditional-development-cost-models-maybe.aspx">"Agile
vs. Traditional Cost Models"</a> talk. <a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/09/20/agile-vs-traditional-development-cost-models-maybe.aspx">Mr.
Joe Ocampo says it best</a> with:
</p>
        <blockquote>
          <p>
"The quicker you are able to stabilize a production release the more you will
increase the value stream for the business." - Joe Ocampo
</p>
        </blockquote>
        <p>
          <a href="http://weblogs.asp.net/sfeldman/archive/2007/12/20/generating-changes.aspx">Sean
offers his thoughts on how to introduce change</a> in your shop and why it's necessary.
It's definitely worth a <a href="http://weblogs.asp.net/sfeldman/archive/2007/12/20/generating-changes.aspx">read</a>.
</p>
        <p>
With that said... my love of software development continues!
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=9c82a835-5d78-482d-9ce8-c07709c67f98" />
      </body>
      <title>Software Does Not Suck</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,9c82a835-5d78-482d-9ce8-c07709c67f98.aspx</guid>
      <link>http://mokhan.ca/blog/2007/12/20/Software+Does+Not+Suck.aspx</link>
      <pubDate>Thu, 20 Dec 2007 23:29:11 GMT</pubDate>
      <description>&lt;p&gt;
Ok so I have to admit that yesterdays entry cleverly titled &lt;a href="http://mokhan.ca/blog/2007/12/19/Software+Sucks.aspx"&gt;&amp;quot;Software
Sucks&amp;quot;&lt;/a&gt; was a little impulsive and over the top. &lt;strong&gt;Software does not
suck!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I suppose I over reacted a little bit, but I think the reason I was so upset is because
I want people to have positive experiences when working with software that I hand
craft for them. 
&lt;/p&gt;
&lt;p&gt;
At Subway I love their concept of &amp;quot;Sandwich Artists&amp;quot; where they craft the
sandwich right in front of you. You're there for every step of the process, minus
the baking of the bread and prepping of the toppings etc etc...
&lt;/p&gt;
&lt;p&gt;
What if software were built in a similar fashion? Do you follow where I'm going..
what if the end user was there for every step of development so that they get the
software that they want. Now in an ideal world that would probably amount to bloated
budgets and the never complete software. But what if we could get the end user to
prioritize and pick the things that are most important to them and guide us as we
build the software for them.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mokhan.ca/blog/2007/05/28/Responding+To+Change.aspx"&gt;You are not doing
Agile, you are Agile!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I was a part of an interesting conversation today with &lt;a href="http://weblogs.asp.net/sfeldman/"&gt;Sean&lt;/a&gt; and &lt;a href="http://blog.streamlinelogic.ca/"&gt;Adam&lt;/a&gt; where &lt;a href="http://weblogs.asp.net/sfeldman/"&gt;Sean&lt;/a&gt; brought
up a great point. (Pardon me &lt;a href="http://weblogs.asp.net/sfeldman/"&gt;Sean&lt;/a&gt; if
I paraphrase incorrectly!) In the eyes most companies, a software project was successful
if it was on time and on budget. Until you can prove to the company how the inefficiencies
in software are actually costing them money, you probably wont be heard.
&lt;/p&gt;
&lt;p&gt;
So how does one go about creating change, well start with the all mighty dollar! Perhaps
one tactic for introducing Agility into an environment is to discuss how it can save
you money. I'm not a big fan of graphs and excel sheets and charts, but I've found
that it's usually a good way to communicate with people who have money or are responsible
for spending money.
&lt;/p&gt;
&lt;p&gt;
So hit 'em up with a little &lt;a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/09/20/agile-vs-traditional-development-cost-models-maybe.aspx"&gt;&amp;quot;Agile
vs. Traditional Cost Models&amp;quot;&lt;/a&gt; talk. &lt;a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/09/20/agile-vs-traditional-development-cost-models-maybe.aspx"&gt;Mr.
Joe Ocampo says it best&lt;/a&gt; with:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;quot;The quicker you are able to stabilize a production release the more you will
increase the value stream for the business.&amp;quot; - Joe Ocampo
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;a href="http://weblogs.asp.net/sfeldman/archive/2007/12/20/generating-changes.aspx"&gt;Sean
offers his thoughts on how to introduce change&lt;/a&gt; in your shop and why it's necessary.
It's definitely worth a &lt;a href="http://weblogs.asp.net/sfeldman/archive/2007/12/20/generating-changes.aspx"&gt;read&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
With that said... my love of software development continues!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=9c82a835-5d78-482d-9ce8-c07709c67f98" /&gt;</description>
      <category>Agile</category>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=93f97f1e-fbb0-4de6-94fd-63a878e0d6ee</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,93f97f1e-fbb0-4de6-94fd-63a878e0d6ee.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Very few things bring people closer together then dealing with adversity together.
It's easy to enjoy good times with others, but people come together when they deal
with tough times together.
</p>
        <p>
You never truly get to know someone until you see all sides of them. You've got to
see them sad, mad and glad. You've got to get unfiltered, and raw emotion from them
to truly understand them.
</p>
        <p>
Pairing is a lot like this, when you put 2 software developers together to solve a
problem. It brings them closer together when they solve the problem, <strong>together</strong>.
You get to know all sides of the person quite quickly, from how the deal with stress,
to how they deal with differences of opinion, to the pleasure of winning small battles.
</p>
        <p>
There's always a bit of anxiety at first when you put 2 developers together who have
little knowledge of one another. It's seems like they're sizing each other up for
a fight. ("I can take 'em"!) That's really not how it is, or should be.
If you're both focused on the problem at hand, and spend less time worrying about
whether your skill sets are up to par, you free yourself to truly enjoy the benefits
of 2 minds coming together to put out true value.
</p>
        <p>
One of the things I think I do without actually realizing it is, <strong>I announce
what I perceive the others persons feeling as my own</strong>. When you hear someone
say that they feel the say way as you, you tend to feel a little more comfortable
with them, and some defenses drop. 
</p>
        <p>
When you're pairing with someone, you're completely focused. You don't want to waste
the other persons time. The other person surely isn't going to sit idly while you
IM back and forth with someone, at least I hope not. 
</p>
        <p>
Finding a good pair can be hard, if you don't find one that is close to you in skill
and experience it can become more like mentoring. But even a few sessions of mentoring
and you can quickly level the skill set of the team. More seasoned developers shouldn't
feel like they have to slow down so that the rest of the team can keep up. With constant
pairing everyone comes up to speed much faster then doing it alone.
</p>
        <p>
I'm definitely no seasoned veteran when it comes to pairing, but in the last little
while at our studio we've gone head first into pairing and I'm really enjoying it.
It's so exciting, and it really feels like we're putting out more, much faster and
the quality bar feels higher.
</p>
        <p>
For a more experienced take on pairing check out Wendy's post on <a href="http://wundasworld.blogspot.com/2007/11/joy-of-pair-programming.html">The
Joy of Pair Programming.</a></p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=93f97f1e-fbb0-4de6-94fd-63a878e0d6ee" />
      </body>
      <title>Pairing: Small Encouraging Wins</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,93f97f1e-fbb0-4de6-94fd-63a878e0d6ee.aspx</guid>
      <link>http://mokhan.ca/blog/2007/11/24/Pairing+Small+Encouraging+Wins.aspx</link>
      <pubDate>Sat, 24 Nov 2007 17:52:12 GMT</pubDate>
      <description>&lt;p&gt;
Very few things bring people closer together then dealing with adversity together.
It's easy to enjoy good times with others, but people come together when they deal
with tough times together.
&lt;/p&gt;
&lt;p&gt;
You never truly get to know someone until you see all sides of them. You've got to
see them sad, mad and glad. You've got to get unfiltered, and raw emotion from them
to truly understand them.
&lt;/p&gt;
&lt;p&gt;
Pairing is a lot like this, when you put 2 software developers together to solve a
problem. It brings them closer together when they solve the problem, &lt;strong&gt;together&lt;/strong&gt;.
You get to know all sides of the person quite quickly, from how the deal with stress,
to how they deal with differences of opinion, to the pleasure of winning small battles.
&lt;/p&gt;
&lt;p&gt;
There's always a bit of anxiety at first when you put 2 developers together who have
little knowledge of one another. It's seems like they're sizing each other up for
a fight. (&amp;quot;I can take 'em&amp;quot;!) That's really not how it is, or should be.
If you're both focused on the problem at hand, and spend less time worrying about
whether your skill sets are up to par, you free yourself to truly enjoy the benefits
of 2 minds coming together to put out true value.
&lt;/p&gt;
&lt;p&gt;
One of the things I think I do without actually realizing it is, &lt;strong&gt;I announce
what I perceive the others persons feeling as my own&lt;/strong&gt;. When you hear someone
say that they feel the say way as you, you tend to feel a little more comfortable
with them, and some defenses drop. 
&lt;/p&gt;
&lt;p&gt;
When you're pairing with someone, you're completely focused. You don't want to waste
the other persons time. The other person surely isn't going to sit idly while you
IM back and forth with someone, at least I hope not. 
&lt;/p&gt;
&lt;p&gt;
Finding a good pair can be hard, if you don't find one that is close to you in skill
and experience it can become more like mentoring. But even a few sessions of mentoring
and you can quickly level the skill set of the team. More seasoned developers shouldn't
feel like they have to slow down so that the rest of the team can keep up. With constant
pairing everyone comes up to speed much faster then doing it alone.
&lt;/p&gt;
&lt;p&gt;
I'm definitely no seasoned veteran when it comes to pairing, but in the last little
while at our studio we've gone head first into pairing and I'm really enjoying it.
It's so exciting, and it really feels like we're putting out more, much faster and
the quality bar feels higher.
&lt;/p&gt;
&lt;p&gt;
For a more experienced take on pairing check out Wendy's post on &lt;a href="http://wundasworld.blogspot.com/2007/11/joy-of-pair-programming.html"&gt;The
Joy of Pair Programming.&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=93f97f1e-fbb0-4de6-94fd-63a878e0d6ee" /&gt;</description>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=797ddad9-eeae-43be-b134-3472f6d025d9</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,797ddad9-eeae-43be-b134-3472f6d025d9.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the few things I've learned in the last few weeks is to not be so politically
correct when it comes to sifting through code. What I mean is, if you spot a piece
of code that can improved, then address it. 
</p>
        <p>
Don't hold back your comments because you're worried that the author of the code will
feel attacked or hurt. There's also constructive ways of doing this, if you're intentions
are to make someone else look bad or prove that you're a better developer then everyone
else, then you've got some character flaws that probably need addressing.
</p>
        <p>
If you spot code that smells deal with it. Explain why it smells and construct ways
to improve it. You're not helping anyone by holding back your true thoughts. The only
way you and your team is going to get better is if you constantly offer each other
feedback. 
</p>
        <p>
With constant feedback you might start to notice more more light bulbs turning on
in your teams heads. It's no use if only you can see why a certain piece of code smells,
but the rest of the team needs to see it to.
</p>
        <p>
Most developers try to put out the best possible code that they can. They want to
deliver value, so if you spot a better way that someone can do that, show them. It's
the code that sucks, not the author. 
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=797ddad9-eeae-43be-b134-3472f6d025d9" />
      </body>
      <title>The Code Sucks, Not The Author</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,797ddad9-eeae-43be-b134-3472f6d025d9.aspx</guid>
      <link>http://mokhan.ca/blog/2007/11/24/The+Code+Sucks+Not+The+Author.aspx</link>
      <pubDate>Sat, 24 Nov 2007 17:29:05 GMT</pubDate>
      <description>&lt;p&gt;
One of the few things I've learned in the last few weeks is to not be so politically
correct when it comes to sifting through code. What I mean is, if you spot a piece
of code that can improved, then address it. 
&lt;/p&gt;
&lt;p&gt;
Don't hold back your comments because you're worried that the author of the code will
feel attacked or hurt. There's also constructive ways of doing this, if you're intentions
are to make someone else look bad or prove that you're a better developer then everyone
else, then you've got some character flaws that probably need addressing.
&lt;/p&gt;
&lt;p&gt;
If you spot code that smells deal with it. Explain why it smells and construct ways
to improve it. You're not helping anyone by holding back your true thoughts. The only
way you and your team is going to get better is if you constantly offer each other
feedback. 
&lt;/p&gt;
&lt;p&gt;
With constant feedback you might start to notice more more light bulbs turning on
in your teams heads. It's no use if only you can see why a certain piece of code smells,
but the rest of the team needs to see it to.
&lt;/p&gt;
&lt;p&gt;
Most developers try to put out the best possible code that they can. They want to
deliver value, so if you spot a better way that someone can do that, show them. It's
the code that sucks, not the author. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=797ddad9-eeae-43be-b134-3472f6d025d9" /&gt;</description>
      <category>Agile</category>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=7fd68b54-72e2-4de3-888c-45228c2ff559</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,7fd68b54-72e2-4de3-888c-45228c2ff559.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
On my bus ride home yesterday, I was trying to think about what separates our office
from others and I realized it was that our office was less like an office and more
like a design studio.
</p>
        <p>
A studio celebrates discussion and creative thinking. It challenges you to think creatively
and outside the box. Your uniqueness is what makes your product a better option than
your competitors.
</p>
        <p>
I asked my wife what she pictures when she thinks of a designers studio. Here's some
of the things that she said:
</p>
        <ul>
          <li>
Open style loft 
</li>
          <li>
A New York style high rise building with lots of windows over looking a park or people
walking along the street. 
</li>
          <li>
Boards on the wall covered with peoples ideas. 
</li>
          <li>
No cubicles 
</li>
          <li>
Elevated desks, like the ones architects use that are tilted sideways and are high
enough to look outside. 
</li>
          <li>
One long table where people can come together. 
</li>
        </ul>
        <p>
My picture of a designers studio is quite similar, except I see white boards scattered
just about every where. So you can have an impromptu design session while eating lunch,
where you can literally stand up and start writing on the wall. I picture an open
work space, where people can actually see each other work. I picture constant communication
and feedback.
</p>
        <p>
When I think of an office, I picture cubicles where people spend their days isolated
at their desk. I picture a lot of emails being read and answered. I picture a lot
of phone calls being answered, and less face time with <strong>people</strong>. The
office is usually quiet, so if you want to have a discussion you've got to send a
meeting request through outlook and book a board room to communicate with others.
</p>
        <p>
Why is that when we think of where software developers work its in an office and not
in a studio. Designing software is a lot like designing art. It takes a lot of creativity
to build code bases that not only deliver clients value but also make other developers <strong>want
to contribute</strong> to the code base.
</p>
        <p>
In my opinion, if you are striving to create an Agile shop, start by trying to create
a studio environment and leave the office behind.
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=7fd68b54-72e2-4de3-888c-45228c2ff559" />
      </body>
      <title>The Office vs. The Studio</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,7fd68b54-72e2-4de3-888c-45228c2ff559.aspx</guid>
      <link>http://mokhan.ca/blog/2007/11/24/The+Office+Vs+The+Studio.aspx</link>
      <pubDate>Sat, 24 Nov 2007 17:20:24 GMT</pubDate>
      <description>&lt;p&gt;
On my bus ride home yesterday, I was trying to think about what separates our office
from others and I realized it was that our office was less like an office and more
like a design studio.
&lt;/p&gt;
&lt;p&gt;
A studio celebrates discussion and creative thinking. It challenges you to think creatively
and outside the box. Your uniqueness is what makes your product a better option than
your competitors.
&lt;/p&gt;
&lt;p&gt;
I asked my wife what she pictures when she thinks of a designers studio. Here's some
of the things that she said:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Open style loft 
&lt;/li&gt;
&lt;li&gt;
A New York style high rise building with lots of windows over looking a park or people
walking along the street. 
&lt;/li&gt;
&lt;li&gt;
Boards on the wall covered with peoples ideas. 
&lt;/li&gt;
&lt;li&gt;
No cubicles 
&lt;/li&gt;
&lt;li&gt;
Elevated desks, like the ones architects use that are tilted sideways and are high
enough to look outside. 
&lt;/li&gt;
&lt;li&gt;
One long table where people can come together. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
My picture of a designers studio is quite similar, except I see white boards scattered
just about every where. So you can have an impromptu design session while eating lunch,
where you can literally stand up and start writing on the wall. I picture an open
work space, where people can actually see each other work. I picture constant communication
and feedback.
&lt;/p&gt;
&lt;p&gt;
When I think of an office, I picture cubicles where people spend their days isolated
at their desk. I picture a lot of emails being read and answered. I picture a lot
of phone calls being answered, and less face time with &lt;strong&gt;people&lt;/strong&gt;. The
office is usually quiet, so if you want to have a discussion you've got to send a
meeting request through outlook and book a board room to communicate with others.
&lt;/p&gt;
&lt;p&gt;
Why is that when we think of where software developers work its in an office and not
in a studio. Designing software is a lot like designing art. It takes a lot of creativity
to build code bases that not only deliver clients value but also make other developers &lt;strong&gt;want
to contribute&lt;/strong&gt; to the code base.
&lt;/p&gt;
&lt;p&gt;
In my opinion, if you are striving to create an Agile shop, start by trying to create
a studio environment and leave the office behind.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=7fd68b54-72e2-4de3-888c-45228c2ff559" /&gt;</description>
      <category>Agile</category>
      <category>Software</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=d19cf00f-4f4f-4ec6-8861-215ac2a454fc</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,d19cf00f-4f4f-4ec6-8861-215ac2a454fc.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is a story about building the great wall of agility. In the last few month here
at the office we adopted this concept of the visual workspace. It's awesome! We lay
out our story cards and tasks out on the wall and as soon as you walk in the door
you're immediately reminded of what you're currently working on, how far you are from
the finish line and who else might need some help.
</p>
        <p>
          <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000274.jpg" atomicselection="true">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000274" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000274_thumb.jpg" width="240" border="0" />
          </a>
        </p>
        <p>
Our first wall, was literally a wall with sticky notes on it. In the corner of the
above picture you can see a photo of "Jim". Jim, was our image of the typical
user of this application we were working on. Anytime we had to make a design
decision we asked ourselves... "What would Jim do?" 
</p>
        <p>
          <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000279.jpg" atomicselection="true">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000279" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000279_thumb.jpg" width="240" border="0" />
          </a>
        </p>
        <p>
Our latest wall is a glossy wall that our manager picked up from Rona. It's excellent,
because it doubles as a white board. It allows us to write up impromptu design discussion
up on the board after our morning stand up.
</p>
        <p>
          <a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000276.jpg" atomicselection="true">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000276" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000276_thumb.jpg" width="240" border="0" />
          </a>
        </p>
        <p>
One of my favorite new additions, is the sprint retrospective. It's a time for a critical
look back and to hold hands and sing songs... 
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=d19cf00f-4f4f-4ec6-8861-215ac2a454fc" />
      </body>
      <title>The Visual Workspace</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,d19cf00f-4f4f-4ec6-8861-215ac2a454fc.aspx</guid>
      <link>http://mokhan.ca/blog/2007/11/16/The+Visual+Workspace.aspx</link>
      <pubDate>Fri, 16 Nov 2007 20:49:46 GMT</pubDate>
      <description>&lt;p&gt;
This is a story about building the great wall of agility. In the last few month here
at the office we adopted this concept of the visual workspace. It's awesome! We lay
out our story cards and tasks out on the wall and as soon as you walk in the door
you're immediately reminded of what you're currently working on, how far you are from
the finish line and who else might need some help.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000274.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000274" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000274_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Our first wall, was literally a wall with sticky notes on it. In the corner of the
above picture you can see a photo of "Jim". Jim, was our image&amp;nbsp;of the typical
user of this application we were working on. Anytime we had to make&amp;nbsp;a design
decision we asked ourselves... "What&amp;nbsp;would Jim do?"&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000279.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000279" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000279_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Our latest wall is a glossy wall that our manager picked up from Rona. It's excellent,
because it doubles as a white board. It allows us to write up impromptu design discussion
up on the board after our morning stand up.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000276.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="P1000276" src="http://mokhan.ca/blog/content/binary/WindowsLiveWriter/TheVisualWorkspace_C0F0/P1000276_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
One of my favorite new additions, is the sprint retrospective. It's a time for a critical
look back and to hold hands and sing songs... 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=d19cf00f-4f4f-4ec6-8861-215ac2a454fc" /&gt;</description>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=ece868e3-1b62-4b4d-b3fe-9707ec2534ed</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,ece868e3-1b62-4b4d-b3fe-9707ec2534ed.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yesterday at work my manager had a group of us get together to watch a presentation
by Mary &amp; Tom Peppendieck on Lean development. It was a really good discussion
on identifying what makes company's successful and sparked a lot of conversation afterwards.
One the major takeaways from the video were the 7 principles of lean software development.
</p>
        <ol>
          <li>
Eliminate Waste 
</li>
          <li>
Build Quality In 
</li>
          <li>
Create Knowledge 
</li>
          <li>
Defer Commitment 
</li>
          <li>
Deliver Fast 
</li>
          <li>
Respect People 
</li>
          <li>
Optimize the Whole</li>
        </ol>
        <p>
Later this afternoon us dev's will be getting together to discuss what these 7 values
mean to us, and how to identify and measure them. In the meantime I thought I would
share some of my thoughts on the principles just to get my brain warmed up.
</p>
        <p>
          <strong>1. Eliminate Waste.</strong> For me there's nothing more painful then working
on something that does not need to be worked on, or building something that does not
need to be built. This point drives out the idea of focusing directly on exactly what
is necessary to accomplish the goal. Waste is produced when you create unfinished
work. (I have a lot of that, you should check out my sandbox) Or building in features
that aren't needed, and carry with it potential for introducing "bugs". 
</p>
        <p>
          <strong>2. Build Quality In.</strong> I think by developing with a test first mentality
you implicitly build quality in because you're only building the system that is required
and you're verifying that it's doing what it's supposed to do with unit tests. When
the system needs to change, the unit tests help you to verify what parts of the system
has been effected by your change. This reduces the "blind faith" attitude
of building software in hoping that it works, and instead verifies that it does what
it ought too. Verify it!
</p>
        <p>
          <strong>3. Create Knowledge.</strong> To me this goes further then just reading books.
True knowledge comes from experience, so to create an environment we need to practice
and learn. Books are a great way to start, but following through with practical application
of the reading is what makes the reading valuable. What use is it if it just sits
in your head?
</p>
        <p>
          <strong>4. Defer Commitment.</strong> When you practice Big Design Up Front, you very
rarely have all the information you need to make decisions or even estimates. Like
Mary says <strong>"The beginning is the time of maximum ignorance."</strong> We
often jump to making big decisions up front when really most of them can wait, until
we have more information. Work towards short term goals, and piece by piece you'll
eventually complete long term goals. It may turn out your long term goal ends up being
slightly different from the short term.
</p>
        <p>
          <strong>5. Deliver Fast.</strong> This isn't about hacking together code to meet deadlines.
I interpret it more as setting shorter milestones and deploying more often. Do we
need a web application, that does reporting, and registration all at once? Can it
be broken down?
</p>
        <p>
          <strong>6. Respect People.</strong> Ultimately people want to do more good then bad.
So "enable" them to do so by treating them with respect. You're not always
going to see eye to eye, nor would you want to. But if you're passionate about your
stance, speak up and say why. To respect someone you must also be willing to listen, 
</p>
        <p>
          <strong>7. Optimize the Whole.</strong> Throughout your cycles whether daily or monthly
be conscious of bottlenecks, and take the time to reflect. What's slowing you down?
What's not working well? Why? Figure out what or where the weaknesses are, then figure
out why and how it can be improved.
</p>
        <p>
As usual <a href="http://en.wikipedia.org/wiki/Lean_software_development">wikipedia
has some wisdom to share.</a></p>
        <p>
          <a href="http://en.wikipedia.org/wiki/Lean_software_development">More Info can be
found here...</a>
        </p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=ece868e3-1b62-4b4d-b3fe-9707ec2534ed" />
      </body>
      <title>The 7 Principles of Lean Development</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,ece868e3-1b62-4b4d-b3fe-9707ec2534ed.aspx</guid>
      <link>http://mokhan.ca/blog/2007/11/02/The+7+Principles+Of+Lean+Development.aspx</link>
      <pubDate>Fri, 02 Nov 2007 19:20:52 GMT</pubDate>
      <description>&lt;p&gt;
Yesterday at work my manager had a group of us get together to watch a presentation
by Mary &amp;amp; Tom Peppendieck on Lean development. It was a really good discussion
on identifying what makes company's successful and sparked a lot of conversation afterwards.
One the major takeaways from the video were the 7 principles of lean software development.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Eliminate Waste 
&lt;/li&gt;
&lt;li&gt;
Build Quality In 
&lt;/li&gt;
&lt;li&gt;
Create Knowledge 
&lt;/li&gt;
&lt;li&gt;
Defer Commitment 
&lt;/li&gt;
&lt;li&gt;
Deliver Fast 
&lt;/li&gt;
&lt;li&gt;
Respect People 
&lt;/li&gt;
&lt;li&gt;
Optimize the Whole&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Later this afternoon us dev's will be getting together to discuss what these 7 values
mean to us, and how to identify and measure them. In the meantime I thought I would
share some of my thoughts on the principles just to get my brain warmed up.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. Eliminate Waste.&lt;/strong&gt; For me there's nothing more painful then working
on something that does not need to be worked on, or building something that does not
need to be built. This point drives out the idea of focusing directly on exactly what
is necessary to accomplish the goal. Waste is produced when you create unfinished
work. (I have a lot of that, you should check out my sandbox) Or building in features
that aren't needed, and carry with it potential for introducing &amp;quot;bugs&amp;quot;. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. Build Quality In.&lt;/strong&gt; I think by developing with a test first mentality
you implicitly build quality in because you're only building the system that is required
and you're verifying that it's doing what it's supposed to do with unit tests. When
the system needs to change, the unit tests help you to verify what parts of the system
has been effected by your change. This reduces the &amp;quot;blind faith&amp;quot; attitude
of building software in hoping that it works, and instead verifies that it does what
it ought too. Verify it!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Create Knowledge.&lt;/strong&gt; To me this goes further then just reading books.
True knowledge comes from experience, so to create an environment we need to practice
and learn. Books are a great way to start, but following through with practical application
of the reading is what makes the reading valuable. What use is it if it just sits
in your head?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. Defer Commitment.&lt;/strong&gt; When you practice Big Design Up Front, you very
rarely have all the information you need to make decisions or even estimates. Like
Mary says &lt;strong&gt;&amp;quot;The beginning is the time of maximum ignorance.&amp;quot;&lt;/strong&gt; We
often jump to making big decisions up front when really most of them can wait, until
we have more information. Work towards short term goals, and piece by piece you'll
eventually complete long term goals. It may turn out your long term goal ends up being
slightly different from the short term.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Deliver Fast.&lt;/strong&gt; This isn't about hacking together code to meet deadlines.
I interpret it more as setting shorter milestones and deploying more often. Do we
need a web application, that does reporting, and registration all at once? Can it
be broken down?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6. Respect People.&lt;/strong&gt; Ultimately people want to do more good then bad.
So &amp;quot;enable&amp;quot; them to do so by treating them with respect. You're not always
going to see eye to eye, nor would you want to. But if you're passionate about your
stance, speak up and say why. To respect someone you must also be willing to listen, 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;7. Optimize the Whole.&lt;/strong&gt; Throughout your cycles whether daily or monthly
be conscious of bottlenecks, and take the time to reflect. What's slowing you down?
What's not working well? Why? Figure out what or where the weaknesses are, then figure
out why and how it can be improved.
&lt;/p&gt;
&lt;p&gt;
As usual &lt;a href="http://en.wikipedia.org/wiki/Lean_software_development"&gt;wikipedia
has some wisdom to share.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Lean_software_development"&gt;More Info can be
found here...&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=ece868e3-1b62-4b4d-b3fe-9707ec2534ed" /&gt;</description>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=8d1b9b64-a003-4e5f-8f3e-14d7ab29971f</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,8d1b9b64-a003-4e5f-8f3e-14d7ab29971f.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <table border="0" unselectable="on">
            <tbody>
              <tr>
                <td valign="top">
                  <img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1" />
                </td>
                <td valign="top">
                  <b>User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)</b>
                  <br />
by Mike Cohn<br /><br /><a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82">Read
more about this title...</a></td>
              </tr>
            </tbody>
          </table>
        </p>
        <h2>The XP Values
</h2>
        <ul>
          <li>
            <strong>Communication</strong>: Most desirable is face to face communication where
we can talk, respond, gesture and draw on a whiteboard. Talking = good, documents
= bad! 
</li>
          <li>
            <strong>Simplicity</strong>: Focus on creating a solution to the problem faced today,
not the problem anticipated tomorrow. 
</li>
          <li>
            <strong>Feedback</strong>: Developers give and get feedback from pair programming,
from automated tests, continuous integration. Customers are part of the team even
sitting in the same space with the developers, and provide feedback through constant
interaction with the team, and through acceptance tests.  
</li>
          <li>
            <strong>Courage</strong>: They have courage to refactor their code, proceed with an
overall master architecture.</li>
        </ul>
        <h2>The Principles of XP
</h2>
        <ul>
          <li>
            <strong>Rapid Feedback</strong>: Constantly sending and receiving feedback, and responding
to it. 
</li>
          <li>
            <strong>Assuming Simplicity</strong>: Favor simplicity and attempt to create a simple
solution before evolving to a complex one. 
</li>
          <li>
            <strong>Incremental Change</strong>: Improve the software through small, incremental
changes. 
</li>
          <li>
            <strong>Embracing Change</strong>: Developers are able to adapt and accommodate change. 
</li>
          <li>
            <strong>Doing Quality Work</strong>: Insist that the software consistently exhibits
the highest level of quality workmanship.</li>
        </ul>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=8d1b9b64-a003-4e5f-8f3e-14d7ab29971f" />
      </body>
      <title>The Principles and Values of XP</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,8d1b9b64-a003-4e5f-8f3e-14d7ab29971f.aspx</guid>
      <link>http://mokhan.ca/blog/2007/08/31/The+Principles+And+Values+Of+XP.aspx</link>
      <pubDate>Fri, 31 Aug 2007 12:40:47 GMT</pubDate>
      <description>&lt;p&gt;
&lt;table border="0" unselectable="on"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1"&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;b&gt;User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)&lt;/b&gt;
&lt;br&gt;
by Mike Cohn&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read
more about this title...&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h2&gt;The XP Values
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt;: Most desirable is face to face communication where
we can talk, respond, gesture and draw on a whiteboard. Talking = good, documents
= bad! 
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: Focus on creating a solution to the problem faced today,
not the problem anticipated tomorrow. 
&lt;li&gt;
&lt;strong&gt;Feedback&lt;/strong&gt;:&amp;nbsp;Developers give and get feedback from pair programming,
from automated tests, continuous integration. Customers are part of the team even
sitting in the same space with the developers, and provide feedback through constant
interaction with the team, and through acceptance tests.&amp;nbsp; 
&lt;li&gt;
&lt;strong&gt;Courage&lt;/strong&gt;: They have courage to refactor their code, proceed with an
overall master architecture.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Principles of XP
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rapid Feedback&lt;/strong&gt;: Constantly sending and receiving feedback, and responding
to it. 
&lt;li&gt;
&lt;strong&gt;Assuming Simplicity&lt;/strong&gt;: Favor simplicity and attempt to create a simple
solution before evolving to a complex one. 
&lt;li&gt;
&lt;strong&gt;Incremental Change&lt;/strong&gt;: Improve the software through small, incremental
changes. 
&lt;li&gt;
&lt;strong&gt;Embracing Change&lt;/strong&gt;: Developers are able to adapt and accommodate change. 
&lt;li&gt;
&lt;strong&gt;Doing Quality Work&lt;/strong&gt;: Insist that the software consistently exhibits
the highest level of quality workmanship.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=8d1b9b64-a003-4e5f-8f3e-14d7ab29971f" /&gt;</description>
      <category>Agile</category>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=7578e998-91fb-4698-a298-d3314f4f4a00</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,7578e998-91fb-4698-a298-d3314f4f4a00.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm still fascinated by the Agile XP methodology. So when I came across the overview
of XP in the Appendix of...
</p>
        <p>
          <table border="0" unselectable="on">
            <tbody>
              <tr>
                <td valign="top">
                  <img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1" />
                </td>
                <td valign="top">
                  <b>User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)</b>
                  <br />
by Mike Cohn<br /><br /><a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82">Read
more about this title...</a></td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
 
</p>
        <p>
I had to read on. Here's what I learned:
</p>
        <h2>Roles
</h2>
        <ul>
          <li>
The XP customer role is responsible for writing stories, prioritizing stories, and
writing and executing tests that demonstrate that stories were developed as expected. 
</li>
          <li>
The XP programmer role encompasses a broad range of technical skills. XP projects
tend not to draw distinctions between programmers, designers, DBA's and so on. 
</li>
          <li>
XP teams benefit for the use of an XP coach and possibly a project manager. The coach
is responsible for monitoring the team's use of the XP practices and gently nudging
them back on track when they stray.</li>
        </ul>
        <h2>The 12 Practices
</h2>
        <h3>Small Releases
</h3>
        <p>
Project progress in a series of iterations, which are typically 1 to 3 weeks long.
Features are fully delivered within a single iteration.
</p>
        <h3>The Planning Game
</h3>
        <ul>
          <li>
This is the name for release and iteration planning where developers and customers
collaborate to make predictions about the future. 
</li>
          <li>
Prior to planning, the customer has written user stories on note cards and developers
have estimated the cost of magnitude of each story and have written the estimate on
the story card.</li>
        </ul>
        <h3>Refactoring
</h3>
        <ul>
          <li>
Refers to the restructuring or rewriting of code so as to improve the code without
changing its external behavior. 
</li>
          <li>
XP advocates constant attention to refactoring. Whenever a programmer makes a change
to code that should be refactored, she is required to refactor it. 
</li>
          <li>
She's not <strong>encouraged</strong> to refactor it; she's <strong>required</strong> to
refactor it. 
</li>
          <li>
Instead of spending time upfront thinking through a system in advance of coding it,
and therefore taking guesses at some aspects of its behavior, XP systems are refactored
and kept in a state that perfectly meets known, implemented requirements.</li>
        </ul>
        <h3>Testing
</h3>
        <ul>
          <li>
The developers write automated unit tests. 
</li>
          <li>
The customers write acceptance tests. 
</li>
          <li>
In test-driven development, tests are written before the code. Developers follow a
short cycle of test-code-test-code... No operational code may be written except in
response to a failing test.</li>
        </ul>
        <h3>Pair Programming
</h3>
        <ul>
          <li>
Refers to 2 programmers sharing one computer and 2 brains to write code. One programmer
types the code, the second is watching the code develop and thinking more broadly
about the code. 
</li>
          <li>
This leads to lower defect counts, less code is written to solve the same problem,
problems being solved more quickly, more people understand each piece of code, an
increase in developer satisfaction. 
</li>
          <li>
It requires discipline to refactor every time you notice poorly structured code.</li>
        </ul>
        <h3>Sustainable Pace
</h3>
        <ul>
          <li>
The believe is that an XP team moving at a consistent but brisk pace will achieve
more over a period of time than will a team working at a pace they cannot sustain
over a long period of time. 
</li>
          <li>
It is up to the team to determine their sustained pace. 
</li>
          <li>
A team will typically devote around 6 hours per day to pairing and spend the remainder
of the day in other activities. 
</li>
          <li>
An XP coach is responsible for monitoring the team for burnout.</li>
        </ul>
        <h3>Team Code Ownership
</h3>
        <ul>
          <li>
It's common in non-XP teams for individuals to "own" portions of a systems code. This
leads to comments like "We can't change the billing source code until Eli gets back
from vacation." 
</li>
          <li>
All code is owned by everyone. 
</li>
          <li>
Pairs are expected to change code they didn't write. 
</li>
          <li>
A strong suite of unit tests ensures that changes do not introduce unanticipated side
effects.</li>
        </ul>
        <h3>Coding Standard
</h3>
        <ul>
          <li>
XP teams collectively own their source code, so it's important to follow a coding
standard. 
</li>
          <li>
A small, close-knit team may be able to get by without a written, formalized coding
standard.</li>
        </ul>
        <h3>Simple Design
</h3>
        <ul>
          <li>
Pursue a goal of having the simplest possible design that delivers the features a
customer needs. 
</li>
          <li>
The operational code and the test code fully convey the programmers intent. 
</li>
          <li>
There is no duplicate code. 
</li>
          <li>
The system uses the least number of classes. 
</li>
          <li>
The system uses the least number of methods.</li>
        </ul>
        <h3>Metaphor
</h3>
        <ul>
          <li>
Quest for simple design by finding a metaphor that can be used for the whole system.
The metaphor describes how they think about the system. 
</li>
          <li>
E.g. "The system is like a chalkboard and various parts of the system can write on
the chalkboard. When a user is done with the system she can either save the contents
of the chalkboard or erase them."</li>
        </ul>
        <h3>Continuous Integration
</h3>
        <ul>
          <li>
Code is integrated continuously. 
</li>
          <li>
A developer completes a small change, he checks the change into source control, where
the CI box initiates a full build. When the build is finished a full set of unit tests
are run. If any tests fail, the developer is notified by email and told about the
failure. 
</li>
          <li>
Integration problems are fixed one at a time in extremely small batches as soon as
they occur.</li>
        </ul>
        <h3>On-Site Customer
</h3>
        <ul>
          <li>
 The customer is expected to sit with and be part of the development team. The
customer writes the stories and the acceptance tests and is also available to answer
questions as they arise. 
</li>
          <li>
If the customer is not on site, delays will disrupt the predictable progress of the
XP team.</li>
        </ul>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=7578e998-91fb-4698-a298-d3314f4f4a00" />
      </body>
      <title>Learning To Become More XP</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,7578e998-91fb-4698-a298-d3314f4f4a00.aspx</guid>
      <link>http://mokhan.ca/blog/2007/08/30/Learning+To+Become+More+XP.aspx</link>
      <pubDate>Thu, 30 Aug 2007 13:04:17 GMT</pubDate>
      <description>&lt;p&gt;
I'm still fascinated by the Agile XP methodology. So when I came across the overview
of XP in the Appendix of...
&lt;/p&gt;
&lt;p&gt;
&lt;table border="0" unselectable="on"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1"&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;b&gt;User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)&lt;/b&gt;
&lt;br&gt;
by Mike Cohn&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read
more about this title...&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I had to read on. Here's what I learned:
&lt;/p&gt;
&lt;h2&gt;Roles
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
The XP customer role is responsible for writing stories, prioritizing stories, and
writing and executing tests that demonstrate that stories were developed as expected. 
&lt;li&gt;
The XP programmer role encompasses a broad range of technical skills. XP projects
tend not to draw distinctions between programmers, designers, DBA's and so on. 
&lt;li&gt;
XP teams benefit for the use of an XP coach and possibly a project manager. The coach
is responsible for monitoring the team's use of the XP practices and gently nudging
them back on track when they stray.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The 12 Practices
&lt;/h2&gt;
&lt;h3&gt;Small Releases
&lt;/h3&gt;
&lt;p&gt;
Project progress in a series of iterations, which are typically 1 to 3 weeks long.
Features are fully delivered within a single iteration.
&lt;/p&gt;
&lt;h3&gt;The Planning Game
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
This is the name for release and iteration planning where developers and customers
collaborate to make predictions about the future. 
&lt;li&gt;
Prior to planning, the customer has written user stories on note cards and developers
have estimated the cost of magnitude of each story and have written the estimate on
the story card.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Refactoring
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Refers to the restructuring or rewriting of code so as to improve the code without
changing its external behavior. 
&lt;li&gt;
XP advocates constant attention to refactoring. Whenever a programmer makes a change
to code that should be refactored, she is required to refactor it. 
&lt;li&gt;
She's not &lt;strong&gt;encouraged&lt;/strong&gt; to refactor it; she's &lt;strong&gt;required&lt;/strong&gt; to
refactor it. 
&lt;li&gt;
Instead of spending time upfront thinking through a system in advance of coding it,
and therefore taking guesses at some aspects of its behavior, XP systems are refactored
and kept in a state that perfectly meets known, implemented requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Testing
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
The developers write automated unit tests. 
&lt;li&gt;
The customers write acceptance tests. 
&lt;li&gt;
In test-driven development, tests are written before the code. Developers follow a
short cycle of test-code-test-code... No operational code may be written except in
response to a failing test.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Pair Programming
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Refers to 2 programmers sharing one computer and 2 brains to write code. One programmer
types the code, the second is watching the code develop and thinking more broadly
about the code. 
&lt;li&gt;
This leads to lower defect counts, less code is written to solve the same problem,
problems being solved more quickly, more people understand each piece of code, an
increase in developer satisfaction. 
&lt;li&gt;
It requires discipline&amp;nbsp;to refactor every time you notice poorly structured code.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Sustainable Pace
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
The believe is that an XP team moving at a consistent but brisk pace will achieve
more over a period of time than will a team working at a pace they cannot sustain
over a long period of time. 
&lt;li&gt;
It is up to the team to determine their sustained pace. 
&lt;li&gt;
A team will typically devote around 6 hours per day to pairing and spend the remainder
of the day in other activities. 
&lt;li&gt;
An XP coach is responsible for monitoring the team for burnout.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Team Code Ownership
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
It's common in non-XP teams for individuals to "own" portions of a systems code. This
leads to comments like "We can't change the billing source code until Eli gets back
from vacation." 
&lt;li&gt;
All code is owned by everyone. 
&lt;li&gt;
Pairs are expected to change code they didn't write. 
&lt;li&gt;
A strong suite of unit tests ensures that changes do not introduce unanticipated side
effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Coding Standard
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
XP teams collectively own their source code, so it's important to follow a coding
standard. 
&lt;li&gt;
A small, close-knit team may be able to get by without a written, formalized coding
standard.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Simple Design
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Pursue a goal of having the simplest possible design that delivers the features a
customer needs. 
&lt;li&gt;
The operational code and the test code fully convey the programmers intent. 
&lt;li&gt;
There is no duplicate code. 
&lt;li&gt;
The system uses the least number of classes. 
&lt;li&gt;
The system uses the least number of methods.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Metaphor
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Quest for simple design by finding a metaphor that can be used for the whole system.
The metaphor describes how they think about the system. 
&lt;li&gt;
E.g. "The system is like a chalkboard and various parts of the system can write on
the chalkboard. When a user is done with the system she can either save the contents
of the chalkboard or erase them."&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Continuous Integration
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Code is integrated continuously. 
&lt;li&gt;
A developer completes a small change, he checks the change into source control, where
the CI box initiates a full build. When the build is finished a full set of unit tests
are run. If any tests fail, the developer is notified by email and told about the
failure. 
&lt;li&gt;
Integration problems are fixed one at a time in extremely small batches as soon as
they occur.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;On-Site Customer
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&amp;nbsp;The customer is expected to sit with and be part of the development team. The
customer writes the stories and the acceptance tests and is also available to answer
questions as they arise. 
&lt;li&gt;
If the customer is not on site, delays will disrupt the predictable progress of the
XP team.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=7578e998-91fb-4698-a298-d3314f4f4a00" /&gt;</description>
      <category>Agile</category>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=94da6a3c-9775-4719-b6d0-0307a1c7f812</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,94da6a3c-9775-4719-b6d0-0307a1c7f812.aspx</pingback:target>
      <dc:creator>Mr mO!</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last night I finished reading...
</p>
        <p>
          <table border="0" unselectable="on">
            <tbody>
              <tr>
                <td valign="top">
                  <img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1" />
                </td>
                <td valign="top">
                  <b>User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)</b>
                  <br />
by Mike Cohn<br /><br /><a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82">Read
more about this title...</a></td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
It was a nice quick and dirty read, to get my feet wet in the world of applying user
stories. I really prefer working with user stories as opposed to full blown system
requirements specifications. Although, a typical SRS is much thicker then a set of
user stories, I think more information is delivered through user stories because it
done so piece by piece. As you require the information, it's your responsibility to
gather it.
</p>
        <p>
I want to share some of my favorite quotes from the book.
</p>
        <blockquote>
          <p>
"Pay attention to who is contributing during a story writing workshop. Occasionally
a participant will remain silent through much or all of the meeting. If this is the
case, talk to the participant during one of the breaks and make sure she's comfortable
with the process. Some participants are reluctant to speak up in front of their peers
or supervisors, which is why it is important that story ideas not be judged during
these sessions. Once participants become comfortable that their ideas will simply
be noted, not debated, at this point they will contribute more readily."
</p>
        </blockquote>
        <p>
I have to admit that at my first story writing workshop I didn't say much. It was
kind of a foreign concept to me and I worried about getting shot down by the other
developers if I mentioned a story idea. I felt like there was a good chance that would
occur because the rest of the team felt they had a similar vision of how the product
would look and feel before and discussion had even begun. I later realized that
they did indeed want to hear my story ideas, but it just took some time getting used
to the culture of the team.
</p>
        <blockquote>
          <p>
"When you cannot find, or get access to, a real user, avoid falling into the trap
of thinking you know your users' minds and do not need or can ignore your user proxy.
While each type of user proxy has some type of shortcoming that makes her less desirable
than a real user, most developers come with even more shortcomings for pretending
to be a real user. In general, developers do not have marketing backgrounds that allow
them to understand the relative value of features, they do not have the same amount
of customer contact as salespeople, they are not domain experts, and so on."
</p>
        </blockquote>
        <p>
I know as a developer that there are many times where I know how I would like a piece
of software to work. Because it would work well for me, but ultimately that's not
always going to work best for the end user. It's difficult to put yourselves in someone
else's shoe to try to think like they would. It's much easier to just ask, instead
of making a design decision, implementing it then later having them tell you that's
not what they wanted.
</p>
        <blockquote>
          <p>
"Ideally the customer writes the stories. On many projects the developers help out,
either by doing the actual writing during an initial story writing workshop or by
suggesting new stories to the customer. But, responsibility for writing stories resides
with the customer and cannot be passed to the developers."
</p>
        </blockquote>
        <p>
Wow... I had no idea. Right now we're writing the user stories...
</p>
        <blockquote>
          <p>
"In a blame-filled organization there are always some individuals who have learned
that their best decision is to avoid all responsibility. If you're not responsible
for something you can't be blamed for it when it fails, yet there's usually a way
to lay claim to at least some of the success. Individuals in this type of culture
will want nothing to do with hard decisions like prioritizing features into and out
of releases. They'll fall back on statements such as "It's not my problem that you
can't complete everything by the deadline, figure out a way to do it."
</p>
        </blockquote>
        <p>
This seems to happen more often then not. I think when someone because slightly hostile,
it's usually because of their own insecurities. But reading the above statement just
helped me to realize to think about what they're going through. Who's grilling them,
and how can I help so that they're are happy with the software but it also makes them
look good to their peers.
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=94da6a3c-9775-4719-b6d0-0307a1c7f812" />
      </body>
      <title>It's Story Time</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,94da6a3c-9775-4719-b6d0-0307a1c7f812.aspx</guid>
      <link>http://mokhan.ca/blog/2007/08/29/Its+Story+Time.aspx</link>
      <pubDate>Wed, 29 Aug 2007 12:35:02 GMT</pubDate>
      <description>&lt;p&gt;
Last night I finished reading...
&lt;/p&gt;
&lt;p&gt;
&lt;table border="0" unselectable="on"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;img src="http://ec1.images-amazon.com/images/I/11FNgijPZ8L.jpg" border="1"&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;b&gt;User Stories Applied: For Agile Software Development (The Addison-Wesley Signature
Series)&lt;/b&gt;
&lt;br&gt;
by Mike Cohn&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=0321205685%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321205685%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read
more about this title...&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
It was a nice quick and dirty read, to get my feet wet in the world of applying user
stories. I really prefer working with user stories as opposed to full blown system
requirements specifications. Although, a typical SRS is much thicker then a set of
user stories, I think more information is delivered through user stories because it
done so piece by piece. As you require the information, it's your responsibility to
gather it.
&lt;/p&gt;
&lt;p&gt;
I want to share some of my favorite quotes from the book.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"Pay attention to who is contributing during a story writing workshop. Occasionally
a participant will remain silent through much or all of the meeting. If this is the
case, talk to the participant during one of the breaks and make sure she's comfortable
with the process. Some participants are reluctant to speak up in front of their peers
or supervisors, which is why it is important that story ideas not be judged during
these sessions. Once participants become comfortable that their ideas will simply
be noted, not debated, at this point they will contribute more readily."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I have to admit that at my first story writing workshop I didn't say much. It was
kind of a foreign concept to me and I worried about getting shot down by the other
developers if I mentioned a story idea. I felt like there was a good chance that would
occur because the rest of the team felt they had a similar vision of how the product
would look and feel before and discussion had even begun. I later&amp;nbsp;realized that
they did indeed want to hear my story ideas, but it just took some time getting used
to the culture of the team.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"When you cannot find, or get access to, a real user, avoid falling into the trap
of thinking you know your users' minds and do not need or can ignore your user proxy.
While each type of user proxy has some type of shortcoming that makes her less desirable
than a real user, most developers come with even more shortcomings for pretending
to be a real user. In general, developers do not have marketing backgrounds that allow
them to understand the relative value of features, they do not have the same amount
of customer contact as salespeople, they are not domain experts, and so on."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I know as a developer that there are many times where I know how I would like a piece
of software to work. Because it would work well for me, but ultimately that's not
always going to work best for the end user. It's difficult to put yourselves in someone
else's shoe to try to think like they would. It's much easier to just ask, instead
of making a design decision, implementing it then later having them tell you that's
not what they wanted.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"Ideally the customer writes the stories. On many projects the developers help out,
either by doing the actual writing during an initial story writing workshop or by
suggesting new stories to the customer. But, responsibility for writing stories resides
with the customer and cannot be passed to the developers."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Wow... I had no idea. Right now we're writing the user stories...
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"In a blame-filled organization there are always some individuals who have learned
that their best decision is to avoid all responsibility. If you're not responsible
for something you can't be blamed for it when it fails, yet there's usually a way
to lay claim to at least some of the success. Individuals in this type of culture
will want nothing to do with hard decisions like prioritizing features into and out
of releases. They'll fall back on statements such as "It's not my problem that you
can't complete everything by the deadline, figure out a way to do it."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This seems to happen more often then not. I think when someone because slightly hostile,
it's usually because of their own insecurities. But reading the above statement just
helped me to realize to think about what they're going through. Who's grilling them,
and how can I help so that they're are happy with the software but it also makes them
look good to their peers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=94da6a3c-9775-4719-b6d0-0307a1c7f812" /&gt;</description>
      <category>Agile</category>
      <category>Books</category>
    </item>
    <item>
      <trackback:ping>http://mokhan.ca/blog/Trackback.aspx?guid=26871492-902e-4b51-9675-c34f24bf6d88</trackback:ping>
      <pingback:server>http://mokhan.ca/blog/pingback.aspx</pingback:server>
      <pingback:target>http://mokhan.ca/blog/PermaLink,guid,26871492-902e-4b51-9675-c34f24bf6d88.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <blockquote>
          <p align="center">
            <strong>The Agile Manifesto</strong>
          </p>
          <p>
            <font size="4">Individuals and interactions</font>... over processes and tools.
</p>
          <p>
            <font size="4">Working software</font>... over comprehensive documentation.
</p>
          <p>
            <font size="4">Customer collaboration</font>... over contract negotiation.
</p>
          <p>
            <font size="4">Responding to change</font>... over following a plan.
</p>
        </blockquote>
        <p>
I'm reading a book called. 
</p>
        <p>
          <table border="0">
            <tbody>
              <tr>
                <td valign="top">
                  <img src="http://ec1.images-amazon.com/images/I/113XE3EB49L.jpg" border="1" />
                </td>
                <td valign="top">
                  <b>Agile and Iterative Development: A Manager's Guide</b>
                  <br />
by Craig Larman<br /><br /><a href="http://www.amazon.com/gp/redirect.html%3FASIN=0131111558%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0131111558%253FSubscriptionId=0525E2PQ81DD7ZTWTK82">Read
more about this title...</a></td>
              </tr>
            </tbody>
          </table>
        </p>
        <p>
I kept hearing this buzz word, I'm sure you've heard it. "Agile"! What does it really
mean? If you scour Monster or Workopolis and search for .NET development jobs, just
about everyone is asking for some sort of experience working with an Agile methodology.
So what does this really mean to be Agile? The first thing that I have learned is
this simple rule...
</p>
        <blockquote>
          <p>
            <strong>
              <font size="5">"You are not doing Agile, You are AGILE!"</font>
            </strong>
          </p>
        </blockquote>
        <p>
 
</p>
        <p>
I did a quick <a href="http://www.google.ca/search?hl=en&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;hs=t0j&amp;q=define%3Aagile&amp;btnG=Search&amp;meta=">"define:agile"</a> in
Google and came across this definition:
</p>
        <blockquote>
          <p>
"moving quickly and lightly;"
</p>
        </blockquote>
        <p>
So what does this mean? Well... that I couldn't find a good definition on Google.
What I'm learning is that there are many different processes that you can follow that
are under this umbrella call the "Agile Methodology". Some of the most popular ones
are "Scrum" and "XP".
</p>
        <p>
Scrum:
</p>
        <blockquote>
          <p>
"Scrum's distinctive emphasis among the methods is its strong promotion of self-organizing
teams, daily team measurement, and avoidance of following predefined steps. Some key
practices include a daily stand-up meeting (the Scrum meeting) with special questions,
30-day calendar iterations, and a demo to external stakeholders at the end of each
iteration." - Agile and Iterative Development: A Manager's Guide
</p>
        </blockquote>
        <p>
I think a lot of company's take some of the processes they like and mash them up together.
I think stand-up meetings would work better, but I have never experienced one. (Try
and convince a group of developers that you should stand up for the meeting, instead
of sit like they have been... oh boy! ) I think that people tend to get comfortable
in their seats and get off topic and a short meeting turns into a un productive time.
Now if that happens every day, I wonder how much time is actually lost in a year. 
</p>
        <p>
XP:
</p>
        <blockquote>
          <p>
"XP is probably the most well known agile method; it emphasizes collaboration, quick
and early software creation, and skillful development practices. It is founded on
four values: communication, simplicity, feedback, and courage. It includes 12 core
practices, including the whole team working together in a common room, pair programming,
constant refactoring, and test-driven development." - Agile and Iterative Development:
A Manager's Guide
</p>
        </blockquote>
        <p>
I instantly became a fan of the "XP" methodology after reading the above statement.
I have begun to start trying to develop in a test-driven style and cannot turn back
now. The ability to refactor, refactor and refactor without breaking changes and feel
confident in my changes makes me a happy, productive programmer. When you win X number
of little battles every day with test driven, or just state driven testing it makes
you feel good every night that you go home. You can say... yes the code I've written
is working, and working pretty darn well. So what if it's only a small component of
the big picture.
</p>
        <p>
So far this is my take on Agile... I have more to read, and learn. 
</p>
        <img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=26871492-902e-4b51-9675-c34f24bf6d88" />
      </body>
      <title>Responding to change</title>
      <guid isPermaLink="false">http://mokhan.ca/blog/PermaLink,guid,26871492-902e-4b51-9675-c34f24bf6d88.aspx</guid>
      <link>http://mokhan.ca/blog/2007/05/28/Responding+To+Change.aspx</link>
      <pubDate>Mon, 28 May 2007 18:59:58 GMT</pubDate>
      <description>&lt;blockquote&gt; 
&lt;p align="center"&gt;
&lt;strong&gt;The Agile Manifesto&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="4"&gt;Individuals and interactions&lt;/font&gt;... over processes and tools.
&lt;/p&gt;
&lt;p&gt;
&lt;font size="4"&gt;Working software&lt;/font&gt;... over comprehensive documentation.
&lt;/p&gt;
&lt;p&gt;
&lt;font size="4"&gt;Customer collaboration&lt;/font&gt;... over contract negotiation.
&lt;/p&gt;
&lt;p&gt;
&lt;font size="4"&gt;Responding to change&lt;/font&gt;... over following a plan.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I'm reading a book called. 
&lt;/p&gt;
&lt;p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;img src="http://ec1.images-amazon.com/images/I/113XE3EB49L.jpg" border="1"&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;b&gt;Agile and Iterative Development: A Manager's Guide&lt;/b&gt;
&lt;br&gt;
by Craig Larman&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.amazon.com/gp/redirect.html%3FASIN=0131111558%26tag=ws%26lcode=sp1%26cID=2025%26ccmID=165953%26location=/o/ASIN/0131111558%253FSubscriptionId=0525E2PQ81DD7ZTWTK82"&gt;Read
more about this title...&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
I kept hearing this buzz word, I'm sure you've heard it. "Agile"! What does it really
mean? If you scour Monster or Workopolis and search for .NET development jobs, just
about everyone is asking for some sort of experience working with an Agile methodology.
So what does this really mean to be Agile? The first thing that I have learned is
this simple rule...
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;font size="5"&gt;"You are not doing Agile, You are AGILE!"&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I did a quick &lt;a href="http://www.google.ca/search?hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;hs=t0j&amp;amp;q=define%3Aagile&amp;amp;btnG=Search&amp;amp;meta="&gt;"define:agile"&lt;/a&gt; in
Google and came across this definition:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"moving quickly and lightly;"
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So what does this mean? Well... that I couldn't find a good definition on Google.
What I'm learning is that there are many different processes that you can follow that
are under this umbrella call the "Agile Methodology". Some of the most popular ones
are "Scrum" and "XP".
&lt;/p&gt;
&lt;p&gt;
Scrum:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"Scrum's distinctive emphasis among the methods is its strong promotion of self-organizing
teams, daily team measurement, and avoidance of following predefined steps. Some key
practices include a daily stand-up meeting (the Scrum meeting) with special questions,
30-day calendar iterations, and a demo to external stakeholders at the end of each
iteration." - Agile and Iterative Development: A Manager's Guide
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I think a lot of company's take some of the processes they like and mash them up together.
I think stand-up meetings would work better, but I have never experienced one. (Try
and convince a group of developers that you should stand up for the meeting, instead
of sit like they have been... oh boy! ) I think that people tend to get comfortable
in their seats and get off topic and a short meeting turns into a un productive time.
Now if that happens every day, I wonder how much time is actually lost in a year. 
&lt;/p&gt;
&lt;p&gt;
XP:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
"XP is probably the most well known agile method; it emphasizes collaboration, quick
and early software creation, and skillful development practices. It is founded on
four values: communication, simplicity, feedback, and courage. It includes 12 core
practices, including the whole team working together in a common room, pair programming,
constant refactoring, and test-driven development." - Agile and Iterative Development:
A Manager's Guide
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I instantly became a fan of the "XP" methodology after reading the above statement.
I have begun to start trying to develop in a test-driven style and cannot turn back
now. The ability to refactor, refactor and refactor without breaking changes and feel
confident in my changes makes me a happy, productive programmer. When you win X number
of little battles every day with test driven, or just state driven testing it makes
you feel good every night that you go home. You can say... yes the code I've written
is working, and working pretty darn well. So what if it's only a small component of
the big picture.
&lt;/p&gt;
&lt;p&gt;
So far this is my take on Agile... I have more to read, and learn. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mokhan.ca/blog/aggbug.ashx?id=26871492-902e-4b51-9675-c34f24bf6d88" /&gt;</description>
      <category>Books</category>
      <category>Agile</category>
    </item>
  </channel>
</rss>