<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/1.5.2" -->
<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/"
>

<channel>
	<title>Agile Ramblings</title>
	<link>http://www.christiansepulveda.com/agileblog</link>
	<description>Thoughts  on Agile Software Development</description>
	<pubDate>Mon, 09 Apr 2007 04:08:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.2</generator>
	<language>en</language>

		<item>
		<title>Announcement: I&#8217;ve joined Pivotal Labs</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/51</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/51#comments</comments>
		<pubDate>Mon, 09 Apr 2007 04:08:29 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/51</guid>
		<description><![CDATA[	This is a long overdue announcement as I joined Pivotal Labs in 2006, after I left Nominum. But we are trying to raise our profile recently as we no longer want to be &#8220;the best kept secret in software.&#8221; (This is a quote from more than one client.)
	Anyway, check out the following links. (In particular, [...]]]></description>
			<content:encoded><![CDATA[	<p>This is a long overdue announcement as I joined Pivotal Labs in 2006, after I left Nominum. But we are trying to raise our profile recently as we no longer want to be &#8220;the best kept secret in software.&#8221; (This is a quote from more than one client.)</p>
	<p>Anyway, check out the following links. (In particular, note my personal Pivotal Labs blog as I plan to blog mostly there.)</p>
	<ul>
	<li>Pivotal Labs Website:<a href="http://www.pivotallabs.com">www.pivotallabs.com</a></li>
	<li>Official Blog: <a href="http://blog.pivotallabs.com">blog.pivotallabs.com</a></li>
	<li>Insider&#8217;s Blog: <a href="http://www.pivotalblabs.com">www.PivotalBlabs.com</a></li>
	<li>Christian&#8217;s Blog @ Pivotal Labs: <a href="http://chris.blogs.pivotallabs.com">chris.blogs.pivotallabs.com</a></li>
	</ul>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/51/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Technology, Market and People: What makes for a successful project?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/50</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/50#comments</comments>
		<pubDate>Thu, 20 Apr 2006 05:59:29 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
	<category>Teams</category>
	<category>Strategy</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/50</guid>
		<description><![CDATA[	Most software practitioners I&#8217;ve met think the choice of technologies (programming languages, tools, libraries, etc.) has the largest influence on a project&#8217;s success. I actually think it is a minor influence and I think the project&#8217;s alignment with market demands is the single largest determinant of success.
	While there are those who would explicitly claim the [...]]]></description>
			<content:encoded><![CDATA[	<p>Most software practitioners I&#8217;ve met think the choice of technologies (programming languages, tools, libraries, etc.) has the largest influence on a project&#8217;s success. I actually think it is a minor influence and I think the project&#8217;s alignment with market demands is the single largest determinant of success.</p>
	<p>While there are those who would explicitly claim the significance of technology, when asked directly developers may cite another factor. However, I make my claim regarding this &#8220;conventional wisdom&#8221; based on behavior; in most any project I&#8217;ve been involved in, a tremendous amount of time and energy is dedicated to selection of programming languages, technical evaluations, and debates about architecture and patterns. </p>
	<p>By contrast, it seems the topic that gets the least attention is a very simple question: Are we solving the right problem? It amazes me how often, because of lack of interest or a strong sense of faith, developers do not question why they are building the application they spent countless hours working on. </p>
	<p>From a separation of roles and responsibilities perspective, it seems appropriate that developers should not concern themselves with such a question; it is the job of the product manager. However, I&#8217;ve seen the most successful teams consist of a cross functional group, where each member took an active interest and responsibility for the project&#8217;s outcome. (Anyone been involved in a technical success, but it was a business failure?)</p>
	<p>Agile software development can help a lot; the emphasis on communication, feedback and iterative development encourages the identification of real user need.  It is amazing how much clarity can be achieved when developers and users sit together in the same room or you demo an application every two weeks. Alternatively, I find that traditional, specialized and compartmentalized development models, where information is &#8220;handed over the wall&#8221; or communicated with documents instead of conversation encourage a very myopic view by developers. Even if you wanted to better understand the business goals, pressures and motivations for the project, there may not been anyone accessible to ask.</p>
	<p>Though I make a living being a proponent of agile development, giving too much significance to the process is just as misguided as emphasizing the technology. Agile development can be an effective means at understanding market needs, but it is not an end unto itself.</p>
	<p>If I were to quantify my idea, in terms of percent influence on success, alignment with market needs accounts for 65%-75%, process, practices and team dynamics for about 20%-25% and technology for only 5%-10%. Similarly, I think the time and effort spent evaluating issues or devising tactics should be proportional to their importance. Simply put, I&#8217;d rather spend three weeks training a development team about user&#8217;s daily activities than three weeks evaluating the choice of Java vs. Ruby or SOAP vs. REST. </p>
	<p>I&#8217;ve seen numerous examples where the development group had horrible practices or made many poor technical choices; it was amazing they ever got anything done. Yet, their products were great successes and wins for their organization. I&#8217;ve also seen cases where the architecture was beautiful and most any developer would awe at its magnificence, but it was flatly rejected by their user base. Unfortunately, I&#8217;ve even been involved in a case that was a marvel of agile adoption(well, at least the engineering practices): thousands of tests running in seconds, pair programming, and elaborate continuous builds: but it didn&#8217;t do much for the company&#8217;s bottom line.</p>
	<p>Ultimately, you can&#8217;t win if you cross the wrong finish line. </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/50/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>The Dangers of Costco-Style Programming and the New-Toy Effect</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/49</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/49#comments</comments>
		<pubDate>Sun, 20 Nov 2005 11:05:46 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Random Thoughts</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/49</guid>
		<description><![CDATA[	A good friend of mine, Iraklis Kourtidis, coined the phrase Costco-style programming. He described it by example: &#8220;I&#8217;ve had spinach in one of my dinner dishes each night this week. Not because I particuarly like spinach or it actually went with the meal, but because I bought a big bag at Costco and now I [...]]]></description>
			<content:encoded><![CDATA[	<p>A good friend of mine, Iraklis Kourtidis, coined the phrase <strong><em>Costco-style programming</em></strong>. He described it by example: &ldquo;I&rsquo;ve had spinach in one of my dinner dishes each night this week. Not because I particuarly like spinach or it actually went with the meal, but because I bought a big bag at Costco and now I have to use it up.&rdquo; </p>
	<p>He was describing the software tean&rsquo;s use of <em>annotations</em>, a C# feature that was new at the time. Developers frequently abuse some tool, trick or feature because it is easy and available.</p>
	<p>Similarly, I described the <strong><em>new-toy effect</em></strong> as also motivating developers: you have a shiny, new toy available and you want to play with it everywhere and anywhere. Who cares that is doesn&rsquo;t make sense that Godzilla would fight an omnious basketball; I&rsquo;ve got a new Godzilla toy and he&rsquo;s gonna fight everything.</p>
	<p>The combination of Costco style programming and the new toy effect can be very dangerous for a software application. Developers would spam code bases, add useless, complicated features and even develop entire products motvated by these pressures. Though a completely different rant, I think much of the Internet Bubble of the late 1990&rsquo;s can be explained by this; the Internet was new and available and lots of kids wanted to play with their new toy everywhere and anywhere. And the effect is worse when many went to Costco and have new toys.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/49/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>The Power of the Collective Brain</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/48</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/48#comments</comments>
		<pubDate>Wed, 16 Nov 2005 14:33:32 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/48</guid>
		<description><![CDATA[	Every now and then someone makes a call for collective brain power; it may be someone in a blog posting or a CEO addressing his staff. The odd thing, at least to me, about such requests is that they frequently occur after some suboptimal individual attempt at solving the original problem. This seems inefficient; why [...]]]></description>
			<content:encoded><![CDATA[	<p>Every now and then someone makes a call for collective brain power; it may be someone in a blog posting or a CEO addressing his staff. The odd thing, at least to me, about such requests is that they frequently occur after some suboptimal individual attempt at solving the original problem. This seems inefficient; why wait as a last resort to call on the power of a collective conscious?</p>
	<p>The simple answer is one of resource allocation and opportunity cost; it is inefficient to always point some collective at every issue when a subset can solve the problem. However, agile environments offer an alternative. The high visibility and communication of requirements, risks and decisions provides the opportunity for an opt-in application of collective brain power. Team members can choose to give background thinking to a topic, while not consuming everyone with it.</p>
	<p>This isn&#8217;t necessarily a fully baked idea, but something I&#8217;ve observed with more than one agile team. It is not often there is the explicit call for ideas, yet is seems like many decisions have the benefit of input from multiple people. Besides being egalitarian and empowering it generally leads to good outcomes.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/48/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Agile 2.0 and Web 2.0: A Perfect Match</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/47</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/47#comments</comments>
		<pubDate>Wed, 16 Nov 2005 14:18:51 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/47</guid>
		<description><![CDATA[	Okay, so my title may be little exaggerated, especially since there isn&#8217;t officially an Agile 2.0. However, for the agile development community, there are many shifts, trends and new ideas that make it feel like a new generation of agile development. (More on this later.)
	Anyway, I&#8217;ve been following some of the Web 2.0 developments lately; [...]]]></description>
			<content:encoded><![CDATA[	<p>Okay, so my title may be little exaggerated, especially since there isn&#8217;t <i>officially</i> an <i>Agile 2.0</i>. However, for the agile development community, there are many shifts, trends and new ideas that make it feel like a new generation of agile development. (More on this later.)</p>
	<p>Anyway, I&#8217;ve been following some of the Web 2.0 developments lately; I&#8217;ve read many blog posts (<a href="http://web20workgroup.com/">http://web20workgroup.com</a> is a good place to start for those interested), heard gossip about VC funding, and know a few people working on Web 2.0 projects. All of this information  makes me think an agile approach is perfectly matched for the development of Web 2.0 applications.</p>
	<p>Agile development emphasizes the need for feedback, discovery and adaptation. A common agile credo is &#8220;release early, release often.&#8221; Agile development is basically a genetic algorithm (for more on this, read this <a href="facilitator://christiansepulveda.com/blog/archives/000052.html">post</a>); an agile approach evolves its software. Evaluating the &#8220;fitness&#8221; of the application with each iteration is critical. Real user feedback is one of the best indicators for making such an evaluation.</p>
	<p>Most Web 2.0 projects (or at least those I have seen) are consumer oriented. Consumer oriented, service-based software markets are generally accommodating (and sometimes welcome) frequent releases, assuming each release is at least as good and as stable as the previous. Agile development favors short iterations and core practices such as automated testing and continuous integration develop the ability to release early, often and reliably as a core competency of its adopters. </p>
	<p>Most projects in early stages are based on a vision and skeleton of a possible solution; success is largely determined by how quickly the application can evolve into what user&#8217;s need. Quick delivery is necessary to compete and not miss windows of opportunity. I think the best software process to support this is based on an agile model. One of my former clients (when I was a consultant) believed this as well and feels that their agile adoption was a key facilitator of their IPO last year. I also know some very large, high profile, Bay Area web companies who are adopting agile software development and see it as necessary to remain competitive.</p>
	<p>I think others support the complementary nature of agile and Web 2.0. The canonical book on <i>Ruby on Rails</i>, one of the popular Web 2.0 enabling technologies, is <i><a href="http://pragmaticprogrammer.com/titles/rails/index.html">Agile Web Development with Rails</a></i> and it describes how Rails development embodies and accommodates an agile approach.</p>
	<p>I noted that I believe the agile community is undergoing Agile 2.0. Last year the 2nd edition of the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321278658/qid=1132178304/sr=8-1/ref=pd_bbs_1/103-3808765-8443055?v=glance&#038;s=books&#038;n=507846">XP white book</a> was published, in which Kent Beck revised and updated his description of XP. Mary Poppendieck&#8217;s <a href="http://www.agileuniverse.com/schedule/M.%20Poppendieck">keynote address at XP/AU 2004</a> described agile as &#8220;crossing Moore&#8217;s chasm&#8221;; it is shifting from early adopters to mainstream. While some feel this shift may water down agile, I think it can amplify its effectiveness; many in the agile community have updated and evolved their ideas to better support the software development process.</p>
	<p>Finally, I have also adopted a more mature understanding of agile development. I&#8217;ve had many successes in my career applying agile methods, but have been challenged in my current job and our agile adoption. These challenges have caused me to reflect on many assumptions and ask many questions. Though I have more questions than resolutions (which I think is a good sign you are actually learning), my understanding and application of agile software development has evolved into its own &#8220;next generation.&#8221; I know a few others who share many of my ideas and are working in the Web 2.0 space. For these instances, I am excited to see how the combination of Agile and Web 2.0 turns out.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/47/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Fitness Functions and Agile Development</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/46</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/46#comments</comments>
		<pubDate>Fri, 11 Nov 2005 14:58:29 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/46</guid>
		<description><![CDATA[	Agile development is structured on iterative and adaptive development. The application evolves over time and, at least hopefully, closer matches the user&#8217;s needs. The basic process of agile development is a genetic algorithm; after each iteration, adaptations are made and the whole process repeats with each iteration.
	The success of a genetic algorithm generally depends on [...]]]></description>
			<content:encoded><![CDATA[	<p>Agile development is structured on iterative and adaptive development. The application evolves over time and, at least hopefully, closer matches the user&#8217;s needs. The basic process of agile development is a <i><b>genetic algorithm</b></i>; after each iteration, adaptations are made and the whole process repeats with each iteration.</p>
	<p>The success of a genetic algorithm generally depends on the quality of its <b><i>fitness function</i></b>. A fitness function evaluates the success, or &#8220;fitness&#8221;, of a given result. Within agile development, the iteration boundary marks an opportunity to evaluate product backlogs, prioritize features, and generally tweak the process; both the product and the process evolve.</p>
	<p>In order to have a successful agile project, it is imperative to have fitness functions for evaluating both the application being developed and the process by which it is developed. The agile community provides various guidelines for the process evaluation; retrospectives, cost of change, quality of team dynamics, test suite run time and size, shrinking code bases, etc. are all assessment tools and indicators of process health. However, there is little information about evaluating product health. </p>
	<p>There are some obvious indicators and questions: do users like it, are bug counts low, is the product selling? I think these are symptoms of the relative health of the application, but I think you need more from a suitable fitness function, particularly when the product isn&#8217;t an instant and obvious success.  </p>
	<p>For example, prioritizing features can be a very difficult activity; users will typically assign many features a &#8220;number 1&#8243; priority. However, ranking each feature in strict order, with no duplicate priority, is a challenge.</p>
	<p>While the assessment of the product&#8217;s health can be seen as a marketing or product management activity, I do not think it is outside the scope of agile development. Successful projects depend on the collaboration of cross-functional teams. Thus, I think it is important to communicate the fitness criteria for an application amongst all on the team, even if one group has primary ownership of it. </p>
	<p>Ultimately, the fitness function for an application is an answer to the question of &#8220;why do we build the products we do?&#8221; Do you know the answer to this question for your current project? Ask others and you may be surprised at the responses.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/46/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Agile, Waterfall and Core Assumptions</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/45</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/45#comments</comments>
		<pubDate>Fri, 11 Nov 2005 13:57:54 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/45</guid>
		<description><![CDATA[	Superficially, there are many ideas and practices that are in common with agile development and waterfall development. There is a Agile Unified Process, for example and an &#8220;XP plugin&#8221; for the Rational Unified Process. However, I think agile development is quite different than waterfall, though it is not always easy to name the differences and [...]]]></description>
			<content:encoded><![CDATA[	<p>Superficially, there are many ideas and practices that are in common with agile development and waterfall development. There is a Agile Unified Process, for example and an &#8220;XP plugin&#8221; for the Rational Unified Process. However, I think agile development is quite different than waterfall, though it is not always easy to name the differences and understand why drawing strong distinctions matters.</p>
	<p>I think agile and waterfall are each based on a fundamental assumption; if you subscribe to this idea then you probably should adopt that process. The assumption is about how to achieve a successful software project.</p>
	<p>For waterfall development, I think the basic assumption is that <i>perfect planning</i> leads to optimal results. Agile assumes is that an <i>adaptive and evolving</i> approach is the way to go.</p>
	<p>I do not think anyone who adopts waterfall actually thinks perfection is attainable, but I think the entire process is aimed at the pursuit of a perfect plan. Extensive requirements, complete with test traceability, elaborate architectures, long analysis and design phases, and up-front test plans are attempts at precise, accurate plans. Usability, overcoming technical challenges and meeting deadlines are achieved (or so is the idea) by building a plan that satisfies these requirements.</p>
	<p>By contrast, agile development tends to be lightweight on planning. There is a general pragmatism to &#8220;do as little as you can get away with&#8221; when considering planning, requirements capture, architecture and documentation, as emphasizing planning would emphasize a different base assumption. However, agile development, in particular XP, is very heavy weight when it comes to automated testing; tremendous effort is usually expended. The reason is the emphasis on adaptability and evolution. Agilists assume change is a necessary and inevitable and agile processes encourage developing your &#8220;accommodate-change muscles.&#8221;  Thus, automated tests tend to be a primary mechanism to achieve efficient regression testing, which accommodates code design changes, for example.</p>
	<p>Anyone who reads my blog knows I am very biased towards agile development. Though it may sound arrogant and obnoxious, I think many of the practices of waterfall are based on myths and thus make the process flawed. For example, the practice of software architecture is the application of learned patterns and principles in an attempt to satisfy functional and non-functional requirements. The problem is that technology changes quite fast and the software industry is too immature; it is hard to successful apply experience when the rules, constraints, and contexts are in flux. For at least the foreseeable future, I think you are better served with a process that allows for discovery and adaptation than depends on rare constants.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/45/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Three Important Considerations for a Candidate</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/44</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/44#comments</comments>
		<pubDate>Wed, 19 Oct 2005 23:34:51 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Misc</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/44</guid>
		<description><![CDATA[	In a previous blog post, I ranted a bit about how candidates can make themselves more attractive to employers. While I still am interested in things from a employer&#8217;s perspective, there are three critical consideration for a candidate: Do I want to do the role offered? Is there an opportunity to have an impact? Will [...]]]></description>
			<content:encoded><![CDATA[	<p>In a previous <a href="http://christiansepulveda.com/blog/archives/000048.html">blog post</a>, I ranted a bit about how candidates can make themselves more attractive to employers. While I still am interested in things from a employer&#8217;s perspective, there are three critical consideration for a candidate: Do I want to do the role offered? Is there an opportunity to have an impact? Will I have the support and environment necessary to effectively do the job? </p>
	<p>For each candidate, the consideration of each question will vary as well as its important. During all research and interaction with the organization, a candidate should structure her questions to build a &#8220;dossier&#8221; that addressees these concerns. </p>
	<h3>Do I want the role offered?</h3>
	<p>While a relatively simple question, it requires that a candidate has a clear sense of his goals and priorities. Timing is generally a key component, as different roles may be more or less crucial throughout the different stages of professional development.</p>
	<h3>Is there an opportunity to have an impact?</h3>
	<p>Ultimately, I think the most rewarding positions are ones in which there is an opportunity to have a significant impact to the organization. The organization benefits and the candidate usually does as well; the experience is generally better and prospective employers want to know what results were achieved. The scope and scale of this opportunity will usually vary with the position; a developer who introduces TDD to a group may help lower defect rates while a VP of Engineering has the opportunity to impact the company&#8217;s profitability. However, I think all candidates, regardless of the position, should be ambitious and consider the largest impact the role may have. Similarly, it is a big warning sign if the position being considered has little impact to the organization; there will generally be few resources, support, professional development, etc. </p>
	<h3>Will I have the support and environment necessary to effectively do the job?</h3>
	<p>This is a very open ended question and probably the most personal for a candidate. Part of the consideration is about organization support: autonomy, authority, budget, latitude, and counsel are some significant elements. Environment is quite personal. Some candidates like dynamic, fast paced environments and others prefer academic settings. For some people, co-workers that can be potential friends is significant. Some people need flexible working hours. Ultimately, an employee will be most effective in the environment best suited for her.</p>
	<p>While these questions may seem obvious, I am always surprised by how few candidates (or so it appears) are trying to address these considerations. A key part of my evaluation of a candidate is an assessment of his evaluation  of the position; I want candidates who are looking just as hard at my organization and I am looking at them. Also, you will notice that there is a certain bias in these considerations towards professional development and satisfaction. I&#8217;ve made no mention of practical considerations such as salary. While practical concerns need to be satisfied, I don&#8217;t think they should be prime motivators. This is not to say that elements such as salary aren&#8217;t important considerations, but I think it is harder to find the position and organization that matches well with the three described concerns than to find a position to satisfy practical issues.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/44/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Guidelines for Being a Strong Job Candidate</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/43</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/43#comments</comments>
		<pubDate>Fri, 23 Sep 2005 17:53:47 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/43</guid>
		<description><![CDATA[	I have interviewed a lot of people over the years. (I&#8217;ve hired over 50 people, interviewed hundreds, phone screened many more and read thousands of resumes.) While I don&#8217;t claim to be any sort of recruiting expert, there are two things I can intelligently (as much as I can for anything else) speak of: trends [...]]]></description>
			<content:encoded><![CDATA[	<p>I have interviewed a lot of people over the years. (I&#8217;ve hired over 50 people, interviewed hundreds, phone screened many more and read thousands of resumes.) While I don&#8217;t claim to be any sort of recruiting expert, there are two things I can intelligently (as much as I can for anything else) speak of: trends in resumes / candidates and guidelines for being stronger on both.</p>
	<p>The single most important fact to understand as a job seeker is: <i><b>A prospective employer has no attention span whatsoever.</b></i></p>
	<p>Your goal is to get the attention of the person who will actually decide to hire you and make clear why you are different from all the other candidates she comes across. Employers must sift through many resumes (there were times I would look at 100 resumes a day) and frequently cannot afford to spend a lot of time on a resume. Assume you must communicate in 10 seconds a reason that the employer should continue reading. Recruiters, internal or external, are not your target audience. While you may need get past them to reach the actual employer, never forget that your message should be targeting the actual employer. </p>
	<p>While this sounds obvious, you are <b><i>selling yourself to an employer</i></b>. However, most resumes I see are not selling but reporting. Listing the details of each job, tool, language, API, or activity from your entire experience is not effective.</p>
	<p>A general sales adage is a product should be made easy to buy, not simply easy to sell. When faced with buying something that is a &#8220;no-brainer&#8221;, there is no selling. A candidate should always consider the perspective of the employer; <i><b>what would make it a &#8220;no-brainer&#8221; to hire me?</b></i></p>
	<p>There are many different approaches and considerations for how a candidate can position herself as an obvious choice. Ultimately, I think it can be summarized by two questions (from the point of view of the employer): <i><b>What can this candidate do for me? How does this help me?</b></i> The first question is about the results the candidate can achieve or deliver. The second is about the match of these skills for the employer&#8217;s context.</p>
	<p>The following are some guidelines for candidates:</p>
	<h3>Overall</h3>
	<dl>
	<dt>Have a 30 second elevator pitch. </dt>
	<dd>Know what your strengths are. Know what results you have achieved. What makes you special and stand out?</dd>
	<dt>Know your professional goals.</dt>
	<dd>What are your career plans? Where do you want to be in one year? Five years?</dd>
	<dt>Have a career plan.</dt>
	<dd>The goals are a strategic concern; your plan is tactical. You should be able to describe the role you want to perform, with detailed functions and responsibilities. Be able to describe an ideal work day, month, or year.</dd>
	<dt>Know your strengths, weaknesses and what affects them.</dt>
	<dd>More importantly than what you do well or poorly are the factors that enhance your skill set and those that detract from it. These are critical to selecting the right position.</dd>
	</dl>
	<h3>Resume</h3>
	<p>A resume makes the first impression. It must get someone&#8217;s attention immediately and should answer the two most important questions above for the employer.</p>
	<dl>
	<dt>1 page only. No exceptions.</dt>
	<dd>I don&#8217;t read 7 pages resumes; if the person can&#8217;t be brief, it implies they are disorganized and cluttered. I will note one caveat to this: your resume should be one page. It is an introduction and summary. If there are details that are important to communicate, include an addendum or appendix (which should be never more than 2-3 pages) and make it clear that this is extra, not part of the resume. You can title it &#8220;Project Details&#8221; or something, but it should have it&#8217;s own header and not be confused as part of the resume.</dd>
	<dt>Lead with the elevator pitch.</dt>
	<dd>Your 30 second elevator pitch should be communicated immediately in a &#8220;Professional Profile&#8221; or similar section.</dd>
	<dt>Focus on results and achievements</dt>
	<dd>When I read that a candidate was on a project that tripled company revenues, I am interested to continue reading. </dd>
	<dt>Highlight technical qualifications</dt>
	<dd>Do not list every three letter acronym you know, even if you are an expert. Focus on your core strengths and the technologies you want to work with or that are relevant to the employer. If you know C++ but are looking for job doing Java, don&#8217;t mention you know C++.</dd>
	</dl>
	<p>Almost 100% of the resumes I read look the same. They all share the same subset of technical jargon references and technologies. There are many, many J2EE, .NET, C++, etc. developers. It is almost impossible to differentiate yourself in this category. Though a technical profile is obligatory, as a technical worker, it should be brief and contain highlights. I suggest putting it at the end of the resume. </p>
	<p>The technical profile of a resume is the source of the largest mistakes in candidate positioning, so I will babble and rant about this a bit. I think the reason for these mistakes are:</p>
	<ul>
	<li>technical people focus on technology</li>
	<li>many recruiters encourage listing all your technical experience</li>
	<li>employers may screen based on the content of technical profile</li>
	</ul>
	<p>The first point is probably pretty obvious and I won&#8217;t discuss it. The second is also common, though I discourage it. The last reason is the most significant: frequently resumes are so poor (or there are so many) that employers have little choice than to screen based on technical profiles. However, I think there are a few mistakes being made here. First, candidates try to keep as many options open as possible and this actually hurts them. Few people are experts in the large lists of technologies, languages and tools commonly listed on resumes. Even if you are, simplify. For example, if you&#8217;ve worked with many Web Service / SOAP technologies, write in your technical profile something like &#8220;SOAP / Web Services expert (worked with Axis, WebMethods, BlueTitan &#8230;) instead of listing the 20 different Web Service related frameworks you know. Alternatively, if your goal is to work on web services, only list the web service frameworks you know and omit the other items such as object relational mappers, databases, etc.</p>
	<p>Listing too many elements in a technical profile has the risk of implying indecision and insecurity. Don&#8217;t list technologies you don&#8217;t really want to work with. Also, a candidate that doesn&#8217;t care what technologies they work with (when they are listing many, unrelated technologies) seems to have little career focus. Finally, it may convey insecurity in the candidate; it can make a candidate look desperate and thus undesirable. Less is more.</p>
	<h3>Phone Screens</h3>
	<p><b><i>In over 90% of the phone screens that I do, I know if I will pursue a candidate in the first two minutes of the phone screen.</i></b> A phone screen is intended to serve answer one question: Should I invest the time to formally interview this candidate? Formal interviews are generally very expensive to conduct and therefore most organizations don&#8217;t do them lightly.  There are a few things to keep in mind at this point.</p>
	<dl>
	<dt>Research the company</dt>
	<dd>I hope this is obvious, but it amazes me how many people do not do this. Look at the companies website, competitor websites and industry websites for the employer. Learn as much as you can.</dd>
	<dt>Be prepared</dt>
	<dd>Know your own experience well, such that you can communicate succinctly. Learn how to be brief and focus on highlights. Interviewers will ask follow-up questions when interested and will appreciate brevity. Also, give thought to typical questions and know your answers. Such questions include: Why are you looking for a job? What is the ideal job, role, organization? What is the most important thing I should know about you as a candidate? Tell me about an interesting technical or team challenge and how you resolved it. What was the best project your were on? Worst? Why?</dd>
	<dt>Interview the employer organization</dt>
	<dd>You should look as closely at the employer company as they are looking at you. Good candidates take their professional development very seriously and are engaged in knowing about the company, its culture, its business model, future, history, etc.</dd>
	</dl>
	<h3>If you are looking to work for me&#8230;</h3>
	<p>This entire blog entry is biased about making a candidate attractive to me, as an employer, but there are a few other items of note:</p>
	<dl>
	<dt>Communication Skills are Key</dt>
	<dd>Being able to communicate clearly, effectively and succinctly is critical. It is vital to working in an agile environment and poor communication is one of the core reasons I don&#8217;t pursue candidates.</dd>
	<dt>Must be a Team Player</dt>
	<dd>Agile Processes emphasize collaboration. You must thrive in a team environment.</dd>
	<dt>Be Honest</dt>
	<dd>I generally know when a candidate is weak in a particularly area, unsure or blatantly lying. I prefer and respect an honest and direct &#8220;I don&#8217;t know&#8221; rather than trying to dance around ignorance.</dd>
	<dt>Be Committed to Projects</dt>
	<dd>I am looking for people who will take ownership of the result and do what they can to achieve it. I want candidates who take the outcome as a personal reflection of their abilities and work ethic. I don&#8217;t ask for late nights or weekends but respect people who sacrifice when they need to make sure something is done.</dd>
	</dl>
	<h3>Conclusion</h3>
	<p><b><i>Employers hire people, not cogs.</i></b> A candidate should never forget that an employer is investing in a person and should do everything they can to position their value as an individual to an organization. If you are seen as just a Java developer who knows SOAP, you are easily replaced. Great employees, however, are assets to companies and rare.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/43/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>The Importance of Iterations in Bridging the Market / Application Gap</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/42</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/42#comments</comments>
		<pubDate>Fri, 02 Sep 2005 15:26:13 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/42</guid>
		<description><![CDATA[	In a recent blog post I discussed the &#8220;Market / Application Gap.&#8221; In order for a software product to succeed, it must align with the user&#8217;s needs. The faster an organization can bridge the gap between the market and the actual application, the greater its competitive advantage and its opportunity for success.
	At the start of [...]]]></description>
			<content:encoded><![CDATA[	<p>In a recent blog <a href="http://christiansepulveda.com/blog/archives/000044.html">post</a> I discussed the <a href="http://christiansepulveda.com/blog/archives/000044.html">&#8220;Market / Application Gap.&#8221;</a> In order for a software product to succeed, it must align with the user&#8217;s needs. The faster an organization can bridge the gap between the market and the actual application, the greater its competitive advantage and its opportunity for success.</p>
	<p>At the start of a project, some effort is given to requirements discovery and this effort varies with software methodology.  From here requirements are communicated to engineers who in turn produce an application that reflects the requirement. With agile software development there is an emphasis on taking action as early as possible; waterfall tends to focus on a more complete sets of requirements, designs and test plans (<i>read:</i> more time). With my &#8220;Market / Application Gap&#8221; diagram in mind, the process looks something like this (order of events, with respect to information flow / deliverables, are numbered): </p>
	<p align="center"><img src="http://christiansepulveda.com/blog/iteration_flow.gif"></p>
	<p>This cycle represents an iteration: from requirements to delivery of an application. While much has been discussed about the iterative nature of agile development, <i>the truth is that every software process uses iterations</i>. The only question is the length of the iteration. An agile project might have an iteration length of weeks to months; waterfall can have iterations that last years. (Remember, I am defining an iteration in this context as the delivery of an application to the end user.)</p>
	<p>At the end of an iteration, the overall gap between the market and the application either grows or shrinks. If you have an iteration cycle of a few months (at most), you can recover if you missed the needs of your market. When you have an iteration cycle of years, you may not get a second chance if you missed the mark. This is one of the core reasons why agile development makes more sense than waterfall: from a risk management point of view it is foolish to take a &#8220;big bang&#8221; approach where you have few opportunities to satisfy your market. </p>
	<p>If the goal is to close the gap between the related participants in the &#8220;Market / Application Gap&#8221;, the quicker you can complete an iteration, the quicker you possibly close the gap. Many successful software products simply work the way users expect; unless you&#8217;re omnipotent, this requires some trial and error and probably some mistakes. Users will tolerate some mistakes, but won&#8217;t wait around long. Long iterations can result in a lost audience, which spells doom for commercial software. In my years of software development, I&#8217;ve seen a variety of software processes, many of which claim to encourage iterations and quick feedback. Agile Software Development is the only approach I&#8217;ve seen deliver on this promise in actual practice.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/42/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Lowering the Cost of Change</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/41</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/41#comments</comments>
		<pubDate>Mon, 15 Aug 2005 22:35:22 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/41</guid>
		<description><![CDATA[	Lowering the cost of change is a frequently cited benefit of adopting agile development and extreme programming, in particular. You&#8217;ll frequently see graphs drawn that show an exponentially growing cost curve as the cost of change for a waterfall project and graphs that show a level or even down sloping (after an initial ramp up [...]]]></description>
			<content:encoded><![CDATA[	<p>Lowering the cost of change is a frequently cited benefit of adopting agile development and extreme programming, in particular. You&#8217;ll frequently see graphs drawn that show an exponentially growing cost curve as the cost of change for a waterfall project and graphs that show a level or even down sloping (after an initial ramp up cost) cost curve for XP projects. </p>
	<p>I personally have been in involved in projects where the down sloping cost curve was actually achieved, so I know it is possible. I also know it is rare; on other projects a flat cost curve was all that was achieved. Both are good outcomes, but what is the cause for the differences in these projects? How does a project actually achieve low costs of change?</p>
	<p>However, before exploring how to lower the cost of change, defining the cost of change is necessary. I frequently see discussions about the cost of change that center around the time or effort required to implement a story. While not wrong, I think this perspective is too narrow and short sighted. This definition is not affected by a team that is &#8220;going in circles&#8221;. But who cares if they can go in circles really fast?</p>
	<p>Mary Poppendieck has discussed a <i>Maturity Model of Software Development</i>. (She has a presentation on this and an article published in Software Development</i> magazine. http://poppendieck.com/maturity.htm) The basic idea is that what matters is how quickly and reliably can an organization take a user request and deliver it in the software. This is the cost of change I wish to focus on: the amount of time elapsed and resources spent on taking a user feature and having it present in the software application.</p>
	<p>Now, returning to analyzing the cost of change itself, there are two considerations: what contributes to the cost of change and how does agile development help lower it.
	<p>Contributors to the cost of change:<br/></p>
	<ul>
	<li>time to assess and prioritize a user request</li>
	<li>overhead for specifying a story</li>
	<li>&#8220;churn&#8221; in stories</li>
	<li>number of changes to code base to implement story</li>
	<li>cost of release</li>
	</ul>
	<p><br/><br />
<b>Time to Assess and Prioritize a User Request</b></p>
	<p>How is feedback handled? How many people are part of the decision? The longer it takes for a sales person to communicate a user requirement to product management, have it prioritized and then worked on by engineering, the hight the cost of change. Similarly, the number of people (or worse yet, committees) that must approve or deny the request, the higher the cost of change.</p>
	<p><b>Overhead for Specifying Stories</b></p>
	<p>The time and number of people it takes to specify a story and complete set of acceptance tests affect the cost of change.</p>
	<p><b>Story Churn</b></p>
	<p>The higher the number of times a feature area is revisited, be it because of bugs or revisions due to what was delivered wasn&#8217;t quite what user&#8217;s wanted, the higher the cost of change.</p>
	<p><b>Code Base Changes Required to Implement a Story</b></p>
	<p>The time it takes to assess and discover the necessary code changes and to implement them impacts the cost of change.</p>
	<p><b>Release Cost</b></p>
	<p>What is the overhead to a release? Is there a manual QA cycle? How long does it take? Documentation done at the end?</p>
	<p><b><i>How can Agile lower the Cost of Change?</i></b></p>
	<p>The primary mechanism for lowering the cost of change is bridging the gaps between the user, product owner, developer and application. (For more on this, please see <a href="http://christiansepulveda.com/blog/archives/000044.html">this blog post.</a>)As the gaps are closed, the application tends to be in alignment with the user requirements. </p>
	<p>Practices such as an onsite customer and acceptance tests help develop a shorthand of communication between the product owner and the developers. Thus, the overhead of specifying stories tends to go down and existing acceptance tests and infrastructure serve as templates and extension bases for new acceptance tests.</p>
	<p>Iterations provide many benefits. They allow opportunities for injecting feature requests, shortening the time between a user&#8217;s initial request and when she sees it in the product. Iterations, combined with engaging a cross functional team in each iteration, keeps activities such as documentation and exploratory testing in step with development, shortening release cycles. </p>
	<p>Finally, the engineering centric nature of XP encourages the application, and more importantly the underlying code base, to become ever closer to expressing the user&#8217;s intentions and needs. It is very gratifying as a developer when your code base almost anticipates new user features.</p>
	<p>I think software teams should actively try to measure, monitor and lower the cost of change. The complete &#8220;cost chain&#8221;, from sales to development, needs to be included and managed. Agile practices, such as XP, will provide a lot of guidance for improving the elements closest to the code, while applying general agile principles, such as cross functional teams, iterations, high communication, emphasis on feedback, can help the other aspects not directly involved with development. An organization that can successfully manage and lower the cost of change will achieve significant competitive advantages such as lower cost and time to market. Organizations that can&#8217;t manage the cost of change will have trouble competing at all.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/41/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>The Importance of Closing the Gap Between Customers and Developers</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/40</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/40#comments</comments>
		<pubDate>Tue, 09 Aug 2005 12:55:56 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/40</guid>
		<description><![CDATA[	I think in a software project there are varying notions of reality regarding the actual application being developed. They are: 
	
	actual needs of the market or user base
	product owner&#8217;s vision of the application
	developer understand of the goals and requirements of the application
	code base and actual executable application
	
	This is
represented in the following diagram:
	
	The gap between these [...]]]></description>
			<content:encoded><![CDATA[	<p>I think in a software project there are varying notions of reality regarding the actual application being developed. They are: </p>
	<ul>
	<li>actual needs of the market or user base</li>
	<li>product owner&#8217;s vision of the application</li>
	<li>developer understand of the goals and requirements of the application</li>
	<li>code base and actual executable application</li>
	</ul>
	<p>This is<br />
represented in the following diagram:</p>
	<p><img src="http://christiansepulveda.com/blog/participant_gap_map.gif"></p>
	<p>The gap between these perspectives is normal, particularly at the start of a project. However, I think it is difficult for a project to succeed if the gap is not being closed; there needs to be alignment and overlap among the different viewpoints. </p>
	<p>One of the motivations of agile software development, at least in my opinion, is to help close these gaps. The high bandwidth of communication, intense collaboration, emphasis on feedback and the importance of acceptance tests are techniques to communicate the assumptions, needs and current state of each different constituent. With each iteration, the gap should be bridged a little more.</p>
	<p>This raises an interesting question: How can you measure or monitor the shrinking (or worse the expanding) of the gap? </p>
	<p>I don&#8217;t think you can measure this directly. However, there are a variety of indicators that can help evaluate how well you are closing the gap. </p>
	<p>Bugs are probably the best indicator. A bug represents a mismatch in expectations, understanding or communication. Bugs are reported when a calculation is incorrect as well as when a user doesn&#8217;t like the number clicks it takes to perform an operation. In both cases, there are one or gaps between what the user needs and what the application is providing; perhaps the product owner specified a requirement that made the user experience awkward or a developer missed a test case. If your bug rates aren&#8217;t going down it is an indicator that the gaps are not shrinking. I suggest assessing the cause for the constant (or growing) bug rate by evaluating which gap is the widest. Understanding where the communication / comprehension breakdown exists is the most important step in resolving it.</p>
	<p>There are other indicators as well, such as the amount of churn in stories (requirements) and the overhead of specifying stories.  If you are revisiting the same areas of the application frequently, whether the reason is user dissatisfaction or defects, there are gaps between the user and the product owner or between the developer, user and code base.</p>
	<p>There are ultimately two reasons for closing the gap: delivering a product that users like (and will buy) and lowering the cost of change. One reason is a huge component of succeeding today, the other allows you to succeed tomorrow. When the gaps are small and there is alignment between the user, the application and all those in between, you will probably have a winning project.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/40/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Cleaning out the Cobwebs&#8230;</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/39</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/39#comments</comments>
		<pubDate>Tue, 09 Aug 2005 12:53:04 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/39</guid>
		<description><![CDATA[	My blog has not seen a post in a long, long time&#8230; My last post even promised that I would post more. 
	Excuses aside, I do sincerely plan a lot more posts in the coming future. As I noted in an earlier post, I have taken a position at one of my clients, Nominum. I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[	<p>My blog has not seen a post in a long, long time&#8230; My last post even promised that I would post more. </p>
	<p>Excuses aside, I do sincerely plan a lot more posts in the coming future. As I noted in an earlier post, I have taken a position at one of my clients, <a href="http://www.nominum.com">Nominum</a>. I&#8217;ve been an employee a bit over a year and it has been a very interesting experience.</p>
	<p>I&#8217;ve been ranting for a while that XP is an engineering practice and that there is more to successful software projects than what agile development offers. I&#8217;ve been critical about the silence (in my opinion) of the agile community and literature on the missing elements that actually have the largest impact on a successful project. I had theories (some at least partially verified in my experience) about the interdependencies between the various elements of the &#8220;value chain&#8221; in a software project. </p>
	<p>My experience at Nominum has smacked me in the face with all the things I&#8217;ve ranted about. Its confirmed many ideas, but also posed many challenges. It is still a work in progress, but I revisted and revised many of my ideas regarding XP and agile software development. I plan to post about them in the near future.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/39/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Know anyone who wants to do XP?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/38</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/38#comments</comments>
		<pubDate>Wed, 20 Oct 2004 17:58:53 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Annoucements</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/38</guid>
		<description><![CDATA[	This is my first posting since March. That&#8217;s a long time. Since my last post I&#8217;ve left consulting and I am now currently the VP of Engineering for Nominum, Inc.
	I started at Nominum as a consultant, to lead their Scrum and XP adoption. I decided to stay and a major reason is the quality of [...]]]></description>
			<content:encoded><![CDATA[	<p>This is my first posting since March. That&#8217;s a long time. Since my last post I&#8217;ve left consulting and I am now currently the VP of Engineering for <a href="http://www.nominum.com">Nominum, Inc.</a></p>
	<p>I started at Nominum as a consultant, to lead their Scrum and XP adoption. I decided to stay and a major reason is the quality of the team. They are genuinely one of the best teams I have ever been exposed to.  (I am not the only consultant who &#8220;defected&#8221; and joined the company, the coach of the XP team did as well.) </p>
	<p>I am looking to add people to the team, about two or three developers. A recent candidate told us &#8220;we are the dream team&#8221; anyone could hope to work with. I feel the same way. I generally enjoy coming to work everyday. So, enough of a sales pitch. If you or anyone you know wants to join an XP team, send me an email, resume, smoke signal&#8230;<a href="mailto:christian.sepulveda@nominum.com">christian.sepulveda@nominum.com</a></p>
	<p>Our team room&#8230;.</p>
	<p>(P.S. My grand executive office has been &#8220;converted&#8221; into a nice coffee lounge for the team, as I don&#8217;t use it. We have a very nice Gaggia espresso machine in there.)</p>
	<p><img src="http://christiansepulveda.com/blog/teamroom.jpg">
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/38/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>TDD: Maybe &#8220;tests&#8221; is the wrong word?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/37</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/37#comments</comments>
		<pubDate>Sat, 13 Mar 2004 22:20:31 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/37</guid>
		<description><![CDATA[	There have been many discussions about the appropriateness of the term &#8220;tests&#8221; in describing the unit tests created during test driven development. Most of the debate has centered around the overloaded use of the term &#8220;test&#8221;. For many, the expectation of testing is to discover bugs. There are also many forms of testing, such as [...]]]></description>
			<content:encoded><![CDATA[	<p>There have been many discussions about the appropriateness of the term &#8220;tests&#8221; in describing the unit tests created during test driven development. Most of the debate has centered around the overloaded use of the term &#8220;test&#8221;. For many, the expectation of testing is to discover bugs. There are also many forms of testing, such as usability testing and exploratory testing. Generally, I think the traditional role of a tester (and most forms of testing) are about the act of <i>discovery</i>.</p>
	<p>Test Driven Development is more about <i>verification</i> than <i>discovery</i> and I think this is one core motivation of TDD. In TDD, you specify your expectation first, then write code to satisfy it; the test verifies this contract.  </p>
	<p>Though I am not making any grand revelation, I think there is a subtle importance in the distinction I&#8217;ve made.  I was recently asked about test coverage, completeness and TDD. There has been a lot of interest and research regarding test coverage and completeness. There have even been attempts to provide formal proofs of correctness for software programs. The desire is to have a verification mechanism. TDD does provide good test coverage of code bases, though it doesn&#8217;t guarantee there will be no bugs or other unexpected behavior. TDD simply provides a mechanism for verifying that declared expectations have been satisfied. </p>
	<p>Since I think testing is more about discovery, I think it is a very different type of activity. One of the challenges of testing is that you never know when you are done. Therefore, it is somewhat pointless to ask about test coverage or completeness. How would you define &#8220;complete&#8221;? The act of testing is about the discovery and refinement of expectations. As expectations are discovered, a verification can be captured, satisfied and automated.</p>
	<p>There has been a lot of debate regarding the need of manual testing compared to automated tests. For me, if I use the moniker <i>verification</i>, there is no debate. Verification operations should be automated; testing should not.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/37/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>The Cost of NOT doing TDD</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/36</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/36#comments</comments>
		<pubDate>Mon, 12 Jan 2004 12:46:50 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/36</guid>
		<description><![CDATA[	This is a revised posting. I got a little carried away with my math in the example. Sorry.
	I was working with a team that had been gradually adopting agile practices, but the developers were resistant to practicing Test Driven Development.  At one point, I decided to start tracking how much time was spent compiling [...]]]></description>
			<content:encoded><![CDATA[	<p><i>This is a revised posting. I got a little carried away with my math in the example. Sorry.</i></p>
	<p>I was working with a team that had been gradually adopting agile practices, but the developers were resistant to practicing Test Driven Development.  At one point, I decided to start tracking how much time was spent compiling code, running the application/debugger, re-establishing the context in the application, observing a result and then closing the application. The developer would think about what he observed, make code edits,  start the debugger and repeat the cycle. I observed that it took four minutes on average to run the cycle of compile, launch debugger, find context, etc. This would be done an average of eight times per hour; the remaining hour was spent thinking and making edits. </p>
	<p>One half of each day was completely wasted. The developer couldn&#8217;t really doing anything productive during the four-minute debug cycle because he had to navigate to the corect place in the application and execute the right steps so he could observe the results of the change he just made; he was forced into tedium. In other words, half the development budget was being spent on performing repeated, monotonous tasks. This isn&#8217;t a very effective use of resources or talent. </p>
	<p>The development world has been doing this for years. My analysis may seem a bit naive; the lost time I refer to has been considered a necessary overhead in order to receive feedback. The feedback is necessary but this method of getting feedback is not.</p>
	<p>Consider the use of TDD. The same developer makes a code edit, runs an automated test suite and in seconds gets feedback of the impact of his change. Besides knowing the expected impact, the developer knows the impact of his change on the system as a whole, performing a validation of his expectation and regression check in one step. (My analysis of the four-minute debug feedback  cycle didn&#8217;t address the time spent determing the system impact of code changes). </p>
	<p>Faced with such results, the team in my example did adopt TDD. Their feedback loop was reduced to thirty seconds. In the example, there were eight edit cycles per hour. Previously, thirty two minutes were being used to get feedbak regarding an edit, so twenty eight minutes were being used to make the actual change, consider options, checkin code, etc. This is roughly three and half minutes per edit, for eight edits per hour.</p>
	<p><P>So now, an edit cycle costs a total of four minutes, which doubles the number of edit opportunites. The greater the number of opportunities you have to introduce edits, the faster your progress. This, in my opinion, is one of the reasons teams using TDD go faster. They get similar feedback they would have received in a debug cycle, but it is compressed so much that it empowers the team. The team has so many opportunities to try something, they can afford to experiment with design changes, clean up code or simply move forward. Not only will the team go faster, but the resulting code is generally more flexible, resusable and readable. (I haven&#8217;t enough discussed the benefits of regression testing and its related cost savings.) </p>
	<p>So the when faced with people resistant to TDD, maybe the question isn&#8217;t why to use TDD, but how can you afford not to?</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/36/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>XP and Customer Tests: Is it fair?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/35</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/35#comments</comments>
		<pubDate>Thu, 11 Dec 2003 23:54:47 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/35</guid>
		<description><![CDATA[	Maybe the customer shouldn&#8217;t write the acceptance tests, or at least all of the acceptance tests. I know this sounds like heresy, especially coming from an XP coach. But let me explain&#8230;
	I&#8217;d like the customer to write the acceptance tests. I think they must be intimately involved in the acceptance testing of an application, as [...]]]></description>
			<content:encoded><![CDATA[	<p>Maybe the customer shouldn&#8217;t write the acceptance tests, or at least all of the acceptance tests. I know this sounds like heresy, especially coming from an XP coach. But let me explain&#8230;</p>
	<p>I&#8217;d like the customer to write the acceptance tests. I think they must be intimately involved in the acceptance testing of an application, as the customer is determing the features. But, within the XP literature and discussion groups, there is an emphasis on the customer&#8217;s providing the acceptance tests. Work cannot and should not begin until this happens. If the customer can&#8217;t define acceptance criteria for a feature, how can she expect a developer to fulfill her expecations.</p>
	<p>I think there is a small contradiction here. One reason for small iterations, an important agile and XP practice, is that it provides feedback, mitigating the &#8220;I&#8217;ll know what I want when I see it&#8221; syndrome. So, if the customer is inexperienced playing the role of an XP customer, she may not know how to provide acceptance tests. </p>
	<p>Consider a developer who is new to test driven development. In my experience, learning how to precisely define the expectations of functionality before you write the code can be a challenge. How do you test the layout of widgets on user interface? Should I test color and font? An XP coach know he must mentor developers when learning TDD. No one expects a developer to magically adopt this skill.</p>
	<p>So why do we expect the customer to magically have the ability to write acceptance tests? At least developers are trained in logical and cognitive activities; the customer may not be. </p>
	<p>Some customers are naturally adept at writing acceptance tests. Such a team can only benefit from such a customer. But what about the others? I think they should be trained, mentored, assisted and extended the same patience a developer would be when learning TDD. The feedback and experience of completed iterations should dvelop the customer&#8217;s skill at generating acceptance tests. </p>
	<p>There is another reason I don&#8217;t think it is fair to expect the customer to be soley responsible to write the acceptance tests. Frequently, the domain logic of a system has complex boundary cases and permutations that require careful analysis. Not all customers are comfortable or capable of this analysis. Developers could add a lot of support to the quality of the project, if they view this as their responsibility. (A skilled tester would probably be even better, but this is a different story.) I think the notion of an cohesive, collaborative team means all team members should support the goals and results of the project.  </p>
	<p>In practice, I know most XP teams and coaches will support the customer and acceptance tests when necessary. I am not proposing an excuse that allows the customer to shirk any responsibility. But I preceive a disconnect in the published attitutude of the XP community and reality on this topic.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/35/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Scrabble and Dummy Data Objects</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/34</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/34#comments</comments>
		<pubDate>Thu, 27 Nov 2003 11:55:38 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/34</guid>
		<description><![CDATA[	Lately, I&#8217;ve been trying to explain the reasons why dummy-data classes are a smell in software. Dummay Data classes are classes that do not have behavior, only data. 
	I thought of a different way to illustrate the problem, as the common arguments have not seemed sufficient lately.
	Consider scrabble. When someone presents a word that is [...]]]></description>
			<content:encoded><![CDATA[	<p>Lately, I&#8217;ve been trying to explain the reasons why dummy-data classes are a smell in software. Dummay Data classes are classes that do not have behavior, only data. </p>
	<p>I thought of a different way to illustrate the problem, as the common arguments have not seemed sufficient lately.</p>
	<p>Consider scrabble. When someone presents a word that is challenged, one of the first comments made is &#8220;Use &#8216;fazooloo&#8217; in a sentence.&#8221;  A response such as &#8220;I was playing scrabble and I was asked to use &#8216;fazooloo&#8217; in a sentence&#8221; is generally not appropriate. Besides being sarcastic, the sentence doesn&#8217;t convey anything about the meaning of the word. The questioned term was the object of the sentence and performed no action of its own. You could substitute any term and the sentence does not lose any meaning, but doesn&#8217;t improve either. </p>
	<p>A dummy data class is like a term that can only be used as an object in a sentence. If no sentence exists in which the dummy data class performs the action, it has no purpose but to be manipulated by others. This has various implications, such as encapsulation violations, but I think the sentence analogy simplifies the reaons to avoid dummy data classes. </p>
	<p>Martin Fowler has a bliki post about <a href="http://martinfowler.com/bliki/AnemicDomainModel.html">Anemic Domain Models</a>. One characteristic that makes a domain model anemic is the lack of behavior in the objects.  Furthermore, I think the domain objects must have <i>domain</i> behavior. </p>
	<p>This distinction can have subtle design implications. I worked on a system where we had an elabrorate domain model (or so we thought), but the classes where really dummy data classes. When I pointed this out, others on the project claimed that since the objects knew how to persist and load themselves from the database, that this was their behavior. But from the domain perspective, the objects did nothing. Furthermore, if you then look at the implemented design, there were other smells such as violdation of the Single Responsibility Principle, as the objects where part domain, part technical infrastructure.  The design of the system would be greatly improved by starting with the elimination of dummy data classes and following your nose from there. </p>
	<p>So, when designing your classes and their collaborations, make sure each class passes the <b>Scrabble Test</b>.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/34/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Marketing Agile Development</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/33</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/33#comments</comments>
		<pubDate>Mon, 03 Nov 2003 18:53:11 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Misc</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/33</guid>
		<description><![CDATA[	Brian Marick recently posted a blog entry noting the importance of marketing agile development to executive management. As stakeholders, management stands to gain the most from agile development.
	The timing of Brian&#8217;s post is somewhat coincidental, as this topic has been on the forefront of my mind. I think the next phase of generating agile adoption [...]]]></description>
			<content:encoded><![CDATA[	<p>Brian Marick recently posted a <a href="http://www.testing.com/cgi-bin/blog/2003/11/02#board-meeting">blog entry</a> noting the importance of marketing agile development to executive management. As stakeholders, management stands to gain the most from agile development.</p>
	<p>The timing of Brian&#8217;s post is somewhat coincidental, as this topic has been on the forefront of my mind. I think the next phase of generating agile adoption is to bring the campaign to management. It bothers me that I see mostly developers and technical professionals at conferences and very, very few members of management, particularly senior management. </p>
	<p>I&#8217;ve been discussing this topic with people much smarter than I, in particular my wife. She has an MBA and works in marketing. Based on my discussions with her, the following are some ideas for raising the visibility and adoption of agile development methods to senior management. </p>
	<h2>Audience</h2>
	<p>Executive and senior management, particularly CIO&#8217;s and CTO&#8217;s, should be the demographic of this marketing effort. This poses some challenges, as such managers are generally removed from the actual development efforts and don&#8217;t have much first-hand knowledge of the problems with traditional, heavy-weight methods. Making matters worse, middle management frequently withholds details about complications and, at times, reports a more successful depiction of projects than reality. Middle managers (those in the trenches) are the real &#8220;customers&#8221; of an agile process, but they are invisible; they have low public visibility and are a needle-in-a-haystack for a marketing plan. </p>
	<p>Part of the challenge will be educating senior managers, while &#8220;saving face&#8221; for the middle managers, as we ultimately need their support.</p>
	<h2>Brand</h2>
	<p>Brand, brand, brand. It is the key to marketing. A brand defines the expectations of the vendor / product for the customer. It is the reason you choose product A over product B. For example, Nike caters to the &#8220;hard-core&#8221; athlete, be it recreational or professional. Volkswagen is about the &#8220;serious driver&#8221;. Such strong psychological and emotional elements are quite common in consumer brands, but they can have a place in business brands as well.</p>
	<p>This is the first action item for the Agile Alliance: define the brand of agile development. More precisely, what is agile development? The answer must be succinct and precise. It may vary for different audiences, but the core message must be the same.</p>
	<p>This is a major challenge for the agile community. There is much debate over the question of &#8220;what defines agile?&#8221; and &#8220;which methods qualify as agile?&#8221;. The goals and ideas of the Agile Manifesto, Agile Alliance and agile community have developed and are continually being revised. </p>
	<p>But in order to have a brand, we must appear to speak with one voice, with one consistent overriding point of view. A brand defines the product. Consider the situation in which a business is choosing among multiple vendors. An organization will not trust a vendor whose message waivers and doesn&#8217;t appear to have its act together.</p>
	<p>Furthermore, the agile brand needs to be about more than ROI or business value. How would this be different than the claims of any other methodology, particularly the high ceremony, traditional processes? The ways in which agile development is different are important, but so are the commonalities of agile development and any other sound business theory or practice. (We can&#8217;t have claimed to re-invent the wheel; business types will assume they know business better than we do.)</p>
	<p>This doesn&#8217;t mean there must be one agile methodology. The Agile Alliance can be the &#8220;parent company&#8221; that has multiple product offerings, each appropriate to a different context. But the overall message must be clear and consistent. We must determine the 30-second elevator conversation that answers the question &#8220;Who is the Agile Alliance and what is Agile Development?&#8221;</p>
	<h2>Getting Started</h2>
	<p>Many people don&#8217;t know the Agile Alliance even exists. Its important that people associate agile development with the Agile Alliance.</p>
	<p>I think the trade shows, conferences and journals that cater to CIO&#8217;s/CTO&#8217;s are a good start. I don&#8217;t know what efforts have already been directed toward this, particularly sponsored by the Agile Alliance. </p>
	<p>I know there was an executive track at <a href="http://www.agiledevelopmentconference.com">ADC</a> this summer. I don&#8217;t know how successful it was. I think tutorials, seminars and workshops targeted to executives are a good idea. I think the agile community should invite any contacts they have in executive management.</p>
	<p>I also think we should &#8220;recruit&#8221; the help of those in the business world. For example, Rob Austin is a Harvard Business School professor who has a strong interest in agile development and his research is about software development. I believe many in the agile community have a good relationship with him (among others). These individuals can be valuable resources.</p>
	<h2>Information Resources</h2>
	<p>Assuming we get the attention of executive management, we need to be prepared to provide information that is relevant to them and directly addresses their concerns.</p>
	<p><b>Agile Roadmap</b><br/></p>
	<p>There needs to be a catalog of agile practices and some guidelines regarding their approach. The roadmap section of the Agile Alliance website needs to be flushed out. (I happen to have a particular interest in the is topic, as does <a href="http://www.berczuk.com/wiki/bin/view/Agile/AgilePatterns">Steve Berczuk</a>.) </p>
	<p><b>Statistics</b><br/></p>
	<p>Executives will want metrics that quantify ROI of agile development over other methods, adoption rates, success rates, etc. Information from the <a href="http://www.standishgroup.com">Standish Group&#8217;s </a>Chaos report would probably be useful.</p>
	<h2>Challenges</h2>
	<p>The Agile Alliance is a non-profit group that doesn&#8217;t control or directly sell agile methods. Therefore, the requirements are similar to those for the consortium that markets milk.</p>
	<p>I would expect an executive to request referrals from the Agile Alliance and she would expect the referred consultant (or firm) to deliver an &#8220;official&#8221; agile development process. Once you build the brand, it is important to maintain that relationship and protect the trust and expectations of the market. </p>
	<p>This raises some concerns. How should the Agile Alliance provide endorsements? (I think some form of a referral service will be necessary). Questions about certification are a natural progression, which opens a huge debate. For example, a few months ago many in the agile community (including myself) went on the record to oppose SWEBOK. Will we eventually need to form our own version of SWEBOK? </p>
	<p>This is somewhat a moot point. There are many strong forces already trying to standardize the industry. It might be negligent of the Agile Alliance to not cast its hat in the ring. This also becomes more important as agile development goes mainstream; most existing practitioners of agile development understand the principles of agile and faithfully practice it. I fear many mainstream adopters will claim to be agile and not understand it.</p>
	<p>The challenge for the Agile Alliance is to remain &#8220;agile&#8221; and not bureaucratic, while maintaining some degree of conformity and unity. Brand integrity is necessary for successful marketing.</p>
	<p>These are just some ideas.  I think some attempts have already been made to market agile development to executive management. I think devising a marketing strategy raises many issues that the agile community must face and make decisions about. This will challenge us, as formal organization general complicates a good idea.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/33/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Agile Coaching: Some Practical Guidelines</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/32</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/32#comments</comments>
		<pubDate>Wed, 15 Oct 2003 22:21:15 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/32</guid>
		<description><![CDATA[	Currently, I am working with a team that is transitioning to XP. Besides coaching the team, I am coaching one individual to be a coach so he can eventually be the team&#8217;s coach. As a result, I have been thinking a lot about the nature of coaching. In an earlier blog post, I noted some [...]]]></description>
			<content:encoded><![CDATA[	<p>Currently, I am working with a team that is transitioning to XP. Besides coaching the team, I am coaching one individual to be a coach so he can eventually be the team&#8217;s coach. As a result, I have been thinking a lot about the nature of coaching. In an earlier <a href="http://christiansepulveda.com/blog/archives/000034.html">blog post</a>, I noted some of my thoughts on the abstract and theoretical components of coaching. Here, I am sharing (for what its worth) some practical guidelines for an agile coach.</p>
	<h3>Identify Expectations</h3>
	<p>Start by identifying stakeholders. I consider a stakeholder to be anyone that has an interest in the outcome of the project or will be a participant. I include developers, managers, testers, marketing staff, technical writers, and others. For each member of this list, I try to identify what are the expectations and goals of the member (or group). I prioritize the expectations and assign a weighting. I actually treat the expectations as XP stories. I will use 3&#215;5 cards; I track the member or group that &#8220;sponsored&#8221; the story, its weighting (or cost), and priority. (I know there are other techniques, such as some multi-letter acronym matrix; these alternates always struck me as too complicated). </p>
	<h3>Take an Agile Approach</h3>
	<p>Without getting too metaphysical, I take an agile approach to coaching. (See this <a href="http://christiansepulveda.com/blog/archives/000032.html">blog post</a> on qualifications of an agile process.) </p>
	<p><b>feedback</b><br/></p>
	<p>Retrospectives are an invaluable feedback mechanism. They should be done at the end of each iteration and the feedback received should be enacted upon.</p>
	<p><a href="http://www.jrothman.com">Johanna Rothman</a> suggests one-on-one meetings with all team members on a consistent basis. Depending on team size, this can range from every week to every few weeks, but I think the more frequent the better. Fifteen minutes to a half hour is sufficient, but the individual attention will be appreciated It provides a more secure and comfortable opportunity for feedback. I even suggest conducting these sessions offsite when possible or over a meal (or both).</p>
	<p><b>discovery</b><br/></p>
	<p>Returning to the gathering of expectations and identification of stakeholders, a coach should regularly review these lists and evaluate if the expectations are being satisfied, how have they changed and who are the current stakeholders.</p>
	<p><b>unencumberment</b><br/></p>
	<p>Besides the expectations of stakeholders, try to identify their primary activities and support these activities. In Scrum, the Scrum Master insulates and protects the developers so they can work efficiently. I think the coach should try to do this for the entire team. Unfortunately, this can be complicated to achieve as frequently the needs of one stakeholder are in conflict with that of another (Remember, developers and management are stakeholders). The expectation list should give some guidance for evaluating compromises and tradeoffs. </p>
	<p><b>sustainable pace</b><br/></p>
	<p>Regularly assess the team&#8217;s progress. When possible, try to assist, mentor or in some way help any team member that is having difficulties. Look for buy-in for the process and build on it. Hopefully these early adopters will help champion the cause as a team needs to take ownership over their process. Otherwise they won&#8217;t maintain it or maximize its effectiveness.</p>
	<p><b>synergy</b><br/></p>
	<p>Each of the suggestions supports each other. Retrospectives help discover expectations and needs, etc.</p>
	<p>Ultimately the coach is part leader and part manager. In my opinion, the ideal coach doesn&#8217;t have to do much as time goes on; the team chugs along by their own steam. </p>
	<p>This is particularly fun for the XP coach as you do all this and write code too! (Context and expectations of the coach will determine the balance of activities the coach will do.)</p>
	<p>(Ron Jefferies and Bill Wake conduct a nice tutorial on being a coach. There is a good book list that can be found at <a href="http://www.xp123.com/xplor/xp0307/index.shtml">http://www.xp123.com/xplor/xp0307/index.shtml</a>.)</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/32/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Agile Coaching: The Key is to Make Small Moves</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/31</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/31#comments</comments>
		<pubDate>Wed, 15 Oct 2003 21:06:56 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/31</guid>
		<description><![CDATA[	I think the mission of an agile coach is to keep a project on the road to success. He monitors the effectiveness of the team and makes adjustments as necessary. 
	My father compares parenting to bumper bowling; a parent&#8217;s job is to keep the ball out of the gutter. But, if their child is not [...]]]></description>
			<content:encoded><![CDATA[	<p>I think the mission of an agile coach is to keep a project on the road to success. He monitors the effectiveness of the team and makes adjustments as necessary. </p>
	<p>My father compares parenting to bumper bowling; a parent&#8217;s job is to keep the ball out of the gutter. But, if their child is not approaching the edge, the parent should let the child find his own way.</p>
	<p>Similarly, a good coach provides guidance but allows (and hopefully encourages) a team to find their own identity. It&#8217;s critical for a team to take ownership of its own process if they are to maintain and adopt it. In my experience, a team will not maintain or effectively utilize an agile process, over the long term, if the coach is the only champion of the process.</p>
	<p>Returning to the parenting analogy, the early stages of a child&#8217;s development are where the parent&#8217;s role is the clearest; the world is fairly black and white. But as the child develops into a teenager and young adult, the situations, decisions and consequences are more complicated. </p>
	<p>The same is true for an agile coach. In the early stages of the coach&#8217;s involvement, the team is the most willing, as they will ever be to take advice on faith. The coach can demonstrate techniques, discuss experiences and respond to questions; but the expectations of the coach are largely about process. At this time, the coach is relying on her own abilities to communicate the effectiveness and motivation of agile processes; this is the most amount of control the coach will have.</p>
	<p>But as with the developing child, things get complicated. As the project ensues, the expectations quickly shift from process to results. Where the customer was happy to see any piece of working software in the beginning, she now has expectations of high productivity. The coach is now relying on the aptitude of the team; the coach has less direct control and must mentor the team such that they produce effectively.</p>
	<p>As the expectations of the team increase, credibility and trust are necessary for effective coaching. Any latitude the coach will have with the team, be it management or developers, will be based on the experience of the team with the coach. It is a form of currency; successes are credits and problems are debits. </p>
	<p>Each adjustment the coach makes is also a debit. The more direct (i.e. dictatorial or authoritative) the action, the larger the debit; subtle actions cost less. The coach has to be careful not to bankrupt herself; the skillful and wise coach judiciously spends in order to maintain reserves. A team is far more likely to trust a coach when she directly and obviously intervenes if they don&#8217;t feel she is constantly crying wolf.</p>
	<p>The master coach facilitates success by influence and suggestion. A coach shouldn&#8217;t issue mandates. A good coach is a catalyst and his coaching, at times, is imperceptible. But a team usually knows when they have a good coach.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/31/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Agile Process Refactoring</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/30</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/30#comments</comments>
		<pubDate>Thu, 25 Sep 2003 19:49:22 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/30</guid>
		<description><![CDATA[	I used to be plagued by nagging concerns about certain omissions and shortcomings of extreme programming (XP). Over recent months, I have come to the conclusion that my thinking on the topic was flawed; I used to criticize XP for not addressing a variety of issues such as the integration of testers, domain modeling, story [...]]]></description>
			<content:encoded><![CDATA[	<p>I used to be plagued by nagging concerns about certain omissions and shortcomings of extreme programming (XP). Over recent months, I have come to the conclusion that my thinking on the topic was flawed; I used to criticize XP for not addressing a variety of issues such as the integration of testers, domain modeling, story generation, etc. </p>
	<p>It is not that I wanted XP to be an overblown process, specifying roles and practices for everything related to development. But, for example, there is an assumption that the customer just knows how to generate good stories (those with high business value) in XP. The customer creates stories, prioritizes them, and knows when to extend, revise or remove stories from the project. There is no guidance for the customer as to how to be a &#8220;good&#8221; customer. </p>
	<p>A thought solidified for me in a recent <a href="http://christiansepulveda.com/blog/archives/000026.html">blog post</a>, regarding the role of testers in XP. I realized that XP is a coding / developer centric process. Eight of its twelve practices are directly about the creation of code; the remaining four support the developers in their work. Story generation and other concerns are outside the scope of XP. </p>
	<p>In my opinion, this is a strength, rather than a shortcoming. Software development is about producing software, so it is natural to start with a process that is about generating code. XP is lean and focused on this task; there is little fluff. It allows the project team the freedom to add complimentary processes that support other activities and roles that may become necessary or require assistance. </p>
	<p>For example, scrum (a project management centric process) is compatible with XP. For teams that have greater project management needs (or an available project manager), scrum can be added to the development process. But if it&#8217;s not needed, then there is no need to be encumbered by the extra process.</p>
	<p>I think this encourages a &#8220;on-demand, just in time&#8221; addition of process. The advantage of this approach is that the development process is kept lean. Starting with RUP for is like managing your development process in waterfall fashion; you preemptively specify all your project&#8217;s process requirements and devise a design. </p>
	<p>Alternatively, active process refactoring, facilitated by techniques such as retrospectives, allow the development process to evolve with the needs of the team and their context. This allows a team to adhere to the YAGNI principle (You Ain&#8217;t Gonna Need It) of simple and lightweight process. </p>
	<p>Unfortunately, process refactoring does not have the benefit of automated unit test / change detection suites. In XP, such tools make refactoring safe; you get immediate feedback as to what you broke and what dependencies exist; process refactoring can be riskier.</p>
	<p>For me, this idea feels right; it comforts and helps alleviate many of the concerns I have regarding <i>applied</i> agile development. I think the next step is to identify process &#8220;smells&#8221; and their possible refactorings. (I have done some work related to this. See my <a href="http://www.christiansepulveda.com/cgi-bin/moinwiki/moin.cgi/ImplementingAgileProcesses">Implementing Agile Process</a> wiki section or the <a href="http://www.berczuk.com/wiki/bin/view/Agile/AgilePatterns">Agile Process Pattern Catalog</a>.) </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/30/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>What qualifies as an agile process?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/29</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/29#comments</comments>
		<pubDate>Fri, 12 Sep 2003 18:31:37 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/29</guid>
		<description><![CDATA[	I have been struggling with this question for some time. I don&#8217;t think I have an answer, but I do have an idea. An agile process is a process that promotes:
	
	discovery
	Requirements, risks, architectures, strengths, weaknesses, proficiency, and throughput are examples of project and team elements that emerge or are discovered in an agile process. 
	unencumberment
	Either [...]]]></description>
			<content:encoded><![CDATA[	<p>I have been struggling with this question for some time. I don&#8217;t think I have an answer, but I do have an idea. An <i>agile process</i> is a process that promotes:<br/></p>
	<dl>
	<dt>discovery</dt>
	<dd>Requirements, risks, architectures, strengths, weaknesses, proficiency, and throughput are examples of project and team elements that emerge or are discovered in an agile process. </dd>
	<dt>unencumberment</dt>
	<dd>Either get out of the way of X or keep Y out of your way. Remove anything that hinders your workflow and the progress and success of the project.</dd>
	<dt>feedback</dt>
	<dd>An agile process provides constant feedback along many dimensions of the project. This may take the form of an XP team&#8217;s velocity, dependencies during refactoring from unit tests,  Scrum Burndown Chart, or the frequent evaluation of software by the customer from frequent iterations. </dd>
	<dt>sustainable, consistent pace </dt>
	<dd>The month sprint of scrum, 40-hour XP workweek are examples.</dd>
	<dt>synergy</dt>
	<dd>The practices support each other. For example, collective code ownership and pair programming support each other in XP.</dd>
	</dl>
	<p>Besides the &#8220;by definition&#8221; consideration,  existing agile processes, such as XP and Scrum, fit the above guidelines. I have not used Mary Poppendieck&#8217;s Agile Customer Toolkit or Lean Software Development Toolkit, nor have I been part of a Feature Driven Development project, though I think they also conform to my guidelines.  </p>
	<p>Furthermore, I think the <i>agility</i> of an agile process is a measure of how the process contributes to the efficiency and productivity of the project and team. This contribution doesn&#8217;t imply success, but should promote speed and responsiveness.</p>
	<p>Unfortunately, I think it is very hard to measure agility; it is inherently qualitative and context biased . For example, I have always felt that Feature Driven Development isn&#8217;t as agile as XP. I think the reason is one of encumberment. The documentation and project mangement aspects of FDD seem to encumber the project. However, you can make the argument that FDD may better promote the process of discovery and management, from the customer&#8217;s perspective. XP provides little guidance for the customer as to the discovery of stories that provide the greatest business value. </p>
	<p>I feel these guidelines offer a different perspective than the elements of the manifesto. For example, communication and collaboration are desirable because they promote discovery and provide feedback. As I consider the experiences I would characterize as &#8220;agile&#8221;, I am better able to articulate their &#8220;agility&#8221; in terms of these guidelines. </p>
	<p>Armed with this idea, I will now reconsider my thoughts on such questions as &#8220;what is Agile Testing?&#8221;</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/29/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Software Architects and XP</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/28</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/28#comments</comments>
		<pubDate>Fri, 05 Sep 2003 18:53:42 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/28</guid>
		<description><![CDATA[	I have been spending a lot of time thinking about testers and XP lately. It has caused me to start thinking about other typical roles and their place in XP. So, what about software architects and XP? 
	The short answer is that they have no place. I say this with some confidence, as I used [...]]]></description>
			<content:encoded><![CDATA[	<p>I have been spending a lot of time thinking about testers and XP lately. It has caused me to start thinking about other typical roles and their place in XP. So, what about software architects and XP? </p>
	<p>The short answer is that they have no place. I say this with some confidence, as I used to consider myself a software architect. (Over the last few years I have become less and less comfortable with associating myself with the moniker.)</p>
	<p>The incompatibility comes from the basic assumption software architecture makes: you can successfully design an architecture for a system in upfront fashion. Besides being in direct contradiction to the practices and principles of XP, it is practically flawed. Software needs to change. In my experience, most people are very hesitant to change that which they have made large upfront investments in. I&#8217;ve seen (and at times unfortunately architected) systems where the architecture became an impediment; it had to be overcome and accommodated as the system evolved. </p>
	<p>This doesn&#8217;t mean software architects should be fired from an XP project. They will, however, have to change their perspective and work habits. On an XP team, they will be &#8220;just&#8221; another developer. Their architecture expertise will be utilized as they pair with other developers. </p>
	<p>In my opinion this is actually liberating for the whole team. First, there isn&#8217;t the elitist notion of hierarchal roles on the team. Furthermore, as with a technical lead, there is an assumption and pressure that the architect knows all the answers. In XP, this myth doesn&#8217;t have to be maintained; the architect can now offer their advice and expertise when appropriate and defer to that of others when appropriate. In XP the architecture evolves and is owned by the team, not one person or group. </p>
	<p>I can sympathize with the allure of software architecture. It can be very satisfying to create an elegant design solution for software. But it is also frustrating and stressful to watch the once-pristine architecture get band-aided and fail as needs change. Ultimately, I am a pragmatist. I would much rather construct working software than pretty diagrams.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/28/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Comments in Code 2: Another consideration</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/27</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/27#comments</comments>
		<pubDate>Sat, 30 Aug 2003 20:36:09 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/27</guid>
		<description><![CDATA[	Brian Marick, in a related blog entry, discusses an interesting  perspective on the issue of comments in source code. As he frequently does, Brian brings another dimension and perspective to the topic.  Brian discusses the expectations of your audience and provides an example of code in C, that if directly translated to Lisp, [...]]]></description>
			<content:encoded><![CDATA[	<p>Brian Marick, in a related <a href="http://www.testing.com/cgi-bin/blog/2003/08/29#reader-response">blog entry</a>, discusses an interesting  perspective on the issue of comments in source code. As he frequently does, Brian brings another dimension and perspective to the topic.  Brian discusses the expectations of your audience and provides an example of code in C, that if directly translated to Lisp, is not <i>too</i> easy to understand. The &#8220;mis&#8221;understanding exists because of the generqally accepted style for Lisp code, which is different from C code.</p>
	<p>This caused me to think of another example. Lately, I work with C#, but still work with Java from time to time. Java has anonymous inner classes, C# does not. In many cases, anonymous inner classes improves the clarity and simplicity of the code. Given the similarities between C# and Java, I tend to read Java code with my C# hat on, which always causes me to pause when I read code that uses anonymous inner classes.  </p>
	<p>Should this code have comments, explaining the intention and use of the anonymous inner class? From one reader&#8217;s point of view, the code may be clean and not need comments, but another reader, as in my example, might benefit from them. </p>
	<p>However, I think it is a death spiral if you attempt to accomodate too many perspectives. Do you comment Java for C# readers? What about Java for Ruby, Lisp, Prolog, Python&#8230;.readers? </p>
	<p>Let&#8217;s assume you only consider the experienced Java reader. On the <a href="http://groups.yahoo.com/group/refactoring">refactoring group</a>, I see many different opinions regarding the best style and constructs for any particular code snippet.  </p>
	<p>I don&#8217;t think this justifies source code comments. Comments assume that the language (English for example) and the prose is readable by all, or at least more than the code.  (There is also the issue of keeping the comments in synch with the code as it changes, which is one of my primary practical reasons against comments.) </p>
	<p>These considerations cause me to realize something: both the definition of clean code and explanatory comments make assumptions about the reader, her context and her experience. This is true about any writing, but it is particularly complicated for the software developer. The expected future reader can vary dramatically but will probably be faced with some practical reason to quickly understand and use (modify or integrate) the source code and accompanying comments. </p>
	<p>This leaves me with more questions than any conclusions. Though I still think a developer should challenge himself to improve his code before he writes a comment, I wonder for whom should the code be made more readable?</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/27/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Implementing Agile Practices</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/26</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/26#comments</comments>
		<pubDate>Thu, 28 Aug 2003 12:15:52 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/26</guid>
		<description><![CDATA[	I have  been ranting for a while (see this post) that the agile development literature is severely lacking. I am mostly concerned with the actual implementation of an agile process and all the real world issues that arise. 
	&#8220;How do you train a customer to be a good XP customer?&#8221; , &#8220;How can you [...]]]></description>
			<content:encoded><![CDATA[	<p>I have  been ranting for a while (see this <a href="http://christiansepulveda.com/blog/archives/000005.html">post</a>) that the agile development literature is severely lacking. I am mostly concerned with the actual implementation of an agile process and all the real world issues that arise. </p>
	<p>&#8220;How do you train a customer to be a good XP customer?&#8221; , &#8220;How can you be a good coach?&#8221;, or &#8220;How do testers fit into XP?&#8221; are examples of questions that frequently arise when a team embarks on agile development. Most of these questions are very context specific, so I think it is premature to make any proclamations about them. However, there is a variety of relevant experience that could be useful to those considering such questions.</p>
	<p>So, rather than continuing to whine, I am trying to do my part for a solution. I have set up a wiki at <a href="http://www.christiansepulveda.com/cgi-bin/moinwiki/moin.cgi/ImplementingAgileProcesses">http://www.christiansepulveda.com/cgi-bin/moinwiki/moin.cgi/ImplementingAgileProcesses</a></p>
 where I have started to catalog my thoughts and experiences regarding these issues. </p>
	<p>I am also mining the various Yahoo groups (and other sources) on agile development and adding links from the wiki to relevant discussions. </p>
	<p>I hope the wiki will be a resource for those implementing an agile process. Who knows, maybe it will grow into an interesting article or, more  ambitiously, a book.</p>
	<p>I encourage you to browse the wiki. Email me if there is something you think is missing or feel free to add it. (Please just follow the wiki guidelines on the front page.)</p>
	<p>P.S. There is a related project, at <a href="http://www.berczuk.com/wiki/bin/view/Agile/AgilePatterns">http://www.berczuk.com/wiki/bin/view/Agile/AgilePatterns</a>. It is a catalog of agile process patterns. It is a topic I have been interested for some time. Unfortunately, we haven&#8217;t made a lot of progress (at the time of this post), but there should be lots of entries soon.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/26/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Comments in Code</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/25</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/25#comments</comments>
		<pubDate>Tue, 26 Aug 2003 12:10:08 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/25</guid>
		<description><![CDATA[	I was reading a rather long winded comment in some source code and I started to hear the voices in my head rant about comments in code. This particular comment was written by a rather bright individual who insists on commenting his code. (To make matters worse, he uses C# regions to &#8220;hide&#8221; particularly long [...]]]></description>
			<content:encoded><![CDATA[	<p>I was reading a rather long winded comment in some source code and I started to hear the voices in my head rant about comments in code. This particular comment was written by a rather bright individual who insists on commenting his code. (To make matters worse, he uses C# regions to &#8220;hide&#8221; particularly long comments, reducing the comments value.)</p>
	<p>Not all comments are bad. But they are generally deodorant; they cover up mistakes in the code. Each time a comment is written to explain what the code is doing, the code should be re-written to be more clean and self explanatory. If you are unsure how to make it more clear, get help .(Hopefully you were already pairing. If not, this is an excellent execuse to get another pair of eyes.)  </p>
	<p>Comments are appropriate many times. For example, comments can be used to note areas of code that need refactoring, but for practical reasons are being left as is.  They may warn against changes, as a section of code may have been tweaked for performance reaons and shouldn&#8217;t be changed. (Or at least the decision to change it shouldn&#8217;t be made lightly.) They can note design decisions and tradeoffs made. </p>
	<p>For example, I recently had a situation where 6 different possible actions can be invoked depending on the state of the object. This screams polymorphism to me, but I decided it would be overkill, in this case. The specifics are not relevant, but I commented the source code to indicate this decision. If someone decides to refactor it later, so be it. </p>
	<p>So, before you use a comment for explaining complicated code, please think about a way to improve the code.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/25/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Simplicty is Hard</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/24</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/24#comments</comments>
		<pubDate>Tue, 26 Aug 2003 11:56:55 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
	<category>Random Thoughts</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/24</guid>
		<description><![CDATA[	 Any intelligent fool can make things bigger, more complex, and more  violent. It takes a touch of genius&#8211;and a lot of courage&#8211;to move in  the opposite direction. &#8211;Albert Einstein
	I have always believed in Einsten&#8217;s quote. There is a related one:
	Everything should be as simple as possible but not simpler.-Alber Einstein
	The two quotes [...]]]></description>
			<content:encoded><![CDATA[	<blockquote><p> Any intelligent fool can make things bigger, more complex, and more  violent. It takes a touch of genius&#8211;and a lot of courage&#8211;to move in  the opposite direction. &#8211;Albert Einstein</p></blockquote>
	<p>I have always believed in Einsten&#8217;s quote. There is a related one:</p>
	<blockquote><p>Everything should be as simple as possible but not simpler.-Alber Einstein</p></blockquote>
	<p>The two quotes embody a basic software design philosophy that, when applied, results in good things: simple code is clear, maintainable, reusable, and extendable. But as Einstein notes, simplicity is hard. </p>
	<p>This is is why Test Driven Development (TDD) is beautiful. When practiced with discipline, automated tests guide the programmer to simplicty; they provide a roadmap to nirvana. (Alright, this is a bit too flowery. I am starting to sound like an XP evangelist)</p>
	<p>Achieving simplicty is still hard. But for software, TDD makes it a little easier.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/24/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Testers and XP: Maybe we are asking the wrong question</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/23</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/23#comments</comments>
		<pubDate>Tue, 26 Aug 2003 11:13:15 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/23</guid>
		<description><![CDATA[	Upon recent refelections of Agile Fusion and the corresponding forum discussions, I&#8217;ve had a couple of &#8220;aha&#8221; moments. 
	We have been asking the question, &#8220;What is the role of testers in XP?&#8221;. Perhaps this is the wrong question. It is a little too general and implies its answer is prescriptive and would be a proclamation. [...]]]></description>
			<content:encoded><![CDATA[	<p>Upon recent refelections of Agile Fusion and the corresponding forum discussions, I&#8217;ve had a couple of &#8220;aha&#8221; moments. </p>
	<p>We have been asking the question, &#8220;What is the role of testers in XP?&#8221;. Perhaps this is the wrong question. It is a little too general and implies its answer is prescriptive and would be a proclamation. </p>
	<p>A better question might be &#8220;how can a tester contribute to an XP project?&#8221;. A slight difference in wording has significant difference in implication. It is open ended; it is not prescriptive but exploratory. It is the type of thing <a href="http://www.xptester.org">Lisa Crispin</a> addresses in her book. </p>
	<p>Still, I think there is more to this. One element of XP that is appealing is its simplicity. Furthermore, I am amazed as to how many contexts can be &#8220;reduced&#8221; (one of the &#8220;aha&#8221; moments, see this <a href="http://christiansepulveda.com/blog/archives/000025.html">post</a>) so that XP is appropriate. But, XP doesn&#8217;t address all areas of software development; XP is developer and code centric. </p>
	<p>Metaphor, Simple Design, Automated Testing, Refactoring, Pair Programming, Collective Ownership, Continuous Integration and Coding Standards are directly about coding. The remaining practices (Planning Game, Small Releases, Onsite Customer and 40-hour Week) are about either staying out of the programmers way so they can code or improving communication about what they are going to code. </p>
	<p>Anything that is outside the realm of &#8220;coding&#8221; is not really addressed by XP and I don&#8217;t think we should try to change XP to address these other things. I think it would hurt more than help; it would complicate XP and is beyond XP&#8217;s intention. </p>
	<p>But, there are other agile practices that address these other concerns and work in harmony with XP. Scrum is the best example. Scrum is about project management, not coding. When I am asked about the role of project managers in XP, I suggest scrum. Scrum is another process that collaborates with XP; it doesn&#8217;t really change or extend XP. I think this is a key reason developers don&#8217;t have allergic reactions to scrum. It doesn&#8217;t get in our way and we can pretty much ignore it. </p>
	<p>But scrum is great for the customer and project manager; it helps deal with many of their concerns. So, I think we should consider what would be an agile process for testing, or rather figure out what is &#8220;agile testing&#8221;. </p>
	<p>I cringe a bit even as I type &#8220;agile testing&#8221;, as there has been some disagreement already over its definition. Perhaps a different name will be better, but I am specifically looking for a process, framework or practice that adheres to the following guidlines:</p>
	<ul>
<li>is consistent with the agile manifesto</li>
	<li>will complement, not impair, XP</li>
</ul>
	<p>I think there is enough experience among people like <a href="http://www.testing.com">Brian Marick</a>,  <a href="http://www.io.com/~wazmo/blog/">Brett Pettichord</a>, <a href="http://www.xptester.org">Lisa Crispin</a>,  <a href="http://www.satisfice.com/">James Bach</a>,  <a href="http://blackbox.cs.fit.edu/blog/andy/">Andy Tinkham</a>, <a href="http://blackbox.cs.fit.edu/blog/kaner">Cem Kaner</a>, <a href="http://www.qualitytree.com/">Elisabeth Hendrickson</a>, and others (sorry if I left anyone out), that if you were to mine your experience, you probably could come up with some ideas and patterns that would address the above. I think a lot of Brian&#8217;s posts to his <a href="http://www.testing.com/cgi-bin/blog/2003/08/21#agile-testing-project-1">blog</a>, are exploring this.</p>
	<p>Part of the confusion for me has been the scope of testing. One dimension of testing is directly related to coding, and these facets can benefit from tester/programmer pairing. But so much of testing is not about coding, but exploring risk, for example. These &#8220;para-coding&#8221; activities and goals are outside the scope of XP, but could complement XP and therefore make for a more productive team and a successful project. </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/23/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>&#8220;XP will never work at my job&#8221;: Maybe it can?</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/22</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/22#comments</comments>
		<pubDate>Tue, 26 Aug 2003 11:03:59 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/22</guid>
		<description><![CDATA[	I frequently read and hear about claims that &#8220;XP won&#8217;t work for us&#8221; or &#8220;I can&#8217;t see how we could do XP&#8221;. XP isn&#8217;t appropriate for every development context, but it works in suprisingly more settings than it may first seem.
	There is a mathematicl technique known as reductions that I think provides a nice metaphor [...]]]></description>
			<content:encoded><![CDATA[	<p>I frequently read and hear about claims that &#8220;XP won&#8217;t work for us&#8221; or &#8220;I can&#8217;t see how we could do XP&#8221;. XP isn&#8217;t appropriate for every development context, but it works in suprisingly more settings than it may first seem.</p>
	<p>There is a mathematicl technique known as <b>reductions</b> that I think provides a nice metaphor for this problem. Reductions are a theorem proving technique, in which you convert an existing problem to another problem. The other problem, which is hopefully simpler, is now the one you provide the proof for and therefore show that the given solution can be extended to the original problem. </p>
	<p> There are many contexts where people assume you can&#8217;t use XP. But if you try to find a <i>reduction</i> for the context, you frequently can filter out a lot of noise and complexity, such that you can see how the context can be simplified and XP can be used. </p>
	<p>If nothing else, the process of thinking about your context from a different perspective will probably expose assumptions and areas for improvement.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/22/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Naked CRC</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/21</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/21#comments</comments>
		<pubDate>Thu, 14 Aug 2003 16:22:05 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Software Development</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/21</guid>
		<description><![CDATA[	At Agile Fusion, Michael Feathers demonstrated a technique he learned from Ron Jefferies, that Ron called Ironman CRC. While at Agile Fusion, a few of us used the term Naked CRC, which I think is much better as it is more memorable and better describes the technique. 
	This is really hard to describe unfortunately. It [...]]]></description>
			<content:encoded><![CDATA[	<p>At Agile Fusion, Michael Feathers demonstrated a technique he learned from Ron Jefferies, that Ron called Ironman CRC. While at Agile Fusion, a few of us used the term Naked CRC, which I think is much better as it is more memorable and better describes the technique. </p>
	<p>This is really hard to describe unfortunately. It is much easier to demonstrate. The idea is that you layout index cards, without anything written on them, as you describe basic collaborations of the system. The cards serve as a visual guide to your discussion. The key idea is that you only focus on a few classes / objects in the collaboration. Besides making the discussion easier to follow, using only a few classes allows people to follow the significance of the cards, as they have nothing written on them. I like this because it forces me to keep things simple when I use Naked CRC. If someone  tells me &#8220;Wait, what kind of object is this card?&#8221;, I realize that I have probably over complicated the example. </p>
	<p> I have modified the technique to use multi-colored index cards. I bought a pack of index cards that came in four colors. (Incidentally, in college I learned about four color maps and how four colors is actually sufficient to draw any map without having any two adjacent entities be the same color. So, four colors works well with Naked CRC). I find the colors are easier for people to keep track of the model being shown, without resorting to writing on the cards and making things too complicated. </p>
]]></content:encoded>
			<wfw:commentRSS>http://www.christiansepulveda.com/agileblog/archives/21/feed/</wfw:commentRSS>
	</item>
		<item>
		<title>Nothing is Ever Obvious</title>
		<link>http://www.christiansepulveda.com/agileblog/archives/20</link>
		<comments>http://www.christiansepulveda.com/agileblog/archives/20#comments</comments>
		<pubDate>Wed, 23 Jul 2003 07:18:27 +0000</pubDate>
		<dc:creator>csepulv</dc:creator>
		
	<category>Random Thoughts</category>
		<guid>http://www.christiansepulveda.com/agileblog/archives/20</guid>
		<description><![CDATA[	While a freshman in college, I took an introductory physics class where one of the professors, though a really nice person, insisted on using the adjective &#8220;obvious&#8221; to describe most concepts. Every now and then, something was &#8220;more or less clear&#8221; or &#8220;relatively straightforward&#8221;.  A few of my friends and I would ask each [...]]]></description>
			<content:encoded><![CDATA[	<p>While a freshman in college, I took an introductory physics class where one of the professors, though a really nice person, insisted on using the adjective &#8220;obvious&#8221; to describe most concepts. Every now and then, something was &#8220;more or less clear&#8221; or &#8220;relatively straightforward&#8221;.  A few of my friends and I would ask each other if anyone understood any of the material presented, much less found it obvious. We were lost and relied on the explanations of our teaching assistant to help. (I must digress for a moment. David Bear, the teaching assistant in this story, is one of the most intelligent people and competent teachers I have ever met. He is amazing.) </p>
	<p>We were so lost that we resorted to keeping tallies during lecture. One section of the audience would track the word &#8220;obvious&#8221;, others would track the &#8220;more or less clears&#8221;, etc. We finally asked David, the teaching assistant, if he thought any of it was obvious. He then told us this. &#8220;When you are dealing with Nobel Prize winners and the like, you learn something. If they say something is &#8216;obvious&#8217;, you think abo