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

<channel>
	<title>Professional PHP &#187; extreme-programming</title>
	<atom:link href="http://www.procata.com/blog/archives/tag/extreme-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.procata.com/blog</link>
	<description>PHP Programming, Web Development, PHP Advocacy and PHP Best Practices.</description>
	<lastBuildDate>Tue, 20 Oct 2009 00:57:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Software Development Team Diversity</title>
		<link>http://www.procata.com/blog/archives/2007/03/26/software-development-team-diversity/</link>
		<comments>http://www.procata.com/blog/archives/2007/03/26/software-development-team-diversity/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 14:00:24 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Agile Methods]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[agile-php]]></category>
		<category><![CDATA[extreme-programming]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[programmer-education]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.procata.com/blog/archives/2007/03/26/software-development-team-diversity/</guid>
		<description><![CDATA[Matt Mullenweg has a post about Hiring Diversity.    A successful software project must fulfill many competing goals and factors and meet a wide variety of challenges.   Diversity is the combined arms of software development.  In my personal experience, the diverse team performs better.  A diverse team allows the [...]]]></description>
			<content:encoded><![CDATA[<p>Matt Mullenweg has a post about <a href="http://photomatt.net/2007/03/24/kapor-vs-zuckerberg/">Hiring Diversity</a>.    A successful software project must fulfill many competing goals and factors and meet a wide variety of challenges.   Diversity is the combined arms of software development.  In my personal experience, the diverse team performs better.  A diverse team allows the most appropriate team member to step up to a challenge.  The interaction between team members with different points of view helps a project balance competing goals.</p>
<h3>Technical Background</h3>
<p>A team needs members with a technical background.  These guys are the ones that ensure everything works.  They can write the hard bits of code, keep everything performing and make sure the code is maintainable.  Without these guys, you will have problems.  On the other hand, sometimes those with a technical background view problems solving as a puzzle, where the solution is the end in itself.<br />
In my experience, team members with a less technical background are more empathic toward the user community.  They view problem solving as a means to a goal.  A customer focus is what makes a project successful.  Software can be successful despite technical problems, but it cannot be successful if doesn&#8217;t meet the customer&#8217;s needs.  Having some non-technical people helps prevent your resident technocrats from building a system that will service 10,000 concurrent users, but doesn&#8217;t meet the needs of the 329 users you have today.<br />
Perhaps at the extreme end of this spectrum is the extreme programming practice of including a customer on the development team.</p>
<h3>Experience</h3>
<p>In <a href="http://www.procata.com/blog/archives/2005/05/10/expert-programmers/">expert versus novice programmers</a>, I make the distinction between skill level and experience.  Age, skill and experience often correlate, but not always.  Your young apprentice programmers are important to have on a team.  They can react faster.  Sometimes not knowing better is a bonus.  They&#8217;ll do things more senior team members don&#8217;t want to do.  They do things they&#8217;re not supposed to do, sometimes for the benefit of the team.<br />
I think people underestimate how long it takes to actually become an expert, as I mention in my previous post.  But, then they also underestimate how similar all software projects are.  They also overestimate the impact of their toolset.  Generally the technologies in the laundry lists that form most job listings are not the critical success factors for that project.<br />
People want a programmer with who can hit the ground running, who is familiar with all of the teams tools, languages and libraries.  But, this is a monoculture as well.  Sometimes you need people who aren&#8217;t from your toolset culture to point out where you have swallowed the hook too deeply or to introduce new tools and techniques from their alternate background.  Sometimes their learning process can teach you something.<br />
While some experience is valued in programmers, age sometimes isn&#8217;t.  However, you need the older, more stable people as well.  They keep the young ones from repeating the mistakes of the past.  They keep the project on an even keel.  It helps to have an older perspective on the team.  I think they help keep attention focused on what matters.  The tension between the older and younger team members helps keep the team on track.</p>
<h3>Traditional Diversity Factors</h3>
<p>I have no opinion on the impact of race.  I have an opinion about women on software teams.  I wish there were more of them.  I have worked on software development teams with diverse nationalities.  I regard that experience as positive.  Different cultures have different tolerances for risk, different respect for authority or tradition.  I think cultural diversity on a team is a good thing.</p>
<h3>Managing Diversity</h3>
<p>Over the years, there have been many methods proposed of matching people with the jobs they are best at.  The solution that works best is to ask them.  People gravitate toward the tasks that require their special skill sets.  Good team management means hiring diversely and allowing that migration.  On a well managed, diverse team, people will self select the jobs they are best at.  As a result, the diverse team is more resilient and I believe potentially more successful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.procata.com/blog/archives/2007/03/26/software-development-team-diversity/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Code Coverage, Feedback and Open Source</title>
		<link>http://www.procata.com/blog/archives/2005/10/04/code-coverage-and-feedback/</link>
		<comments>http://www.procata.com/blog/archives/2005/10/04/code-coverage-and-feedback/#comments</comments>
		<pubDate>Tue, 04 Oct 2005 15:46:28 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Agile Methods]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[agile-php]]></category>
		<category><![CDATA[code-coverage]]></category>
		<category><![CDATA[extreme-programming]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[project-management]]></category>
		<category><![CDATA[test-driven-development]]></category>
		<category><![CDATA[unit-testing]]></category>

		<guid isPermaLink="false">http://www.procata.com/blog/archives/2005/08/04/code-coverage-and-feedback/</guid>
		<description><![CDATA[I&#8217;ve long wondered about the quality and extent of the PHP test suite.  During my posting hiatus, John Coggeshall addressed my question by posting a coverage report generated by running the test suite.  Unless I am mistaken, he also implies that the report will at some point become automated and available at http://cov.php.net/. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve long wondered about the quality and extent of the PHP test suite.  During my posting hiatus, <a href="http://blog.coggeshall.org/archives/204_Code_Coverage_Support_for_PHP_5.html">John Coggeshall addressed my question</a> by posting a <a href="http://www.coggeshall.org/cov/">coverage report</a> generated by running the test suite.  Unless I am mistaken, he also implies that the report will at some point become automated and available at <a href="http://cov.php.net/">http://cov.php.net/</a>.  I see the availability of this report as a big step forward for PHPs future stability and maturity.</p>
<p>Agile software development methods including <a href="http://en.wikipedia.org/wiki/Extreme_Programming">extreme programming</a> (XP) have been growing in popularity and maturity alongside an increase in the popularity of open source projects.  One of the fundamental principles of XP is early and often feedback.  The value of feedback is obvious to anyone who has used a strange shower.  The shorter the time between turning the knob and feeling the temperature change, the faster you can arrive at the perfect temperature.  Nobody likes flailing between too hot and too cold in a lazy shower.  In the same way, immediate feedback on a development project can avoid wasted effort and produce a better result faster.</p>
<p>In XP and other Agile programming methods, an automated test suite provides important early and often feedback.  It is far better to catch a bug in the test suite than for the customer to find it.  But, how do you know if your tests are testing all of the features of your program?</p>
<p>The XP practice of <a href="http://en.wikipedia.org/wiki/Test_driven_development">test driven development</a> (TDD) demands that you only add features for which you have a failing test case.  Therefore, you write the test first, and then write the code to satisfy it.  For a theoretical perspective, this should give your code 100% code coverage.  Every line of code should be covered by a test.  Unfortunately, developers are human and any technique that relies of the perfection of people is doomed to fail. Unfortunately, the converse of the TDD coverage assertion is simply not helpful:  If you don&#8217;t have 100% test coverage, you aren&#8217;t correctly doing TDD.  If you are not doing TDD, how do you gauge the quality of your test suite?</p>
<p>Open source projects present a special challenge for the concept of TDD.  No project wants to reject useful contributions, yet many contributors may not write tests for their contributions.  Even if tests are required, there is no way to tell if they were written first, as in TDD, or after the fact.  XP would have the code author writing the unit tests.  In an open source project, this might not be possible or likely, although still desirable.</p>
<p>While certainly not perfect, code coverage tools do provide an indicator of how well tested a section of code is.  Code coverage reports are a feedback loop to help test writers find weak areas and to better target tests to specific lines of code. Just picking a file at random from PHP reveals low-hanging testing fruit: <a href="http://www.coggeshall.org/cov/Zend/zend_operators.c.gcov.html">zend_operators.c</a>.</p>
<p>I feel that a coverage report can be an important tool in an open source project.  More so than in other kinds of projects.  Test writing based on a coverage report inherently lends itself to the distributed nature of open source development.  Many people have a stake in the stability, robustness and reputation of PHP.  Tests are <a href="http://qa.php.net/write-test.php">easy enough to write</a>, easier perhaps than many other ways to contribute.  Hopefully easily available coverage reporting would help coordinate testing activities and draw people in that might not otherwise participate.</p>
<p>Ideally, contributions would be accompanied by test code contributed by the same author.  I also don&#8217;t think it is out of line to look at untested contributions with increased skepticism.  Coverage reports can help identify contributions that might cause future problems.  One can hope the existence of coverage reports might inspire contributors to include better tests by exposing their code as untested.  My (unverified) theory and hope is that the feedback of coverage reports can help inspire a culture of testing on an open source project.</p>
<p>While there are areas (such as GUI apps) where unit testing is difficult at best (thread safety may be another), PHP overall is very testable.  The stability and reputation of PHP can only be improved by increasing the coverage of its unit tests.</p>
<p>I am looking forward to seeing the availability of an automated <a href="http://cov.php.net/">http://cov.php.net/</a>, if indeed that is planned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.procata.com/blog/archives/2005/10/04/code-coverage-and-feedback/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
