<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Shaping Software</title>
	<atom:link href="http://shapingsoftware.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shapingsoftware.com</link>
	<description>Patterns and Practices for Software Engineering.</description>
	<pubDate>Mon, 18 Aug 2008 05:56:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Extreme Programming (XP) at a Glance</title>
		<link>http://shapingsoftware.com/2008/08/18/extreme-programming-xp-at-a-glance/</link>
		<comments>http://shapingsoftware.com/2008/08/18/extreme-programming-xp-at-a-glance/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 05:56:26 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/extreme-programming-xp-at-a-glance/</guid>
		<description><![CDATA[Extreme Programming (XP) is a lightweight software development methodology based on principles of simplicity, communication, feedback, and courage.&#160;&#160; I like to be able to scan methodologies to compare approaches.&#160; To do so, I create a skeleton of the activities, artifacts, principles, and practices.&#160;&#160;&#160; Here are my notes on XP:&#160;
Activities

Coding
Testing
Listening
Designing 

Artifacts

Acceptance tests
Code
Iteration plan
Release and iteration plans
Stories
Story [...]]]></description>
			<content:encoded><![CDATA[<p>Extreme Programming (XP) is a lightweight software development methodology based on principles of simplicity, communication, feedback, and courage.&nbsp;&nbsp; I like to be able to scan methodologies to compare approaches.&nbsp; To do so, I create a skeleton of the activities, artifacts, principles, and practices.&nbsp;&nbsp;&nbsp; Here are my notes on XP:&nbsp;<br />
<h3>Activities</h3>
<ul>
<li>Coding
<li>Testing
<li>Listening
<li>Designing </li>
</ul>
<h3>Artifacts</h3>
<ul>
<li>Acceptance tests
<li>Code
<li>Iteration plan
<li>Release and iteration plans
<li>Stories
<li>Story cards
<li>Statistics about the number of tests, stories per iteration, etc.
<li>Unit tests
<li>Working code every iteration </li>
</ul>
<h3>12 Practices</h3>
<p>Here&#8217;s the 12 XP practices:</p>
<ul>
<li>Coding Standards
<li>Collective Ownership
<li>Continuous Integration
<li>On-Site Customer
<li>Pair Programming
<li>Planning Game
<li>Refactoring
<li>Short Releases
<li>Simple Design
<li>Sustainable Pace
<li>System Metaphor
<li>Test-Driven Development </li>
</ul>
<p>For a visual of the XP practices, see a picture of the <a href="http://www.xprogramming.com/images/circles.jpg" target="_blank">Practices and Main Cycles of XP</a>.<br />
<h3>5 Values (Extreme Programming Explained)</h3>
<ul>
<li>Communication
<li>Courage
<li>Feedback
<li>Respect
<li>Simplicity </li>
</ul>
<h3>Phases</h3>
<p>The following are phases of an XP project life cycle.</p>
<ul>
<li>Exploration Phase
<li>Planning Phase
<li>Iteration to Release Phase
<li>Productionizing Phase
<li>Maintenance Phase </li>
</ul>
<p>For a visual overview, see <a href="http://www.agilemodeling.com/essays/agileModelingXPLifecycle.htm" target="_blank">Agile Modeling Throughout the XP Lifecycle</a>.<br />
<h3>12 Principles (Agile Manifesto)</h3>
<p>These are the 12 Agile principles according to the&nbsp; <a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a><a href="http://agilemanifesto.org/):">:</a></p>
<ul>
<li>Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
<li>Welcome changing requirements, even late in development. Agile processes harness change for the customer&#8217;s competitive advantage.
<li>Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
<li>Business people and developers must work together daily throughout the project.
<li>Build projects around motivated individuals.&nbsp; Give them the environment and support they need, and trust them to get the job done.
<li>The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
<li>Working software is the primary measure of progress.
<li>Agile processes promote sustainable development.&nbsp;&nbsp; The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
<li>Continuous attention to technical excellence and good design enhances agility.
<li>Simplicity&#8211;the art of maximizing the amount of work not done&#8211;is essential.
<li>The best architectures, requirements, and designs emerge from self-organizing teams.
<li>At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly </li>
</ul>
<h3>4 Values (Agile Manifesto)</h3>
<p>These are the four Agile values according to the Agile Manifesto:</p>
<ul>
<li>Individuals and interactions over processes and tools
<li>Working software over comprehensive documentation
<li>Customer collaboration over contract negotiation
<li>Responding to change over following a plan </li>
</ul>
<h3>Additional Resources</h3>
<ul>
<li><a href="http://www.martinfowler.com/articles/agileOffshore.html" target="_blank">Using an Agile Software Process with Offshore Development</a> (Martin Fowler)
<li><a href="http://c2.com/cgi/wiki?ExtremeProgramming" target="_blank">Extreme Programming</a> (Ward Cunningham’s Wiki)
<li><a href="http://www.xprogramming.com/" target="_blank">XProgramming.com</a> (Ron Jeffries)
<li><a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a>
<li><a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank">Extreme Programming</a> (Wikipedia)
<li><a href="http://www.xprogramming.com/images/circles.jpg" target="_blank">Practices and Main Cycles of XP</a> (Ron Jeffries)
<li><a href="http://c2.com/cgi/wiki?ExtremeProgrammingCorePractices" target="_blank">Extreme Programming Core Practices</a> (Ward Cunningham’s Wiki) </li>
</ul>
<h3>My Related Posts</h3>
<ul>
<li><a href="http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/">MSF Agile at a Glance</a>
<li><a href="http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/">Rational Unified Process (RUP) at a Glance</a>
<li><a href="http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/">Microsoft Solution Framework (MSF) at a Glance</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/extreme-programming-xp-at-a-glance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft Solution Framework (MSF) at a Glance</title>
		<link>http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/</link>
		<comments>http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 05:47:30 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/</guid>
		<description><![CDATA[The Microsoft Solutions Framework (MSF) provides people and process guidance—the proven practices of Microsoft—to help teams and organizations become more successful in delivering business-driven technology solutions to their customers.&#160; Note that this MSF is not the same as the MSF Agile process included in VSTS.&#160; I like to be able to scan process methodologies.&#160; To [...]]]></description>
			<content:encoded><![CDATA[<p>The Microsoft Solutions Framework (MSF) provides people and process guidance—the proven practices of Microsoft—to help teams and organizations become more successful in delivering business-driven technology solutions to their customers.&nbsp; Note that this MSF is not the same as the <a href="http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/">MSF Agile</a> process included in VSTS.&nbsp; I like to be able to scan process methodologies.&nbsp; To do so, I create a skeletal view of the activities, artifacts, &#8230; etc.&nbsp;&nbsp; Here&#8217;s my notes on the Microsoft Solution Framework circa 2005, which might be a bit dated, but provide a quick lens into the main ideas:&nbsp;<br />
<h3>Artifacts</h3>
<p>Envisioning</p>
<ul>
<li>Vision/scope document. </li>
<li>Risk assessment document. </li>
<li>Project structure document. </li>
</ul>
<p>Planning</p>
<ul>
<li>Functional specification </li>
<li>Risk management plan </li>
<li>Master project plan </li>
<li>Master project schedule </li>
</ul>
<p>Developing</p>
<ul>
<li>Prototype</li>
<li>Source code </li>
<li>Executables </li>
<li>Installation scripts and configuration settings for deployment </li>
<li>Frozen functional specification </li>
<li>Performance support elements </li>
<li>Test specifications </li>
<li>Test cases </li>
</ul>
<p>Stabilizing</p>
<ul>
<li>Golden release </li>
<li>Release notes </li>
<li>Performance support elements </li>
<li>Test results and testing tools </li>
<li>Source code and executables </li>
<li>Project documents </li>
<li>Milestone review </li>
</ul>
<p>Deploying</p>
<ul>
<li>Operation and support information systems </li>
<li>Procedures and processes </li>
<li>Knowledge base, reports, logbooks </li>
<li>Documentation repository for all versions of documents, load sets, and code developed during the project </li>
<li>Project close-out report </li>
<li>Final versions of all project documents </li>
<li>Customer/user satisfaction data </li>
<li>Definition of next steps </li>
</ul>
<h3>Additional Resources</h3>
<ul>
<li><a href="http://www.microsoft.com/technet/solutionaccelerators/msf/default.mspx" target="_blank">Microsoft Solutions Framework</a> (TechNet)</li>
</ul>
<h3>My Related Posts</h3>
<ul>
<li><a href="http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/">MSF at a Glance</a></li>
<li><a href="http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/">Rational Unified Process (RUP) at a Glance</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MSF Agile at a Glance</title>
		<link>http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/</link>
		<comments>http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 05:27:39 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/</guid>
		<description><![CDATA[I like to be able to scan process methodologies so I create skeletal views that let me quickly see the key activities, artifacts, principles, and practices of a methodology.&#160; MSF for Agile Software Development is a scenario-driven, context-based, agile software development process.&#160;&#160; Here&#8217;s my notes on MSF Agile circa 2005, which might be somewhat dated, [...]]]></description>
			<content:encoded><![CDATA[<p>I like to be able to scan process methodologies so I create skeletal views that let me quickly see the key activities, artifacts, principles, and practices of a methodology.&nbsp; MSF for Agile Software Development is a scenario-driven, context-based, agile software development process.&nbsp;&nbsp; Here&#8217;s my notes on MSF Agile circa 2005, which might be somewhat dated, but at least give me a quick lens into the main ideas:<br />
<h3>Principles</h3>
<ul>
<li>Partner with customers</li>
<li>Foster open communications</li>
<li>Work toward a shared vision</li>
<li>Quality is everyone&#8217;s job every day</li>
<li>Stay agile, adapt to change</li>
<li>Make deployment a habit</li>
<li>Flow of value </li>
</ul>
<h3>Mindsets</h3>
<ul>
<li>Quality Is Defined By Customer </li>
<li>Pride of Workmanship</li>
<li>Team of Peers</li>
<li>Frequent Delivery</li>
<li>Willingness to Learn</li>
<li>Get Specific Early</li>
<li>Qualities of Service</li>
<li>Citizenship </li>
</ul>
<h3>Workstreams</h3>
<ul>
<li>Capture Project Vision </li>
<li>Create a Quality of Service Requirement </li>
<li>Create a Scenario </li>
<li>Guide Project </li>
<li>Plan an Iteration <br />Guide Iteration </li>
<li>Create a Solution Architecture </li>
<li>Build a Product </li>
<li>Fix a Bug </li>
<li>Implement a Development Task </li>
<li>Close a Bug </li>
<li>Test a Quality of Service Requirement </li>
<li>Test a Scenario </li>
<li>Release a Product </li>
</ul>
<h3>Activities By Workstream</h3>
<p>Capture Project Vision </p>
<ul>
<li>Write Vision Statement</li>
<li>Define Personas</li>
<li>Refine Personas </li>
</ul>
<p>Create a Quality of Service Requirement </p>
<ul>
<li>Brainstorm quality of Service Requirements</li>
<li>Develop Lifestyle Snapshot</li>
<li>Prioritize Quality of Service Requirements List</li>
<li>Write Quality of Service Requirements</li>
<li>Identify Security Objectives </li>
</ul>
<p>Create a Scenario </p>
<ul>
<li>Brainstorm Scenarios</li>
<li>Develop Lifestyle Snapshot</li>
<li>Prioritize Scenario List</li>
<li>Write Scenario Description</li>
<li>Storyboard a Scenario </li>
</ul>
<p>Guide Project </p>
<ul>
<li>Review Objectives</li>
<li>Assess Progress</li>
<li>Evaluate Test Metric Thresholds</li>
<li>Triage Bugs</li>
<li>Identify Risk </li>
</ul>
<p>Plan an Iteration </p>
<ul>
<li>Determine Iteration Length</li>
<li>Estimate Scenario</li>
<li>Estimate Quality of Service Requirements</li>
<li>Schedule Scenario</li>
<li>Schedule Quality of Service Requirement</li>
<li>Schedule bug Fixing Allotment</li>
<li>Divide Scenarios into Tasks</li>
<li>Divide Quality of Service Requirements into Tasks </li>
</ul>
<p>Guide Iteration </p>
<ul>
<li>Monitor Iteration</li>
<li>Mitigate a Risk</li>
<li>Conduct Retrospectives </li>
</ul>
<p>Create a Solution Architecture </p>
<ul>
<li>Partition the System</li>
<li>Determine Interfaces</li>
<li>Develop Threat Model</li>
<li>Develop Performance Model</li>
<li>Create Architectural Prototype</li>
<li>Create Infrastructure Architecture </li>
</ul>
<p>Build a Product </p>
<ul>
<li>Start a Build</li>
<li>Verify a Build</li>
<li>Fix a Build</li>
<li>Accept Build </li>
</ul>
<p>Fix a Bug </p>
<ul>
<li>Reproduce the Bug</li>
<li>Locate the Cause of a Bug</li>
<li>Reassign a Bug</li>
<li>Decide on a Bug Fix Strategy</li>
<li>Code the Fix for a Bug</li>
<li>Create or Update a Unit Test</li>
<li>Perform a Unit Test</li>
<li>Refactor Code; Review Code </li>
</ul>
<p>Implement a Development Task </p>
<ul>
<li>Cost a Development Task</li>
<li>Create or Update a Unit Test</li>
<li>Write Code for a Development Task</li>
<li>Perform Code Analysis</li>
<li>Perform a Unit Test</li>
<li>Refactor Code</li>
<li>Review Code</li>
<li>Integrate Code Changes </li>
</ul>
<p>Close a Bug </p>
<ul>
<li>Verify a Fix</li>
<li>Close the Bug </li>
</ul>
<p>Test a Quality of Service Requirement </p>
<ul>
<li>Define Test Approach</li>
<li>Write Performance Tests</li>
<li>Write Security Tests</li>
<li>Write Stress Tests</li>
<li>Write Load Tests</li>
<li>Select and Run a Test Case</li>
<li>Open a Bug</li>
<li>Conduct Exploratory Testing </li>
</ul>
<p>Test a Scenario</p>
<ul>
<li>Define Test Approach</li>
<li>Write Validation Tests</li>
<li>Select and Run a Test Case</li>
<li>Open a Bug</li>
<li>Conduct Exploratory Testing </li>
</ul>
<p>Release a Product</p>
<ul>
<li>Execute a Release Plan</li>
<li>Validate a Release</li>
<li>Create Release Notes</li>
<li>Deploy the Product </li>
</ul>
<h3>Artifacts (Work Products)</h3>
<ul>
<li>Vision Statement </li>
<li>System Architecture (See DSI and Whitehorse) </li>
<li>Test Plan (see Context-Driven Testing) </li>
<li>Personas </li>
<li>Scenarios </li>
<li>Storyboards </li>
<li>Development Tasks </li>
<li>Interface Models </li>
<li>Architectural Prototypes </li>
<li>Unit Tests </li>
<li>Classes </li>
<li>Change Sets </li>
<li>Check In Notes </li>
<li>Test Cases </li>
<li>Bug Reports </li>
</ul>
<h3>Disciplines</h3>
<ul>
<li>Requirements </li>
<li>Planning </li>
<li>Architecture </li>
<li>Development </li>
<li>Test </li>
</ul>
<h3>Who Does What</h3>
<p>Business Analyst</p>
<ul>
<li>Capture Project Vision</li>
<li>Create a Quality of Service Requirement</li>
<li>Create a Scenario </li>
</ul>
<p>Project Manager</p>
<ul>
<li>Guide Project</li>
<li>Plan an Iteration</li>
<li>Guide Iteration </li>
</ul>
<p>Architect</p>
<ul>
<li>Create a Solution Architecture </li>
</ul>
<p>Developer</p>
<ul>
<li>Build a Product</li>
<li>Fix a Bug</li>
<li>Implement a Development Task </li>
</ul>
<p>Tester</p>
<ul>
<li>Close a Bug</li>
<li>Test a Quality of Service Requirement</li>
<li>Test a Scenario </li>
</ul>
<p>Release Manager</p>
<ul>
<li>Release a Product </li>
</ul>
<h3>Cycles and Iterations</h3>
<ul>
<li>Product definition, development, and testing occur in overlapping iterations resulting in incremental completion of the project.</li>
<li>Different iterations have different focus as the project approaches release.</li>
<li>Small iterations allow you to reduce the margin of error in your estimates and provide fast feedback about the accuracy of your project plans.</li>
<li>Each iteration should result in a stable portion of the overall system. </li>
</ul>
<h3>Iterations</h3>
<p>Iteration 0</p>
<ul>
<li>Project Setup</li>
<li>Plan </li>
</ul>
<p>Iteration 1</p>
<ul>
<li>Plan</li>
<li>Develop and test</li>
<li>Feedback </li>
</ul>
<p>Repeat as needed</p>
<ul>
<li>Plan</li>
<li>Develop and test</li>
<li>Feedback </li>
</ul>
<p>Iteration N</p>
<ul>
<li>Develop and test</li>
<li>Release product </li>
</ul>
<h3>Team Model </h3>
<p>Advocacy Groups</p>
<ul>
<li>Architecture.</li>
<li>Development</li>
<li>Product Management</li>
<li>Program Management</li>
<li>Release Management</li>
<li>Test</li>
<li>User Experience</li>
</ul>
<p>Who Advocates What</p>
<ul>
<li><strong>Architecture</strong> - advocates for the System in the Large.</li>
<li><strong>Development</strong> - advocates for the Technical Solution.</li>
<li><strong>Product Management</strong> - advocates for the Customer Business.</li>
<li><strong>Program Management</strong> - advocates for Solution Delivery.</li>
<li><strong>Release Management</strong> - advocates for the smooth delivery and deployment of the solution into the appropriate infrastructure.</li>
<li><strong>Test </strong>- advocates for Solution Quality from the Customer Perspective.</li>
<li><strong>User Experience</strong> - advocates for the most effective solution in the eyes of the intended users</li>
</ul>
<h3>Team Principles</h3>
<ul>
<li><strong>Team of Peers.</strong>&nbsp; A team of peers with clear accountability, shared responsibility and open communications. Each role is accountable for a specific share of the quality of the overall solution. </li>
<li><strong>Advocacy for All Key Constituencies.</strong>&nbsp; Advocacy for all key constituencies who must be represented on a successful software project. Every perspective is represented to provide the checks and balances that prevent errors of omission and lopsided decisions. </li>
<li><strong>Stretch to Fit.</strong>&nbsp; Stretch to fit to the scale necessary for the specific project. Constituencies may be combined in small teams or further refined as teams scale for larger projects. </li>
</ul>
<h2>Governance</h2>
<p>Concerns the control of time and money relative to the flow of value:</p>
<ul>
<li>Are we doing the right thing?</li>
<li>Can we do it within time and budget?</li>
<li>Are we ready to integrate?</li>
<li>Are we ready to deploy?</li>
<li>Are we realizing the value?</li>
</ul>
<h3>Additional Resources</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Microsoft_Solutions_Framework" target="_blank">Microsoft Solutions Framework</a> (Wikipedia)</li>
</ul>
<h3>My Related Posts</h3>
<ul>
<li><a href="http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/">Rational Unified Process (RUP) at a Glance</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rational Unified Process (RUP) at a Glance</title>
		<link>http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/</link>
		<comments>http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 04:56:51 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/</guid>
		<description><![CDATA[I like to be able to scan process methodologies so that I can quickly compare approaches.&#160; I found my old notes on Rational Unified Process (RUP).&#160; I think they&#8217;re circa 2005, so they could be a bit dated:
Six Key Principles

Adapt the process 
Balance stakeholder priorities 
Collaborate across teams 
Demonstrate value iteratively 
Elevate the level of [...]]]></description>
			<content:encoded><![CDATA[<p>I like to be able to scan process methodologies so that I can quickly compare approaches.&nbsp; I found my old notes on Rational Unified Process (RUP).&nbsp; I think they&#8217;re circa 2005, so they could be a bit dated:<br />
<h3>Six Key Principles</h3>
<ul>
<li>Adapt the process </li>
<li>Balance stakeholder priorities </li>
<li>Collaborate across teams </li>
<li>Demonstrate value iteratively </li>
<li>Elevate the level of abstraction </li>
<li>Focus continuously on quality</li>
</ul>
<h3>Activities </h3>
<p>Analysis and Design</p>
<ul>
<li>Assess viability of Architectural Proof-of-Concept (Architect) </li>
<li>Architectural Analysis (Architect) </li>
<li>Identify Design Mechanisms (Architect) </li>
<li>Identify Design Elements (Architect) </li>
<li>Construct Architectural Proof-of-Concept (Architect) </li>
<li>Incorporate Existing Design Elements (Architect) </li>
<li>Describe the Run-time Architecture (Architect) </li>
<li>Describe Distribution (Architect) </li>
<li>Capsule Design (Capsule Designer) </li>
<li>Database Design (Database Designer) </li>
<li>Use-Case Analysis (Designer) </li>
<li>Use-Case Design (Designer) </li>
<li>Subsystem Design (Designer) </li>
<li>Class Design (Designer) </li>
<li>Design Testability (Designer) </li>
<li>Elements (Designer) </li>
<li>Design the User-Interface (User-Interface Designer) </li>
<li>Prototype the User Interface (User-Interface Designer) </li>
<li>Review the Architecture (Technical Reviewer) </li>
<li>Review the Design (Technical Reviewer) </li>
</ul>
<p>Implementation</p>
<ul>
<li>Structure the (Software Architect) </li>
<li>Implementation Model (Software Architect) </li>
<li>Implement Developer Test (Implementer) </li>
<li>Execute Developer Test (Implementer) </li>
<li>Analyze Runtime Behavior (Implementer) </li>
<li>Implement Design Elements (Implementer) </li>
<li>Implement Testability Elements (Implementer) </li>
<li>Develop Installation Artifacts (Implementer) </li>
<li>Plan System Integration (Integrator) </li>
<li>Plan Subsystem Integration (Integrator) </li>
<li>Integrate Subsystem (Integrator) </li>
<li>Integrate System (Integrator) </li>
<li>Review Code (Technical Reviewer) </li>
</ul>
<h3>Artifacts</h3>
<p>Analysis and Design</p>
<ul>
<li>Deployment Model </li>
<li>Software Architecture Document </li>
<li>Analysis Model </li>
<li>Design Model </li>
<li>Architectural Proof-of-Concept </li>
<li>Reference Architecture </li>
<li>Interface </li>
<li>Signal </li>
<li>Event </li>
<li>Protocol </li>
<li>Capsule </li>
<li>Testability Class </li>
<li>Design Class </li>
<li>Analysis Class </li>
<li>Use-Case Realization </li>
<li>Design Subsystem </li>
<li>Design Package </li>
<li>Navigation Map </li>
<li>User-Interface Prototype </li>
<li>Data Model </li>
<li>Test Design </li>
</ul>
<p>Implementation</p>
<ul>
<li>Implementation Element </li>
<li>Implementation Subsystem </li>
<li>Testability Element </li>
<li>Test Stub </li>
<li>Integration Build Plan </li>
<li>Build </li>
<li>Implementation Model </li>
</ul>
<h3>Phases</h3>
<ul>
<li>Inception Phase</li>
<li>Elaboration Phase</li>
<li>Construction Phase</li>
<li>Transition Phase</li>
</ul>
<h3>Disciplines</h3>
<p>Development Disciplines</p>
<ul>
<li>Business Modeling </li>
<li>Requirements </li>
<li>Analysis &amp; Design </li>
<li>Implementation </li>
<li>Test </li>
<li>Deployment </li>
</ul>
<p>Support Disciplines</p>
<ul>
<li>Configuration Management &amp; change management </li>
<li>Project management </li>
<li>Environment </li>
<li>Operations &amp; support </li>
</ul>
<p>Enterprise Disciplines</p>
<ul>
<li>Enterprise business modeling </li>
<li>Portfolio management </li>
<li>Enterprise architecture </li>
<li>Strategic reuse </li>
<li>People management </li>
<li>Enterprise administration </li>
<li>Software process improvement</li>
</ul>
<h3>Additional Resources</h3>
<ul>
<li><a href="http://en.wikipedia.org/wiki/IBM_Rational_Unified_Process" target="_blank">IBM Rational Unified Process</a> (Wikipedia)</li>
<li><a href="http://www-306.ibm.com/software/awdtools/rup/?S_TACT=105AGY59&amp;S_CMP=WIKI&amp;ca=dtl-08rupsite" target="_blank">Rational Unified Process Home</a> (IBM)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Functional Skeleton of the System as a Whole</title>
		<link>http://shapingsoftware.com/2008/08/18/a-functional-skeleton-of-the-system-as-a-whole/</link>
		<comments>http://shapingsoftware.com/2008/08/18/a-functional-skeleton-of-the-system-as-a-whole/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 01:07:41 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/a-functional-skeleton-of-the-system-as-a-whole/</guid>
		<description><![CDATA[How do you create a candidate architecture in XP?&#160; The solution is to pick a set of stories that force you to build a skeleton of the system as a whole in your first iteration.&#160; If you can&#8217;t find the stories that force you to create the architecture you need, then you either put as [...]]]></description>
			<content:encoded><![CDATA[<p>How do you create a candidate architecture in XP?&nbsp; The solution is to pick a set of stories that force you to build a skeleton of the system as a whole in your first iteration.&nbsp; If you can&#8217;t find the stories that force you to create the architecture you need, then you either put as much architecture in place as you need for now or you put the whole architecture in place on speculation.&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Kent Beck writes about building a functional skeleton of the system.</p>
<h3>System Architecture</h3>
<p>Beck writes:</p>
<blockquote><p>Architecture is just as important in XP projects as it is in any software project.&nbsp; Part of the architecture is captured by the system metaphor.&nbsp; If you have a good metaphor in place, everyone on the team can tell about how the system as a whole works.</p>
</blockquote>
<p><span id="more-124"></span></p>
<blockquote><p>&nbsp;</p>
</blockquote>
<h3>The First Iteration Must Be a Functioning Skeleton of the System as a Whole</h3>
<p>Beck writes:</p>
<blockquote><p>The next step is to see how the story turns into objects.&nbsp; The rules of the Planning Game state that the result of the first iteration must be a functioning skeleton of the system as a whole.&nbsp; But you still have to do the simplest thing that could possibly work.&nbsp; How can you reconcile these two?</p>
</blockquote>
<h3>Pick a Set of Stories that Force You to Create the Whole Architecture</h3>
<p>Beck writes:</p>
<blockquote><p>For the first iteration, pick a set of simple, basic stories that you expect will force you to create the whole architecture.&nbsp; Then narrow your horizon and implement the stories int eh simplest way that can possibly work.&nbsp; At the end of the exercise you will have your architecture.&nbsp; It may not be the architecture you expected, but then you will have learned something.</p>
</blockquote>
<h3>Put as Much Architecture as You Need or Put the Whole Architecture in Place on Speculation</h3>
<p>Beck writes:</p>
<blockquote><p>What if you can&#8217;t find a set of stories that force you to create the architecture you know, you absolutely know, you are going to need?&nbsp; Either you can put the whole architecture in place on speculation, or you can put as much architecture in place now as you need to meet your current needs, and trust that you can put more in later.&nbsp; I put in the architecture I need now and trust my ability to change it later.</p>
</blockquote>
<h3>Key Take Aways</h3>
<p>Here&#8217;s my key take aways:</p>
<ul>
<li>Have a system metaphor.</li>
<li>Pick a set of stories that force you to build a skeleton of the system as a whole.</li>
<li>If you can&#8217;t find the right stories, then either base the architecture on speculation or put as much architecture in place as you need for now.</li>
</ul>
<h3>Additional Resources</h3>
<ul>
<li><a href="http://c2.com/cgi/wiki?SystemMetaphor" target="_blank">System Metaphor</a> (C2.com)</li>
</ul>
<h3>My Related Posts</h3>
<ul>
<li><a href="http://shapingsoftware.com/2008/06/23/periodic-design-refactoring/">Periodic Design Refactoring</a></li>
<li><a href="http://shapingsoftware.com/2008/08/10/architectural-styles-patterns-and-metaphors/">Architectural Styles, Patterns, and Metaphors</a></li>
<li><a href="http://shapingsoftware.com/2008/08/10/architectural-patterns-vs-system-metaphors/">Architectural Patterns vs. System Metaphors</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/a-functional-skeleton-of-the-system-as-a-whole/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fixed Price in XP Development</title>
		<link>http://shapingsoftware.com/2008/08/18/fixed-price-in-xp-development/</link>
		<comments>http://shapingsoftware.com/2008/08/18/fixed-price-in-xp-development/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 00:40:11 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/fixed-price-in-xp-development/</guid>
		<description><![CDATA[How can you leverage XP practices in a fixed-price contract?&#160;&#160; One approach is to fix the price and the schedule, but somewhat vary the scope.&#160; You reduce risk by fixing the cost and schedule.&#160; Flexing the scope means that you can respond to the customer&#8217;s changing needs as you deliver value.&#160; You can think of [...]]]></description>
			<content:encoded><![CDATA[<p>How can you leverage XP practices in a fixed-price contract?&nbsp;&nbsp; One approach is to fix the price and the schedule, but somewhat vary the scope.&nbsp; You reduce risk by fixing the cost and schedule.&nbsp; Flexing the scope means that you can respond to the customer&#8217;s changing needs as you deliver value.&nbsp; You can think of this as the customer subscribing to your development team&#8217;s service for a period of time.&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Kent Beck writes about how to deal with fixed price contracts in XP.</p>
<h3>Fixed Price / Fixed Date / Roughly Variable Scope</h3>
<p>Beck writes:</p>
<blockquote><p>Folks seem to have the most trouble running a fixed price contract extreme.&nbsp; How can you do a fixed price / fixed date / fixed scope contract if you play the Planning Game?&nbsp; You will end up with a fixed price / fixed date / roughly variable scope contract.</p>
</blockquote>
<p><span id="more-123"></span></p>
<blockquote>
</blockquote>
<h3>The Requirements Weren&#8217;t Clear</h3>
<p>Beck writes:</p>
<blockquote><p>Every project I&#8217;ve worked on that had fixed price and scope ended with both parties saying, &#8220;The requirements weren&#8217;t clear.&#8221;&nbsp; And the typical fixed price and scope project pulls the two parties in exactly opposite directions.&nbsp; The supplier wants to do as little as possible and the customers wants to demand as much as possible.&nbsp; Within this tension, both parties want a successful project, so they back off of their primary goals, but the tension is always there.</p>
</blockquote>
<h3>Nobody Complains If They Get Something More Valuable</h3>
<p>Beck writes:</p>
<blockquote><p>Within XP, the relationship changes in a subtle but important way.&nbsp; The initial scope is a &#8220;for instance.&#8221;&nbsp; For example, for 5,000,000 deutsche marks we think we could produce the following stories in 12 months.&#8221;&nbsp; The customer has to decide if those stories would be worth 5,000,000 DM.&nbsp; If those initial stories are what the team ends up producing, great.&nbsp; Chances are that the customer will replace some of the stories with even more valuable ones.&nbsp; Nobody complains if they get something more valuable.&nbsp; Everybody complains if they get what they asked for but it isn&#8217;t what they now know that they want.</p>
</blockquote>
<h3>It&#8217;s More Like a Subscription</h3>
<p>Beck writes:</p>
<blockquote><p>Instead of fixed price / date / scope, the XP team offers something more like a subscription.&nbsp; The team will work at top speed for the customer for a certain amount of time.&nbsp; They will track the customer&#8217;s learning.&nbsp; At the beginning of every iteration the customer has a formal chance to change direction, to introduce entirely new stories.</p>
</blockquote>
<h3>Small Releases</h3>
<p>Beck writes:</p>
<blockquote><p>Another difference XP introduces is caused by small releases.&nbsp; You would never do an XP project for 18 or even 12 months without being in production.&nbsp; Once the team has signed up to do 12 month&#8217;s worth of stories, they will play the Planning Game with the customer to determine the scope of the first release.&nbsp; So a 12-month contract might put the system into production after three or four months, with monthly or bimonthly releases thereafter.&nbsp; Incremental delivery builds in the opportunity for the customer to terminate the contract if progress is slower than initially estimated, or if business conditions make the whole project nonsense, and it gives the customer natural points to change the direction of the project.</p>
</blockquote>
<h3>Key Take Aways</h3>
<p>Here&#8217;s my key take aways:</p>
<ul>
<li>Fix the schedule and price, but flex the scope.</li>
<li>Reduce risk by fixing schedule and cost.</li>
<li>Flex the scope so you can continuously deliver whatever the customer decides is more valuable as the project progresses.</li>
<li>Deliver incremental value.</li>
<li>Think of it like a subscription where the customer subscribes to your development services.</li>
</ul>
<p>In practice, I&#8217;ve found fixing the time and cost, but flexing the scope to be the most effective way to manage projects across a variety of scenarios.&nbsp; While there&#8217;s exceptions, the worst scenario I hit is fixed time and fixed scope where the assumption is you can buy your way to a faster solution.&nbsp; It reminds me of the saying, no matter how many people are involved, it still takes nine months to make a baby.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/fixed-price-in-xp-development/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Insourcing</title>
		<link>http://shapingsoftware.com/2008/08/18/insourcing/</link>
		<comments>http://shapingsoftware.com/2008/08/18/insourcing/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 00:05:05 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/18/insourcing/</guid>
		<description><![CDATA[How do you gradually shift responsibility for a system to the customer?&#160; How do you reduce the risk of a customer inheriting a system they can&#8217;t sustain?&#160; Rather than outsourcing, you can consider &#8220;insourcing.&#8221;&#160;&#160; In Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series), Kent Beck writes that insourcing is where you gradually replace [...]]]></description>
			<content:encoded><![CDATA[<p>How do you gradually shift responsibility for a system to the customer?&nbsp; How do you reduce the risk of a customer inheriting a system they can&#8217;t sustain?&nbsp; Rather than outsourcing, you can consider &#8220;insourcing.&#8221;&nbsp;&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Kent Beck writes that insourcing is where you gradually replace the members of the team with technical folks from the customer.</p>
<h3>Gradually Replace Team Members with the Customer</h3>
<p>Beck writes:</p>
<blockquote><p>The &#8220;big thump&#8221; delivery of outsourcing violates the incremental change principle.&nbsp; There is a slight twist on outsourcing that XP can deliver.&nbsp; What if you gradually replaced the members of the team with technical folks from the customer?&nbsp; I call this &#8220;insourcing.&#8221;</p>
</blockquote>
<p><span id="more-122"></span></p>
<blockquote><p>&nbsp;</p>
</blockquote>
<h3>Gradually Shift Responsibility for the System</h3>
<p>Beck writes:</p>
<blockquote><p>It has many of the advantages of outsourcing.&nbsp; For example, it lets the supplier give the customer the benefit of detailed technical knowledge.&nbsp; By gradually shifting responsibility for the system, insourcing doesn&#8217;t give the customer the risk that they will inherit a program they can&#8217;t sustain.</p>
</blockquote>
<h3>Example Insourcing Arrangement</h3>
<p>Beck writes:</p>
<blockquote><p>Let&#8217;s look at a sample insourcing arrangement provided by the supplier of&nbsp; a 10-person team.&nbsp; The contract is for 12 months.&nbsp; Initial development lasts three months, followed by deliveries once a month for 9 months.&nbsp; The customer supplies one technical person for the initial development.&nbsp; Thereafter, every other month the customer brings in one new person, and the supplier takes off one person.&nbsp; At the end of the contract, half the team are customer employees, ready to support the program and continue development, albeit at a slower pace.</p>
</blockquote>
<h3>Adjust How Much You Commit To</h3>
<p>Beck writes:</p>
<blockquote><p>XP supports insourcing by having the team constantly measure their speed.&nbsp; As team members shift around, the team as a whole is bound to go faster and slower.&nbsp; By constantly measuring achieved productivity, the team can adjust how much they commit to get done in the iteration of the Planning Game.&nbsp; As experts leave and less experienced people replace them, the team can reestimate the remaining stories.</p>
</blockquote>
<h3>Key Take Aways</h3>
<p>Here&#8217;s my key take aways:</p>
<ul>
<li>To insource, gradually swap out the development team with technical members from the customer.</li>
<li>Insourcing helps reduce the risk of a customer inheriting a system they can&#8217;t sustain.</li>
<li>Consider insourcing to reduce the risk of shifting responsibility of the system to the customer.</li>
<li>Using XP, you can adjust how much you commit to get done as you shift team members around.</li>
</ul>
<p>In patterns &amp; practices, we&#8217;ve used a process similar to &#8220;insourcing&#8221; but we called it co-development.&nbsp; The customer would provide heads and/or budget.&nbsp; in return, they would learn hands on and help shape the deliverable.</p>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/18/insourcing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Give Up Explicit Preparation for Change</title>
		<link>http://shapingsoftware.com/2008/08/17/give-up-explicit-preparation-for-change/</link>
		<comments>http://shapingsoftware.com/2008/08/17/give-up-explicit-preparation-for-change/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 23:21:11 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/17/give-up-explicit-preparation-for-change/</guid>
		<description><![CDATA[How can you be prepared to go in whatever direction the business or the system demands?&#160; Do you need to prepare for every possibility?&#160; No.&#160; Instead, you give up explicit preparation for any change.&#160; In Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series), Ken Beck writes that if you expect nothing, you can [...]]]></description>
			<content:encoded><![CDATA[<p>How can you be prepared to go in whatever direction the business or the system demands?&nbsp; Do you need to prepare for every possibility?&nbsp; No.&nbsp; Instead, you give up explicit preparation for any change.&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Ken Beck writes that if you expect nothing, you can no longer be surprised.</p>
<h3>Now You Are Ready to Learn</h3>
<p>Beck writes about a student learning to become a swordsman.&nbsp; The master strikes the student each time his attention slips.&nbsp; The student becomes paranoid about getting whacked and eventually gives up:</p>
<blockquote><p>Soon he sat down and cried in frustration.&nbsp; &#8220;I just can&#8217;t take it.&nbsp; I&#8217;m not cut out to be a swordsman.&nbsp; I&#8217;m going home.&#8221;&nbsp; At that moment, without understanding exactly why, he drew his sword and whirled, blocking the master&#8217;s stroke.&nbsp; The master said, &#8220;Now you are ready to learn.&#8221;</p>
</blockquote>
<p><span id="more-121"></span></p>
<blockquote><p>&nbsp;</p>
</blockquote>
<h3>We&#8217;re Vulnerable to the Eventualities We Can&#8217;t Imagine</h3>
<p>Beck writes:</p>
<blockquote><p>We can drive ourselves crazy with expectation.&nbsp; But by preparing for every eventuality we can think of, we leave ourselves vulnerable to the eventualities we can&#8217;t imagine.</p>
</blockquote>
<h3>Expect Nothing and You Can No Longer Be Surprised</h3>
<p>Beck writes:</p>
<blockquote><p>There is another way.&nbsp; The team can be perfectly prepared at any moment to go in whatever direction the business or the system demands.&nbsp; By giving up explicit preparation for change, paradoxically they become entirely prepared for any change.&nbsp; They expect nothing.&nbsp; They can no longer be surprised.</p>
</blockquote>
<h3>Key Take Aways</h3>
<p>I&#8217;m a fan of having a fallback position, but the point here is to be more adaptable to change over trying to anticipate every possibility.&nbsp; Here&#8217;s my key take aways:</p>
<ul>
<li>Expect nothing and you can no longer be surprised.</li>
<li>Expect the unexpected, but don&#8217;t over engineer for it.</li>
<li>Make the most of the situation.</li>
<li>Don&#8217;t spend time planning for exceptions that you could spend taking action.</li>
<li>Rather than explicit preparation for change, be adaptable and flexible in your approach.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/17/give-up-explicit-preparation-for-change/feed/</wfw:commentRss>
		</item>
		<item>
		<title>20-80 Rule and XP</title>
		<link>http://shapingsoftware.com/2008/08/17/20-80-rule-and-xp/</link>
		<comments>http://shapingsoftware.com/2008/08/17/20-80-rule-and-xp/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 22:47:24 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/17/20-80-rule-and-xp/</guid>
		<description><![CDATA[Do you need to adopt all of the Extreme Programming (XP) practices to get results?&#160; Can you adopt the XP practices piecemeal?&#160; In Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series), Kent Beck writes that you can adopt XP practices piecemeal, but the more you adopt, the more synergy you get.
The Full Value [...]]]></description>
			<content:encoded><![CDATA[<p>Do you need to adopt all of the Extreme Programming (XP) practices to get results?&nbsp; Can you adopt the XP practices piecemeal?&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Kent Beck writes that you can adopt XP practices piecemeal, but the more you adopt, the more synergy you get.</p>
<h3>The Full Value of XP Comes When All the Practices are in Place</h3>
<p>Beck writes:</p>
<blockquote><p>The full value of XP will not come until all the practices are in place.&nbsp; Many of the practices can be adopted piecemeal, but their effects will be multiplied when they are in place together.</p>
</blockquote>
<p><span id="more-120"></span></p>
<blockquote>
</blockquote>
<h3>The 20-80 Rule</h3>
<p>Beck writes:</p>
<blockquote><p>Software programmers are used to dealing with the 20-80 rule &#8212; 80% of the benefit comes from 20% of the work.&nbsp; XP makes use of this rule itself - put the most valuable 20% of functionality into production, do the most valuable 20% of the design, rely on the 20-80 rule to defer optimization.</p>
</blockquote>
<h3>The 20-80 Rule Applies Where Controls are Relatively Independent</h3>
<p>Beck writes:</p>
<blockquote><p>For the 20-80 rule to apply, the system in question must have controls that are relatively independent of each other.&nbsp; For example, when I tune the performance of a program, each possible place I could tune generally has little effect on the other places I could tune.&nbsp; I never find myself in a situation where I tune the biggest time hog, only to find that because of that tuning I can&#8217;t tune the next one.&nbsp; In a system with independent controls, some of them are bound to be more important than others.</p>
</blockquote>
<h3>Greater Than the Sum of the Parts</h3>
<p>Beck writes:</p>
<blockquote><p>The practices and the principles work together with each other to create a synergy that is greater than the sum of the parts.&nbsp; It&#8217;s not just that you do testing, it&#8217;s that you are testing a simple system, and it got simple because you had a pair programming partner who challenged you to refactor and reminded you to write more tests and patted you on the back when you got rid of complexity and &#8230;.</p>
</blockquote>
<h3>You Gain the Most When You Put All the Pieces in Place</h3>
<p>Beck writes:</p>
<blockquote><p>Is XP all or nothing?&nbsp; Do you have to follow these practices to the letter or risk not seeing any improvement?&nbsp; Not at all.&nbsp; You can get significant gains from parts of XP.&nbsp; It&#8217;s just that I believe there is much more to be gained when you put all the pieces in place.</p>
</blockquote>
<h3>Key Take Aways</h3>
<p>Here&#8217;s my key take aways:</p>
<ul>
<li>You can adopt XP piecemeal.
<li>The 20-80 Rule applies where controls are relatively independent.
<li>You gain more from XP when you put all the pieces in place.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/17/20-80-rule-and-xp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Implement It Three Different Ways</title>
		<link>http://shapingsoftware.com/2008/08/17/implement-it-three-different-ways/</link>
		<comments>http://shapingsoftware.com/2008/08/17/implement-it-three-different-ways/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 22:14:27 +0000</pubDate>
		<dc:creator>JD</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://shapingsoftware.com/2008/08/17/implement-it-three-different-ways/</guid>
		<description><![CDATA[How do you know which path to take?&#160; How do you find your glass ceilings?&#160; Unless you&#8217;ve been there and done that, you need to test your path to avoid significant do-overs.&#160; In Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series), Kent Beck writes about architectural exploration.
Architectural Exploration
Beck writes:
The programmers should also experiment [...]]]></description>
			<content:encoded><![CDATA[<p>How do you know which path to take?&nbsp; How do you find your glass ceilings?&nbsp; Unless you&#8217;ve been there and done that, you need to test your path to avoid significant do-overs.&nbsp; In <a href="http://www.amazon.com/gp/product/0321278658?ie=UTF8&amp;tag=thbosh-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321278658">Extreme Programming Explained: Embrace Change (2nd Edition) (The XP Series)</a><img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=thbosh-20&amp;l=as2&amp;o=1&amp;a=0321278658" width="1" border="0">, Kent Beck writes about architectural exploration.</p>
<h3>Architectural Exploration</h3>
<p>Beck writes:</p>
<blockquote><p>The programmers should also experiment with architectural ideas &#8212; how do you build a system for multiple levels of undo?&nbsp; Implement it three different ways for a day and see which one feels best.&nbsp; These little architectural explorations are most important when you find the user coming up with stories that you have no idea how to implement.</p>
</blockquote>
<p><span id="more-119"></span></p>
<blockquote>
</blockquote>
<h3>My Thoughts</h3>
<p>I&#8217;m a fan of testing multiple paths to find the best fit.&nbsp; I tend to call these &#8220;architectural spikes.&#8221;&nbsp; That said, before you test technical risk, make sure you first test the user experience.&nbsp; Nothing&#8217;s worse than implementing something that&#8217;s tough, only to find out nobody wants it.&nbsp;&nbsp; You can use slides or whiteboard walkthroughs to test user experience. </p>
<p>It&#8217;s also important to pick your battles.&nbsp; You won&#8217;t have time to test everything three ways, so ruthlessly prioritize your highest risks.</p>
<h3>Key Take Aways</h3>
<p>Here&#8217;s my key take aways:</p>
<ul>
<li>Implement three variations and pick the one that feels right.
<li>First nail the user experience, then nail the technical risk.
<li>Ruthlessly prioritize your highest risks.</li>
</ul>
<h3>My Related Posts</h3>
<ul>
<li><a href="http://shapingsoftware.com/2008/05/12/user-business-and-tech/">User, Business, and Tech</a>
<li><a href="http://shapingsoftware.com/2008/06/01/what-are-the-user-business-and-system-goals/">What are the User, Business, and System Goals</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://shapingsoftware.com/2008/08/17/implement-it-three-different-ways/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
