<?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>Techdoer Times</title>
	<atom:link href="http://techdoertimes.com/feed?language=en" rel="self" type="application/rss+xml" />
	<link>http://techdoertimes.com</link>
	<description></description>
	<lastBuildDate>Wed, 08 Sep 2010 20:05:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Behavior Driven Hiring</title>
		<link>http://techdoertimes.com/process/behavior-driven-hiring</link>
		<comments>http://techdoertimes.com/process/behavior-driven-hiring#comments</comments>
		<pubDate>Fri, 03 Sep 2010 05:35:05 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[talent]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=2125</guid>
		<description><![CDATA[While past performance does not guarantee future results in the financial markets, when hiring knowledge workers, this same heuristic does not apply.  A knowledge worker&#8217;s past performance indicates the recurring patterns of behavior that will enable him or her to succeed in future work. In their book, First Break All the Rules, Marcus Buckingham and Curt [...]]]></description>
			<content:encoded><![CDATA[<p>While past performance does not guarantee future results in the financial markets, when hiring knowledge workers, this same heuristic does not apply.  A knowledge worker&#8217;s past performance indicates the recurring patterns of behavior that will enable him or her to succeed in future work. In their book, <em>First Break All the Rules, </em>Marcus Buckingham and Curt Coffman point out that the recurring professional behaviors we observe in people are their talents.  By asking open ended questions as well as analyzing a candidate&#8217;s work experience, blog articles, open source software projects, books and/or publications, a hiring organization can obtain a more accurate understanding of the talents each candidate possesses.</p>
<p>There are three benefits in adopting a behavior driven hiring process.  First, with a focus on talents comes the advantages of a <a href="http://www.gallup.com/consulting/67/TalentBased-Hiring.aspx">strengths-based</a> hiring approach.  Second, when it comes to people, past performance may be the most accurate indicator of future performance.  Third, the understanding of talents that emerges from the hiring process, will help guide the self-organization phase for<a title="Four Stages for Team Effectiveness" href="./process/four-stages-of-team-effectiveness"> effective team growth</a> after the candidate comes on board.</p>
<p>In this series <em>Behavior Driven Hiring</em>, I will show how a focus on recurring professional behaviors, during the hiring process, is the first step to building high-performance knowledge worker teams.</p>
<div>
<h3 id="internal-source-marker_0.19615126308053732">Talent &amp; Moneyball</h3>
<p>As organizations continue to mature and refine their practices for effectively managing 21st century knowledge work, one challenge that will need to be solved is that of rapidly building then dissolving highly effective teams of knowledge workers.  A great example of an organization who overcame this challenge can be found in the book <em>MoneyBall: The Art of Winning an Unfair Game</em>, by Michael M. Lewis.  In his book, Michael takes a fascinating look at the subjective and often flawed conventional wisdom guiding Major League Baseball’s insiders for over a century.  The book focuses in on the the Oakland Athletics baseball team, and the way in which its front office took advantage of more empirical gauges of player performance to build a team, which in 2002, finished tied with the New York Yankees for most wins despite having one of the lowest payrolls in Major League Baseball.</p>
<p>I don&#8217;t believe that hiring practices for 21st century knowledge workers are necessarily flawed.  I’ve had the fortune and pleasure of hiring and working with many talented colleagues.  It is because of these experiences that I’ve come to appreciate the importance and incredible advantages with selecting the right people for the job at hand.  With <em>Behavior Driven Hiring</em>, I would like to explore and raise awareness to how rich information &#8220;gleaned&#8221; during the hiring process can empower hiring organizations to select candidates&#8217;s based on their proven talents, and as demonstrated by the 2002 Oakland Athletics, become significantly more competitive in the process.</p>
</div>
<p>Please check back soon as I continue <em>Behavior Driven Hiring</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/process/behavior-driven-hiring/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Four Stages for Team Effectiveness</title>
		<link>http://techdoertimes.com/process/four-stages-of-team-effectiveness</link>
		<comments>http://techdoertimes.com/process/four-stages-of-team-effectiveness#comments</comments>
		<pubDate>Thu, 17 Jun 2010 20:56:26 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1777</guid>
		<description><![CDATA[A few years ago, I was part of a software development group stressed by a combination of challenges.  The first was our ability to quickly assemble small effective teams to take on an increasing amount of short term consulting assignments.  The second was ensuring that these same people could divide their attention and continue their [...]]]></description>
			<content:encoded><![CDATA[<p>A few years ago, I was part of a software development group stressed by a combination of challenges.  The first was our ability to quickly assemble small effective teams to take on an increasing amount of short term consulting assignments.  The second was ensuring that these same people could divide their attention and continue their contribution to a core team focused on a longer term and more strategic software product.  As a budding project manager in charge of both teams, I grasped at anything that could help me better understand the team-dynamics we would experience over the coming months.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.techdoertimes.com/wp-content/uploads/2010/06/5-stages-team-growth.gif" alt="" /></p>
<p>I stumbled upon Bruce Tuckman&#8217;s, <a href="http://en.wikipedia.org/wiki/Tuckman's_stages_of_group_development">5-stages of group development</a> model (a.k.a. forming, storming, norming, performing, adjourning), which despite it&#8217;s age, and simplicity, proved timeless in helping me understand the maturity of the transient and core teams I was managing.   Fast-forward a few years, and my understanding of team dynamics has grown to include concepts that are more deliberate in describing the stages of growth for high-performing teams.  Although I liked Tuckman&#8217;s model in the past, I no longer find it useful because it does not make explicit the pre-requisites for effectiveness from one stage to the next.  For example, how well your team &#8216;performed&#8217; depends on how well they &#8216;stormed&#8217;.  I want to remove any notion haphazardness in Tuckman&#8217;s model while making explicit the characteristics required for successful transition from one stage to the next.</p>
<h3>Four Stages for Team Effectiveness</h3>
<p>I&#8217;m proposing the following new model for effective team growth:</p>
<blockquote>
<h2 style="text-align: center;"><span style="font-weight: normal;"><em>Self-organize -&gt; Trust -&gt; Adjust -&gt; Deliver</em></span></h2>
</blockquote>
<p>The <a href=" http://www.cognitivemedia.co.uk/wp/?p=188.">growing research</a> and understanding of creativity, motivation and trust in knowledge worker teams inspired this <em>Four Stages for Team Effectiveness </em>model.  Derived from Tuckman&#8217;s model, it borrows concepts and terminology from <a href="http://techdoertimes.com/?tag=agile&amp;language=en">Agile</a> software development, the importance of <a href="http://www.slideshare.net/victorhg/trust-diana-larsen-at-agiles-2009">trust</a> in creative teams, and from Peter Drucker&#8217;s teachings on knowledge worker <a href="http://techdoertimes.com/?tag=effectiveness&amp;language=en">effectiveness</a>.</p>
<h3>Self-Organize</h3>
<p>My first exposure to self-organizing teams, and the effectiveness self-organization brings, was in Agile&#8217;s Extreme Programming.  It therefore doesn&#8217;t surprise me to hear Dan Pink, <a href=" http://www.cognitivemedia.co.uk/wp/?p=188.">The Surprising Truth on What Motivates Us</a>, talking about the critical role autonomy plays in fostering motivation in creative types.  The link between autonomy and self-organization is how they work hand-in-hand towards ensuring the <a href="/?p=1198">most effective</a> team members are assigned to productive work as well as inviting the cohesion and commitment required to overcome big challenges.   Command-and-control organizations lacking this autonomy and self-organization across their structure, are forced to rely on a complex and potentially demotivating system of closely monitoring people, and their productivity, while providing the &#8220;<a href="http://twitter.com/estherderby/status/18430122793">carrot and stick</a>&#8221; rewards to keep them going.</p>
<h3>Trust</h3>
<p>By trust I not only mean the trust between team members, but also the trust between a team and their stakeholders, their customers, their organization, their processes and the tools they use to build solutions.  Diana Larsen&#8217;s Agiles 2009 presentation on trust describes in more detail the necessary components of this trust:</p>
<div id="__ss_2174770" style="width: 425px;"><strong><a title="Trust - Diana Larsen at Agiles 2009" href="http://www.slideshare.net/victorhg/trust-diana-larsen-at-agiles-2009">Trust &#8211; Diana Larsen at Agiles 2009</a></strong><object id="__sse2174770" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agiles2009trust4posting-091009073847-phpapp01&amp;stripped_title=trust-diana-larsen-at-agiles-2009" /><param name="name" value="__sse2174770" /><param name="allowfullscreen" value="true" /><embed id="__sse2174770" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agiles2009trust4posting-091009073847-phpapp01&amp;stripped_title=trust-diana-larsen-at-agiles-2009" name="__sse2174770" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h3>Adjust</h3>
<p>I write this at the conclusion of an intense stage of adjustment within my own team.   Looking back, I realize the solid foundation of trust we built leading up to our adjustment stage has helped us survive the tension and discomfort that resulted from, as Jim Collins wrote in his book &#8220;Good to Great&#8221;, confronting the brutal facts.  No matter how much you&#8217;ve grown to like and trust your team, uncomfortable periods of adjustment are inevitable.  In our situation, the primary catalyst for adjustment has been the gap between what we should be doing, versus what we were doing.  Your own team&#8217;s awareness and intolerance to these types of gaps will also increase as your effectiveness grows.</p>
<h3>Deliver</h3>
<p>High-performance and effectiveness will be the signature of teams who have grown and mastered these previous stages. By this stage they will be an autonomous, cohesive group, committed to doing the right things while delivering immense value and equally important, using the feedback loop that emerges from their performance to reinforce and grow their foundation of trust and effectiveness.</p>
<h3>Conclusion</h3>
<p>Think back to the software development teams you&#8217;ve been a member of.  Do you remember your own stages of forming, storming, norming, performing or adjourning?   Now compare the stages of growth between a lackluster team you worked with and a high-performing team.   How did the stages of growth differ between these teams?   I&#8217;m proposing a new model for growing effective teams and the elements of this model are rooted in exactly those differences.</p>
<p>Share your own stories of team growth and effectiveness by emailing <a href="mailto:techdoer@gmail.com">techdoer@gmail.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/process/four-stages-of-team-effectiveness/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Live from Railsconf</title>
		<link>http://techdoertimes.com/technology/realtime-blogging-railsconf</link>
		<comments>http://techdoertimes.com/technology/realtime-blogging-railsconf#comments</comments>
		<pubDate>Tue, 01 Jun 2010 17:11:27 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[live blogging]]></category>
		<category><![CDATA[railsconf]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1766</guid>
		<description><![CDATA[Join me starting Monday, June 5, 2010 as I start a week of live blogging from Railsconf in Baltimore Maryland. Click to see the previous day blogs: Monday, June 7, 2010 Tuesday, June 8, 2010 Wednesday, June 9, 2010 Thursday, June 10, 2010 All Railsconf 2010 keynotes on youtube available here. google.load("wave", "1"); google.setOnLoadCallback(function() { new google.wave.WavePanel({target: [...]]]></description>
			<content:encoded><![CDATA[<p>Join me starting Monday, June 5, 2010 as I start a week of live blogging from Railsconf in Baltimore Maryland.</p>
<p>Click to see the previous day blogs:</p>
<p><a href="https://wave.google.com/wave/waveref/googlewave.com/w+BOe3qleNA ">Monday, June 7, 2010 </a><br />
<a href="https://wave.google.com/wave/waveref/googlewave.com/w+h1qGC6QvC">Tuesday, June 8, 2010</a><br />
<a href="https://wave.google.com/wave/waveref/googlewave.com/w+XVsD1--lA">Wednesday, June 9, 2010</a><br />
<a href="https://wave.google.com/wave/waveref/googlewave.com/w+pw-wx6k1A ">Thursday, June 10, 2010</a></p>
<p>All Railsconf 2010 keynotes on youtube available <a href="http://www.youtube.com/view_play_list?p=393ECE649BB3813D">here</a>.</p>
<div id="waveframe" style="width:100%; height:600px;"></div>
<p><script src="http://www.google.com/jsapi"></script><script type="text/javascript"> google.load("wave", "1"); google.setOnLoadCallback(function() { new google.wave.WavePanel({target: document.getElementById("waveframe")}).loadWave("googlewave.com!w+pw-wx6k1A");}); </script></p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/technology/realtime-blogging-railsconf/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entrepreneurial Spirit – Opportunity</title>
		<link>http://techdoertimes.com/people/entrepreneurial-spirit-opportunity</link>
		<comments>http://techdoertimes.com/people/entrepreneurial-spirit-opportunity#comments</comments>
		<pubDate>Wed, 12 May 2010 16:53:53 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1667</guid>
		<description><![CDATA[This is the final part to my series on the Entrepreneurial Sprit, where I present the characteristics of the perceived struggle driving the success of today&#8217;s internet entrepreneurs. I recommend you read parts one and two if you haven&#8217;t already. As I mentioned previously, this struggle does not belong to entrepreneurs alone.  Knowledge workers also need to continuously align [...]]]></description>
			<content:encoded><![CDATA[<p>This is the final part to my series on the <em>Entrepreneurial Sprit</em>, where I present the characteristics of the perceived struggle driving the success of today&#8217;s internet entrepreneurs. I recommend you read parts <a href="http://techdoertimes.com/?p=1587&amp;language=en">one</a> and <a href="http://techdoertimes.com/?p=1615&amp;language=en">two</a> if you haven&#8217;t already.</p>
<p>As I mentioned previously, this struggle does not belong to entrepreneurs alone.  Knowledge workers also need to continuously align with their strengths, at the same time effectively growing their knowledge and skill, if they are to make a remarkable impression on their customers.  In this final post I&#8217;ll talk about the other side of the struggle, that of finding or creating the right opportunity.</p>
<h3>Quick Rewind</h3>
<p>Thus far I&#8217;ve stressed the importance of knowing and building on your strengths, as well as becoming more effective in both thought and action.  I believe these are essential ingredients in forming the foundation of <a href="http://www.cognitivemedia.co.uk/wp/?p=188">autonomy, mastery and purpose</a> that is so important to the motivation of creative people.  As I conclude this series, a narrative has emerged and it reads as follows:</p>
<blockquote><p>Achieving and growing this level of effectiveness will permit you to grow your competence in a unique and powerful way.  This results in elevated levels of motivation which further amplifies your sense of purpose, autonomy and mastery, which further increases the number of opportunities you encounter and your ability to succeed in them.</p></blockquote>
<p>In essence I&#8217;m saying that the number of opportunities you encounter will depend on your level of effectiveness.</p>
<h3>What is Opportunity?</h3>
<p>Look up the definition of &#8216;opportunity&#8217; and you&#8217;ll find words ranging from &#8216;possibility&#8217; to &#8216;chance&#8217;.  For entrepreneurs, an opportunity is a calling to act, and every aspect of this &#8216;calling&#8217; will directly relate to the effectiveness of the person who found it.</p>
<p>I asked my brother, a successful designer and <a href="http://bogazzi.com">woodworking entrepreneur</a>, how he finds opportunity:</p>
<blockquote><p>&#8220;The right opportunities come from surrounding yourself with the right people, this includes prospective clients.  Imagine you are an explorer or hunter entering a forest.  Not just any forest, but the right forest. This is your &#8216;market&#8217;.   The machete and other tools you carry will help clear the mess and pave your path forward.  Preparation means sustaining and growing the effectiveness of your mind, body and machete. This is what you can control.  In this context, the longer you search, the greater your chance of finding the reward. And don&#8217;t forget to enjoy and refine this process throughout, it will increase the chance of future reward.&#8221;</p></blockquote>
<h3>It&#8217;s Simple Really</h3>
<p>As a person who creates and does things, the way to find and create new opportunities is to continuously align with your strengths while growing your ability to decide and do the right thing across the spectrum of people, processes and technology/tools.  I&#8217;ll end this series with a relevant quote from Guy Kawasaki that says &#8220;Make meaning and you&#8217;ll make money&#8221;, perhaps better restated as find meaning and you&#8217;ll make money.</p>
<p>I hope you enjoyed this series on the <em>Entrepreneurial Spirit</em>.</p>
<p>For questions for comments please email techdoer@gmail.com</p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/people/entrepreneurial-spirit-opportunity/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entrepreneurial Spirit – Preparation</title>
		<link>http://techdoertimes.com/people/entrepreneurial-spirit-preparation</link>
		<comments>http://techdoertimes.com/people/entrepreneurial-spirit-preparation#comments</comments>
		<pubDate>Mon, 10 May 2010 14:29:47 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1615</guid>
		<description><![CDATA[This is part-2 of my series on the Entrepreneurial Sprit, where I present the characteristics of the perceived struggle driving the success of today&#8217;s internet entrepreneurs. The Effective Executive In part-1, I suggested that one of the many keys to the success of software company Balsamiq, was the methodical preparation of its CEO Giacomo ‘Peldi’ Guilizzoni. Luck requires preparedness and [...]]]></description>
			<content:encoded><![CDATA[<p>This is part-2 of my series on the <em>Entrepreneurial Sprit</em>, where I present the characteristics of the perceived struggle driving the success of today&#8217;s internet entrepreneurs.</p>
<h3>The Effective Executive</h3>
<p>In <a href="http://techdoertimes.com/?p=1587&amp;language=en">part-1</a>, I suggested that one of the many keys to the success of software company Balsamiq, was the methodical preparation of its CEO Giacomo ‘Peldi’ Guilizzoni. Luck requires preparedness and his preparation not only included 10,000 hours of professional programming practice, but the acquisition of management and leadership skills while still working for Adobe. During his<a href="http://bit.ly/cB9IwP"> presentation</a> at the 2010 Better Software Conference in Florence Italy, it was easy to see how these new skills coupled with his innate charisma and humbleness might have served him well as an effective leader and first employee of his new venture.</p>
<p>Peter Drucker taught us the following traits of the effective executive:</p>
<ol>
<li>Executives have to know where their <strong>time</strong> is being spent.</li>
<li>They must focus on outward contributions: on results rather than work.</li>
<li>Build on <strong>strengths</strong> first, and then give attention to areas of weakness.</li>
<li>Concentrate on the few major areas where superior performance will produce outstanding results</li>
<li>Make <strong>effective</strong> decisions.</li>
</ol>
<p>Browsing through Peldi&#8217;s online presentations and interviews, you&#8217;ll see references to the  precise timeline of events and key milestones in the life of his company.  You will also detect his conviction when deciding what NOT to focus on, especially during the early days when risk of failure was high.  Examples like these are in line with the traits described above.  Knowing your strengths and where you excel, for example, provides a start to effective decisions making.  It will also provide the knowledge that helps you find those things you enjoy doing.</p>
<p>So how can you go about discovering your strengths?</p>
<h3>Emotional Intelligence</h3>
<p>As Marcus Buckingham and Curt Coffman so eloquently state in their book, <em>First, Break All the Rules</em>, the equation of competence includes the set of talents, skills and knowledge one possesses.  Surely a successful leader will have learned to grow his competence, but this can only be effective in the context of the intimate understanding he has of his own strengths.</p>
<p>To begin understanding your own strengths, it&#8217;s helpful to think about how others perceive you.  How were you praised or criticized in previous performance reviews? What suggestion for improvement were you given?  In a previously stressful situation, how did you react?  Answers to these questions will provide the clues you need to get started.  I also recommend reading through the <a href="/?p=1198&amp;language=en">panorama of talents</a>, as well as completing Gallup&#8217;s StrengthsFinder <a href="http://www.strengthstest.com/">assessment</a>.</p>
<p>Identifying and acting on your strengths allows you to engage in a symbiotic and efficient system of effective preparation, which leads to the right opportunities, which in turn leads to more effective preparation and so on. This is how you amplify your strengths.</p>
<h3>We are all Executives</h3>
<p>A key point I&#8217;d like to introduce here is that the concept of effective executive not only applies to entrepreneurs, but to all knowledge workers, from generalists to specialists, across the organizational hierarchy, programmers included.   We live in a world where our success as knowledge workers, as well as the success of our team and organization, no matter it&#8217;s size, depends on an ability decide and execute &#8216;the right thing&#8217;.</p>
<h3>Getting Back to Luck</h3>
<p>Allow me to be overly simplistic for a moment.  We all agree you have to be lucky to succeed as an entrepreneur.  So if luck is the product of opportunity and preparedness, and preparedness involves the 10,000 hours of practice mentioned by Gladwell,  the understanding of strengths, skills and knowledge suggested by Buckingham and Coffman then how is one supposed to create the right opportunities?</p>
<p>Click <a href="/?p=1667&amp;language=en">here</a> to continue to part-3.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/people/entrepreneurial-spirit-preparation/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entrepreneurial Spirit</title>
		<link>http://techdoertimes.com/people/spirit-of-doing</link>
		<comments>http://techdoertimes.com/people/spirit-of-doing#comments</comments>
		<pubDate>Thu, 06 May 2010 05:02:13 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1587</guid>
		<description><![CDATA[Pick today&#8217;s favorite programmer turned successful software or internet entrepreneur and take a look at the books he&#8217;s reading. Chances are you&#8217;ll find him reading more books from Seth Godin, Malcolm Gladwell and Guy Kawasaki than books from Martin Fowler, Steve Mcconnell, and Grady Booch.  While the technical excellence and know-how taught by this latter group [...]]]></description>
			<content:encoded><![CDATA[<p>Pick today&#8217;s favorite programmer turned successful software or internet entrepreneur and take a look at the books <a href="http://balsamiq.wpengine.com/wp-content/uploads/2009/02/bookshelf1.jpg">he&#8217;s reading</a>. Chances are you&#8217;ll find him reading more books from Seth Godin, Malcolm Gladwell and Guy Kawasaki than books from Martin Fowler, Steve Mcconnell, and Grady Booch.  While the technical excellence and know-how taught by this latter group is fundamental to any successful software venture (or any true software craftsman for that matter), the fact that internet entrepreneurs are reading books like Gladwell&#8217;s <em>Outliers</em>, or Godin&#8217;s <em>Linchpin</em> implies a few things.  First, by the time they commit to realizing their business vision, the technical mastery promoted by books like Mcconnell&#8217;s <em>Code Complete</em> is a given, and not enough to determine success.</p>
<blockquote><p><span style="color: #999999;">T</span><em><span style="color: #999999;">he most beautiful thing we can experience is the mysterious. It is the source of all true art and science. &#8211; Einestein</span></em></p></blockquote>
<p>What this also implies, which you can confirm by listening to their presentations or reading their blogs, is the existence of a struggle that sees them continuously aligning with a deeper purpose while <a href="http://techdoertimes.com/?p=1198&amp;language=en">amplifying talents</a> in order to transform the lives of their customers.  This struggle is similar to the Hedgehog concept presented in Jim Collin&#8217;s book <em>Good to Great </em>and one that marketing has detoured around for the last 20 years.  In this post, <em>Entrepreneurial Spirit, </em>I&#8217;ll present the characteristics of this unquenchable struggle that drives these entrepreneurs towards successful software ventures.</p>
<h3>Luck of the Italian</h3>
<p>We&#8217;ve all heard the expression &#8220;Luck is when opportunity meets preparedness&#8221; and it&#8217;s hard not to find a whole lot of this luck in stories <a href="http://www.balsamiq.com/blog/?p=79">like that</a> of a rapidly growing and successful software startup, <a href="http://balsamiq.com/company">Balsamiq</a>, and its young founder and CEO, Giacomo ‘Peldi’ Guilizzoni.   I recently had the opportunity to listen to the charismatic and passionate CEO during his presentation at the 2010 Better Software Conference in Florence, Italy.  Throughout the presentation, it struck me that yes, his company has had its fair share of luck, but only because of his remarkable pursuit of preparation and opportunity.</p>
<p>During the presentation, he talked about his persistent desire to start his own software company but also pointed to a phase in his life when he simply wasn&#8217;t ready to commit to this venture.  The story goes that in 2004, and with a few years of professional software development experience under his belt at Adobe, he picked up a book from Barry Moltz, <em>You Need to Be a Little Crazy: The Truth about Starting and Growing Your Business</em>, only to put the book down &#8220;after 20 pages&#8221;, admitting to overwhelming reluctance to absorb the risk needed for such a venture.   If he admitted to a lack of preparation in 2004, what changed by 2007, the year he committed to and officially launched Balsamiq?</p>
<h3>Power of Time</h3>
<p>In Malcolm Gladwell&#8217;s book, <em>Outliers</em>, he talks about the 10,000-hour rule, or the minimum time of practice required for success in any field.   Peldi wasn&#8217;t prepared to take the risk to start his venture in 2004, but by 2007,  he not only completed his 10,000 hours of professional practice but had acquired the broader knowledge and skills of an effective leader.  Borrowing the words of the legendery Peter Drucker,  during these three years Peldi dramatically matured his ability to answer the question, &#8220;What is the right thing to do?&#8221;, he was on his way to becoming the <a href="http://hbr.org/product/what-makes-an-effective-executive/an/R0406C-PDF-ENG">effective executive</a>.</p>
<p>Part-2 to the <em>Entrepreneurial Spirit </em>continues<em> <a href="http://techdoertimes.com/?p=1615&amp;language=en">here</a></em><em>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/people/spirit-of-doing/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>People Narrative</title>
		<link>http://techdoertimes.com/people/people-narrative</link>
		<comments>http://techdoertimes.com/people/people-narrative#comments</comments>
		<pubDate>Sat, 07 Nov 2009 17:25:27 +0000</pubDate>
		<dc:creator>Sergio Bogazzi</dc:creator>
				<category><![CDATA[People]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[strengths]]></category>
		<category><![CDATA[talent]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1198</guid>
		<description><![CDATA[Do you remember when Java&#8217;s promise for platform independence opened new frontiers in architectural planning? Or when Extreme Programming gave new life to an audience disillusioned by the Waterfall model?  It seems like only yesterday when these two carried the distinction of  &#8221;next great thing&#8221;.   A distinction that influences the collective conscience of software [...]]]></description>
			<content:encoded><![CDATA[<p>Do you remember when Java&#8217;s promise for platform independence opened new frontiers in architectural planning? Or when Extreme Programming gave new life to an audience disillusioned by the Waterfall model?  It seems like only yesterday when these two carried the distinction of  &#8221;next great thing&#8221;.   A distinction that influences the collective conscience of software professionals, not to mention the effect it  has on the software development ecosystem.  In 1999 we witnessed Windows ME, Outlook 2000, RUP, DCOM, MySQL, personal homepages, and XML vying for this distinction.  Ten years later we find Chrome OS, Google Wave, Agile, REST, NoSQL, Twitter, and JSON picking up the fight.</p>
<p>Programmers and startups have also found themselves vying to become the next Bill Gates, or creating the next Google, but rarely do we sufficiently understand the personal characteristics that inspire such distinction.  For example, we know the benefits behind Agile&#8217;s iterative approach,  or model-view controller in Ruby on Rails, but do we agree on the interpersonal traits required for a high-performing individual?  In a world where software development processes, and technologies continue their trend towards commoditization, it is the ability to answer this question, and others like, that will begin to differentiate an organization in the marketplace.</p>
<p><em>People Narrative</em> is a look at the traits that distinguish talented people in the software development lifecycle.  A comprehensive panorama of such traits can serve as a useful reference for programmers, project managers or executives to better understand, select, and improve the people in their own software development teams.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.techdoertimes.com/wp-content/uploads/2009/11/talents.png" alt="" width="430px" /></p>
<h3>Competence</h3>
<p>What talents come to mind when you think of the programmers you&#8217;ve worked with?   Was it their strong ambition, power of persuasion, or their &#8216;seeing eye&#8217; intuition that set them apart?   Or maybe it was their relentless attention to detail coupled with an insatiable curiosity that drove their success.   Like them, you also possess innate abilities that uniquely (un)qualify you for certain types of work.   Your ability to perform at a high level will largely depend on how well the unique talents you possess align with the needs of the job.</p>
<p>Still too many companies don&#8217;t understand this.  They write job postings emphasizing a particular skill or body of knowledge yet neglect to mention specific talents required by this job.  As Marcus Buckingham and Curt Coffman so eloquently state in their book, <em><a href="http://gmj.gallup.com/content/1144/first-break-all-rules-book-center.aspx">First, Break All the Rules</a></em>, it is critical for companies to understand that the equation of competence includes the set of talents, skills and knowledge an individual possesses.   The key differentiator between these three is that you cannot teach talent.  For example, I&#8217;m willing to bet that an innate attention to detail was a major contributor to the performance of the last superstar programmer you worked with, or that good listening skills contributed to the excellent communication in your current team, but only a healthy dose of empathy has helped you fully understand them (i.e. Peter Drucker&#8217;s &#8220;the most important thing in communication is hearing what isn&#8217;t said&#8221;).</p>
<p>The performance of your software development teams will primarily depend on the individual and collective talents that characterize them.    I&#8217;ve included a comprehensive list of these talents in Table 1.</p>
<table style="align: center;" border="0">
<tbody>
<tr valign="top">
<td>
<h3>Abstraction</h3>
<h3>Affability</h3>
<h3>Altruism</h3>
<h3>Ambition</h3>
<h3>Analysis</h3>
<h3>Articulation</h3>
<h3>Autonomy</h3>
<h3>Assertiveness</h3>
<h3>Candidness</h3>
<h3>Charisma</h3>
<h3>Commitment</h3>
<h3>Competition</h3>
<h3>Comprehension</h3>
</td>
<td>
<h3>Concentration</h3>
<h3>Confidence</h3>
<h3>Confrontation</h3>
<h3>Consistency</h3>
<h3>Creativity</h3>
<h3>Curiosity</h3>
<h3>Deliberation</h3>
<h3>Determination</h3>
<h3>Empathy</h3>
<h3>Endurance</h3>
<h3>Foresight</h3>
<h3>Humbleness</h3>
</td>
<td>
<h3>Imagination</h3>
<h3>Intuition</h3>
<h3>Persuasion</h3>
<h3>Passion</h3>
<h3>Patience</h3>
<h3>Persistence</h3>
<h3>Politeness</h3>
<h3>Precision</h3>
<h3>Recall</h3>
<h3>Resourcefulness</h3>
<h3>Sensibility</h3>
<h3>Sympathy</h3>
<h3>Wit</h3>
</td>
</tr>
<tr>
<td colspan="3">Table 1. Panorama of Individual Talents</td>
</tr>
</tbody>
</table>
<p><strong>Intelligence</strong><br />
To better understand this list, I&#8217;ll need to categorize.  In their book,  Buckingham and Coffman offered s<em>triving</em>, t<em>hinking </em>and r<em>elating</em> as three possibilities.  Using their scheme, striving talents such as  determination would explain the &#8216;why&#8217; we perform, thinking talents such as a superior analytical ability would explain &#8216;how&#8217; we perform, and finally relating talents such as charisma would explain for &#8216;whom&#8217; we best perform.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Theory_of_multiple_intelligences">Theory of  Multiple Intelligences</a>, proposed by Howard  Gardner, and more specifically the categories of intelligence he defines, may also provide a classification.   Howard suggests eight different types of intelligence including:</p>
<ul>
<li>Bodily-kinesthetic</li>
<li>Interpersonal* (i.e. social intelligence)</li>
<li>Verbal-linguistic*</li>
<li>Logical-mathematical*</li>
<li>Intrapersonal* (i.e. emotional intelligence)</li>
<li>Visual-spatial*</li>
<li>Musical</li>
<li>Naturalistic</li>
</ul>
<p>I&#8217;d like to assume that the distinguishing talents of high-performing software development teams span those intelligences marked with an asterisk.   More important is the understanding that successful professionals and teams possess talents not typically understood or revered by hiring organizations or educational institutions.  For example, standardized intelligence tests that limit themselves to measuring logical-mathematical and verbal-linguistic abilities.</p>
<h3>Effectiveness</h3>
<p>In software development terms, think of effectiveness as the runtime engine.  When the code is syntactically correct, it can be executed.  Every programmer can admit to an overwhelming sense of motivation that comes with seeing their code execute flawlessly.  But without this runtime engine, even the most beautiful piece of code is rendered functionally useless.</p>
<p>Similarly in people, maximizing effectiveness requires a thorough understanding of their competence so that productive work can be assigned to the right individual.   While it may be straightforward to assign programming work to an individual who stands out for his knowledge of Java, it may not be so straightforward to conclude that the work of a leader should be assigned to an individual with a talent for empathy.   When the full spectrum of an individual&#8217;s competence is required for the work at hand, the individual&#8217;s motivation will grow, and she will be satisfied in her job.  There has been strong emphasis on aligning business and IT over the years, and it&#8217;s time we also realize the impact of (im)properly aligning a person&#8217;s competence with their work.</p>
<p>Lacking a thorough understanding of an individual&#8217;s competence is a recipe for their ineffectiveness.  Peter Drucker taught us that the job of the knowledge worker is to be effective (and similarly stay motivated) while also reminding us that:</p>
<blockquote><p>&#8220;&#8230;people of high effectiveness are conspicuous by their absence in knowledge jobs. High intelligence is common enough amongst knowledge workers. Imagination is far from rare. The level of knowledge tends to be high. But there seems to be little correlation between a man&#8217;s effectiveness and his intelligence, his imagination, or his knowledge. Brilliant men are often strikingly ineffectual; they fail to realize that the brilliant insight is not by itself achievement.&#8221;</p></blockquote>
<p>Perhaps he referred to the limited definition of intelligence and brilliance, which is to say, achievement requires the broader set of intelligences usually found in more than one person alone.   Our teams should be formed on this basis and as Marcus Buckingham and Curt Coffman <a href="http://gmj.gallup.com/content/526/Leading-or-Managing.aspx">stated</a>, the job of a manager is to convert these combined talents into performance.</p>
<p style="text-align: center;"><a name="trust"></a><br />
<img class="aligncenter" src="http://techdoertimes.com/wp-content/uploads/2010/07/Leadership_People1.png" alt="3 Stages for High-Performance Teams" /></p>
<p style="text-align: center;">Figure 1.  High-Performance Teams</p>
<h3>Trust</h3>
<p>Diana Larsen&#8217;s <a href="http://www.slideshare.net/victorhg/trust-diana-larsen-at-agiles-2009">presentation</a> on Trust taught us that an individual&#8217;s competence (i.e. talent, skill, knowledge) is a major component towards growing professional trust  (See Figure 1).  A sufficient level of trust must exist in order for a self-organizing team to maximize their individual and collective effectiveness.   It will serve as the foundation for the team&#8217;s understanding of each individual&#8217;s competence, of how best to organize, as well as maximizing their ability to execute.</p>
<h3>Conclusion</h3>
<p>It should be clear that before we can preach the benefits of Agile software development, or evangelize the next great programming language, for example, we need to understand the talents of people, because it is these talents, and our ability to nurture them, that will primarily influence the foundation for individual and team trust, effectiveness, motivation and overall performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/people/people-narrative/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Is BDD the solution to the tester’s dilemma?</title>
		<link>http://techdoertimes.com/process/is-bdd-the-solution-to-the-testers-dilemma</link>
		<comments>http://techdoertimes.com/process/is-bdd-the-solution-to-the-testers-dilemma#comments</comments>
		<pubDate>Fri, 31 Jul 2009 17:00:38 +0000</pubDate>
		<dc:creator>Juan Gabardini</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[behavior-driven development]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1069</guid>
		<description><![CDATA[We, testers, are coming late to the agile party. I would argue that the role of a programmer is first class in Extreme Programming, the role of a team lead first class in Scrum, and the role of the architect first class in Feature Driven Development (FDD). I know, I am oversimplifying and of course [...]]]></description>
			<content:encoded><![CDATA[<p>We, testers, are coming late to the agile party. I would argue that the role of a programmer is first class in Extreme Programming, the role of a team lead first class in Scrum, and the role of the architect first class in Feature Driven Development (FDD). I know, I am oversimplifying and of course each of these roles requires a diversity of skills to fit an always changing job description, and some even got a name change (Scrum Master).</p>
<p>But what about testers&#8230;</p>
<p>I know of a team in which every member is called a programmer, not a developer or a team member. Do you believe it? It is true, but isn&#8217;t that strange?</p>
<p>What if said “I know of a team in which every member is called a tester”. Would you believe it?</p>
<p>Brian Marick was one of the original authors of the <a title="Agile Manifesto" href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a> and the lone self-defined tester in the group.  He also made big <a title="contributions" href="http://www.exampler.com/" target="_blank">contributions</a> to the redefinition of our role, and others follow the path, but we have had what I consider (re)foundational book, <a title="Agile Testing" href="http://lisacrispin.com/wordpress/agile-testing-book-is-now-out/" target="_blank">Agile Testing</a>, for less than 6 months now.</p>
<p>We are still in transition as a community . This transition is sometimes caused by a <a title="http://stpcollaborative.com/knowledge/271-the-agile-process-creates-testing-puzzles-which-are-solved-when-agile-is-performed-correctly" href="http://stpcollaborative.com/knowledge/271-the-agile-process-creates-testing-puzzles-which-are-solved-when-agile-is-performed-correctly" target="_blank">lack of understanding of Agile Development</a> and sometime it is caused by the lack of breakthrough innovations.  There is some re-thinking going on, both in the broader sense (see Brian Marick on <a title="http://www.infoq.com/interviews/micro-scale-retro-futurist-anachro-syndicalism" href="http://www.infoq.com/interviews/micro-scale-retro-futurist-anachro-syndicalism" target="_blank">Micro-Scale Retro-Futurist Anarcho-Syndicalism</a>), and in a more restricted sense (there is a group, <a title="http://tech.groups.yahoo.com/group/aa-ftt/" href="http://tech.groups.yahoo.com/group/aa-ftt/" target="_blank">AA-FTT &#8211; Agile Alliance Functional Test Tools</a>, that is trying to advance the state of the art, you can see the discussions on the mailing list and a there are a number of workshops <a title="[1]" href="http://www.infoq.com/news/2008/08/functional_test_results" target="_blank">[1]</a><a title="[2]" href="http://www.infoq.com/interviews/hendrickson-aaft" target="_blank">[2]</a>).</p>
<p>So it might be too early to have a solution to the <a title="http://techdoertimes.com/?p=620&amp;language=en" href="http://techdoertimes.com/?p=620&amp;language=en" target="_blank">tester&#8217;s dilemma</a>, but anyway, we have to continue to test and deliver products today. What is the best we can do right now?</p>
<p>Let&#8217;s discuss a promising proposition: BDD and Cucumber, as presented in The RSpec book: <a title="http://pragprog.com/titles/achbd/the-rspec-book" href="http://pragprog.com/titles/achbd/the-rspec-book" target="_blank">Behaviour Driven Development with RSpec, Cucumber and friends</a>.</p>
<p>But first we need a little of history and background.</p>
<p><strong>Test driven development (TDD)</strong></p>
<p>TDD was a wonderful idea that came to us in the XP package. It is widely accepted as a good practice but isn&#8217;t so widely used.  Why?  TDD had the positive effect of pulling up quality, both as a concern of the team and in the product result. But the four letter word (test) caused a lot of friction and misunderstanding.  The friction often appears as a resistance of programmers to do “tester&#8217;s job”.  The misunderstanding could be caused by the way people learn new concepts. If the words are known, they usually assume that the concept is the same (see <a title="http://en.wikipedia.org/wiki/Linguistic_relativity" href="http://en.wikipedia.org/wiki/Linguistic_relativity" target="_blank">Sapir-Whorf Hypothesis</a>).</p>
<p>That&#8217;s why, instead of Agile Development, Brian turned to Micro-Scale Retro-Futurist Anarcho-Syndicalism (reading that, you most certainly won&#8217;t have a clue what he is talking about, so you will go and check) and Kent Beck turned to <a title="http://www.infoq.com/articles/kent-beck-interview-2006" href="http://www.infoq.com/articles/kent-beck-interview-2006" target="_blank">Responsible Development</a> (he prefers the connotation of responsible; being responsible has some cost attached; being agile, well … who doesn&#8217;t want to be agile?)  As a result of getting TDD wrong, some practitioners focus on testing the code, while they should be paying attention to the design. This loss of focus leads to bad practices; for example, when a developer defines tests that depends on the implementation (internal structure) instead of the behaviour of the object.</p>
<p><strong>Acceptance Test Driven Development (ATDD) &#8230;</strong></p>
<p>You might like to know that software development and theater companies have many things in common: “Good theater companies routinely produce innovative products under extreme deadline pressure (opening night) ”. Or at least, they could have. To get those results (reliable innovation), you have to build products through what Rob Austin and Lee Devin called <a title="http://www.artfulmaking.com/" href="http://www.artfulmaking.com/" target="_blank">Artful Making</a>, instead of Industrial Making. This is not a case of wishful thinking, you need some precondition to use Artful Making. One of them: Quick, low cost and high quality iteration, and a product at the end of each iteration (yes, this sounds very Lean).</p>
<p>One impediment to Artful Making is the language/conceptual gap between the user and the development team. If we have different language, we incur in translation time and cost and we risk to inject error every time that we cross the gap&#8230; in any direction. For instance, during requirement elicitation and during acceptance test.</p>
<p>Would it be nice if we could have requirement stored in such a way that:</p>
<ul>
<li>They are understandable for both the users and the development team (communication).</li>
<li>They could be defined (written) before the product is build (test).</li>
<li>The product could be quickly and easily (automatically) validated against them (test).</li>
</ul>
<p>Enter Fit: <a title="http://fit.c2.com/" href="http://fit.c2.com/" target="_blank">Framework for Integrated Test</a>. What if we let the user write the requirements as examples tables in Word, Excel or HTML pages? And then, with a minimum gluing code and a test runner, we could test the application.</p>
<p>It was a great leap forward, both in communication and test. It has been followed by <a title="http://sourceforge.net/projects/fitlibrary/" href="http://sourceforge.net/projects/fitlibrary/" target="_blank">FitLibrary</a> and <a title="http://www.fitnesse.org/" href="http://www.fitnesse.org/" target="_blank">Fitnesse</a> which add a wiki as the front end (instead of HTML).</p>
<p>A lot of agile teams use some incarnation of FIT/FitLibrary/Fitnesse.  Some problems where reported:</p>
<ul>
<li>Many end user don&#8217;t take ownership of the tests. Team members (usually the testers) act as scribes, and translate user / team conversation to HTML /wiki.</li>
<li>When the number of test cases scale up, test case development become awkward. A wiki or a set of html pages are not a good development environment. As a developer, you have to manage two models of thinking (FIT/Fitnesse and your application programming language and environment)</li>
</ul>
<p><strong>&#8230;And Behaviour Driven Development (BDD)</strong></p>
<p>BDD is an evolution of TDD and ATDD proposed by Dan North (<a title="video" href="http://www.infoq.com/presentations/bdd-dan-north" target="_blank">video</a>).</p>
<p>We can get rid of Test in TDD, and call it Behaviour Driven Development. But why Behaviour? Because it is better to focus the programmer in the more important aspect of the objects, their behaviour. It is also built upon the idea of a <em>ubiquitous language</em> as in <a title="Domain Driven Design" href="http://domaindrivendesign.org/" target="_blank">Domain Driven Design</a>.</p>
<p>To complete the name/concept switch away of Test, the executable specification are called examples. So specifications of code behaviour are called code examples and the higher level specification are called application examples.</p>
<p>At the requirement/acceptance level, we define application behaviour, at the design/programming level, we define object behaviour. In both cases you follow the red/green/refactor cycle, having two, concentric cycles. The outer cycle is the ATDD part, the inner cyle is the TDD part, but the both work together. These are the steps, number between () refer to the figure extracted from <a title="The RSpec Book" href="http://pragprog.com/titles/achbd/the-rspec-book" target="_blank">The RSpec Book</a> from The Pragmatic Bookshelf.</p>
<ol>
<li>Write an scenario with Cucumber (1)</li>
<li>Write a step definition</li>
<li>Run and Watch it fail (2)
<ol>
<li>Write a failing code example with RSpec (3)</li>
<li>Get the example to pass (4)</li>
<li>Refactor (5)</li>
<li>Repeat 3.1 – 3.3 until Cucumber step is passing</li>
<li>Repeat 2 – 3 until Cucumber scenario is passing (6)</li>
<li>Refactor (7)</li>
</ol>
</li>
</ol>
<p style="text-align: center;"><img class="aligncenter" src="http://stove.s3.amazonaws.com/techdoer.com/images/bdd_answer_to_testers_dilemma/rspec_cumber_outside_in.jpg" alt="" /></p>
<p>Building the application in this way promotes an Outside-in development. Models appear as solutions to the acceptance criteria. This has a few implications: it is easier for the client to write acceptance test (as examples), the model is more relevant to everyone on the team, and it requires the use of techniques to support incremental development (like mocks).  The bottom line of BDD is “writing software that matters”, and it follows three principles:</p>
<ul>
<li>It&#8217;s all behaviour. This behaviour should be described in a common (ubiquitous) language, that can be understandable by the business and technical people on the team.</li>
<li>Deliver stockholder value. Brian Marick will say “focus on the cheese”.</li>
<li>Enough is enough. This is true for upfront planning, design, etc, but also for automation, don&#8217;t try to automate everything.</li>
</ul>
<p>There are many tools implementing BDD ideas with different approaches and contexts (i.e. languages). In Ruby, the tool stack includes <a title="RSpec" href="http://rspec.info/" target="_blank">RSpec</a>, <a title="Cucumber" href="http://cukes.info/" target="_blank">Cucumber</a>, <a title="Webrat" href="http://wiki.github.com/brynary/webrat" target="_blank">Webrat</a>. I will only drill into Cucumber which is the BDD tool most relevant to end user and (non technical) testers.</p>
<p><strong>Cucumber</strong></p>
<p>I will not try to explain the use of Cucumber. Following the excellent Ruby/Rails tradition of web/podcast you can check some Cucumber resources <a title="here" href="http://railscasts.com/episodes?search=cucumber" target="_blank">here</a> and of course, check the <a title="Cucumber site" href="http://cukes.info/" target="_blank">Cucumber site</a> and The RSpec Book.</p>
<p>Disclaimer: Please consider that I am reading a beta version of The RSpec Book, a nice feature of Pragmatic Bookshelf, and I haven&#8217;t research Cucumber as much as I would like, so I might be missing many features. I just want to share some impressions as a newbie user.</p>
<p>Just to agree on vocabulary, this is a short example (login.feature):</p>
<p>Each feature file contains:</p>
<blockquote><p>Feature: Login<br />
In order to use the site functionality<br />
As a guest user<br />
I want log in</p>
<p>Scenario: I try to access without logging in<br />
Given I am not logged in<br />
When I go to the taskboard number 1<br />
Then I should be on the login screen</p></blockquote>
<ul>
<li>One feature, with a free description (not parsed), that could take traditional story format (As&#8230; I want … So that I can …) or another format that change the order to put more emphasis on the value obtained (In order to&#8230; As a … I want …). The last format is closer to the order of the steps.</li>
</ul>
<ul>
<li>One or more Scenario, each scenario has a name and a number of steps. Each step begins with any of five keywords: <em>Given</em>, <em>When</em>, <em>Then</em>, <em>And, </em>and <em>But</em>.
<ul>
<li>Given: define the context, the preconditions.</li>
<li>When: is the action or event that happen to the application.</li>
<li>Then: is the expected result.</li>
<li>And/But: could be used after Given/When/Then to add steps with the same meaning of the previous one.</li>
</ul>
</li>
</ul>
<p>Feature files are written in a very simple DSL (Feature/Scenario/Given/When/Then/And/But) called Gherkin. Like Python and YAML, Gherkin is a line-oriented language that uses indentation to define structure.</p>
<p>My first impression, coming from FIT/Fitnesse, is that it is not so different, I mean, you can also have a Do fixture that can be read almost as English. Almost.</p>
<p>Examples written in natural language (like English, but many languages are supported) is a big selling point. And you don&#8217;t lose the table (data driven) approach (Scenario Outlines).</p>
<p>It is far easier to edit, just plain text and it seems to be more integrated to the development environment. I really like the ability to switch more easily between application examples (feature file) and code.</p>
<p>Working in a Ruby environment also allows a more quick and simple cycle that I think could help when pairing with a user.</p>
<p>It&#8217;s sad to say that I don&#8217;t have experience with large set of features. One of the problems with FIT/Fitnesse is that it is more difficult to refactor examples than to refactor code. And sometimes, you unwillingly break the examples by changing an apparently innocuous html. I don&#8217;t know how scaling and refactoring is managed in Cucumber (except the Scenario Outlines).</p>
<p>One downside of plain text is the loss of styling and hyperlinking. The first one could be replaced by convention over configuration and some viewer, but without hyperlinking, we lose the ability to arrange examples as a nice snippet of documentation.</p>
<p><strong>Final comments</strong></p>
<p>In the BDD double cycle, you can extend the use of Cucumber to make code examples or extend RSpec to make application examples.</p>
<p>The questions that come to my mind is, why developers will not choose to use RSpec, so they keep the toolset simpler. Anyway, they don&#8217;t need English if they can read Ruby.</p>
<p>In my experience, the cost to maintain the gluing code is only acceptable when there are full time team members that are not fluent in the main programming language (say Java or Ruby). It could be the user or somebody working as the user scribe (an Analyst or Tester).</p>
<p>I see that Cucumber has many good point, and a superficial use is not enough to judge it. I would like to give it a deeper try. Do you have a project Rails? Call me <img src='http://techdoertimes.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Will testers role in agile team become the user scribes of functional tests? Yes, probably. But not only that. Exploratory testing is much needed, and a devil&#8217;s advocate is useful for the team. For instance, related to coverage, test automation and risk analysis.  The <a href="http://www.agilar.org/">Agilar</a> Taskboard team (Francisco Tufró &amp; Marcos Navarro) allows me to use the product as a test bed for Cucumber.  Thanks!</p>
<blockquote><p><strong>About the author</strong>: Juan Gabardini has more than 20 years of experience in IT management, IT product development, teaching and consulting in financial services, retail, telecommunications, medical equipment and manufacturing sectors.</p>
<p>Juan is currently focused on testing and coaching the Agile way, and building an Argentinian and Latam Agile community (Agile Open Tour and Ágiles 200x).</p>
<p>Juan is a member of IEEE, Agile Alliance and Scrum Alliance, and holds degrees in System Analysis and Electronic Engineering from the Buenos Aires University, where he also is teaching. You can find him (in Spanish) in <a href="http://softwareagil.blogspot.com/">http://softwareagil.blogspot.com</a> and <a href="http://www.agiles.org/">http://www.agiles.org</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/process/is-bdd-the-solution-to-the-testers-dilemma/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Challenges in Multi-Core Era – Part 3</title>
		<link>http://techdoertimes.com/technology/challenges-in-multi-core-part-3</link>
		<comments>http://techdoertimes.com/technology/challenges-in-multi-core-part-3#comments</comments>
		<pubDate>Sat, 27 Jun 2009 02:31:52 +0000</pubDate>
		<dc:creator>Gaston Hillar</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[hpc]]></category>
		<category><![CDATA[multi-core]]></category>
		<category><![CDATA[parallelism]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=1000</guid>
		<description><![CDATA[Previously, I compared the performance of today’s popular operating systems with respect to multi-core processors.  In this final part to Challenges in Multi-Core Era, I’ll talk about the multi-core capabilities found in today’s programming languages and development tools. The Programming Languages When language architects were designing the foundations of the most popular programming languages, multi-core [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://techdoertimes.com/?p=984&amp;language=en">Previously</a>, I compared the performance of today’s popular operating systems with respect to multi-core processors.  In this final part to <em>Challenges in Multi-Core Era</em>, I’ll talk about the multi-core capabilities found in today’s programming languages and development tools.</p>
<h2>The Programming Languages</h2>
<p>When language architects were designing the foundations of the most popular programming languages, multi-core microprocessors were hidden in laboratories. Only high performance servers had access to multiprocessing systems. Just a few specialized workstations had more than one CPU installed. Therefore, C# and Java offered support for concurrency and multi-threading intended to offer more responsive applications. However, language architects didn’t design this support to optimize applications for future multi-core CPUs. Hence, nowadays, it is really difficult to optimize existing code to take advantage of multi-core CPUs using frameworks prepared for serial code.</p>
<p>In order to take full advantage of multi-core, the applications need a task-based design and a task-based programming. There is no silver bullet. So far, there is no way to optimize an application recompiling it without changes. Some developers expected this to happen. There is a great need for new designs, new programming techniques and new tools. The software development industry needs a new great paradigm shift.</p>
<p>Besides, developers need a framework capable of handling tasks. There are new programming languages, or new versions of older concepts, like functional programming. Functional programming makes it easier to code task-based designs and to split the work to be done in multiple independent tasks that could be run in parallel on multi-core CPUs.</p>
<p>There are many new programming languages with a great focus on functional programming, prepared to take full advantage of multi-core and to offer a great scalability. Just to mention a few:</p>
<ul>
<li><a href="http://www.scala-lang.org/">Scala</a></li>
<li><a href="http://www.haskell.org/">Haskell</a>.      Yes, the one that has more than twenty years. Pure functional programming      languages are back and they can be the future for parallel programming.</li>
<li><a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx">Microsoft Axum</a> (formerly Maestro).</li>
<li><a href="http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/">Microsoft      F#</a>.</li>
</ul>
<p>However, do developers want to begin learning new programming languages? Most developers want to leverage their existing knowledge to move onto multi-core programming.</p>
<p>C++ and Fortran programmers had early access to parallel programming. Nowadays, these are the only programming languages that can take advantage of the full power offered by modern microprocessors. C++ is closer to the hardware. Hence, it allows many optimizations that aren’t available in any other programming language – apart from C and assembler. You can access all the vectorization capabilities from C++ and Fortran.</p>
<p><a href="http://openmp.org/wp/">OpenMP</a> has been offering a high quality multi-platform and open source shared-memory parallel programming API to C/C++ and Fortran for many years now. Besides, Intel Threading Building Blocks, also known as <a href="http://www.threadingbuildingblocks.org/">TBB</a>, allows developers to express parallelism in C++ applications to take advantage of multi-core.</p>
<p><a href="http://www.mpi-forum.org/">Message Passing Interface</a> (MPI), is a language-independent communications protocol used to program parallel computers. You can use MPI to take advantage of multi-core on many programming languages. However, its main focus is to help develop applications to run on clusters and high performance computers.</p>
<p>Intel offers compilers and libraries optimized to take advantage of multi-core. However, you still require coding your applications considering new parallel designs. The usage of vectorization in their math libraries is a great plus point. There is an outstanding opportunity for new libraries and components optimized for multi-core and vectorization. Parallelism brings new opportunities to the software development industry.</p>
<p>There are new companies taking advantage of the need for multi-core optimizations, like <a href="http://www.cilk.com/">Cilk Arts</a>, offering its Cilk++ compiler. It is based on GCC and includes a modified compiler and debugger to simplify multi-core programming for Linux and Windows platforms.</p>
<p>Mac OS X’s <a href="http://developer.apple.com/tools/xcode/index.html">Xcode</a> development environment offers access to Grand Central Dispatch and OpenCL. OpenCL allows C programs to run in the GPU instead of loading the main CPU. The interest of developers in Xcode has really grown since multi-core and OpenCL.</p>
<p>C# and Java are evolving in order to offer developers new ways of expressing parallelism in their code. Indeed, they are changing many aspects that were designed for another world, the old single-core machines.  Some of these changes include new <a href="http://www.ddj.com/go-parallel/blog/archives/2009/05/new_garbage_col.html">garbage collectors</a>, new <a href="http://www.ddj.com/go-parallel/blog/archives/2009/04/java_7_will_evo.html">frameworks</a> and <a href="http://software.intel.com/en-us/blogs/2009/04/08/concurrent-collections-for-c-using-parallel-extensions/">features</a>, new <a href="http://software.intel.com/en-us/blogs/2009/05/19/use-lambda-expressions-in-c-to-simplify-the-parallelized-code-ii/">functional approaches</a> and <a href="http://software.intel.com/en-us/blogs/2009/04/28/invoking-parallel-tasks/">task-based programming capabilities</a>.</p>
<p>Java 7 will offer the <a href="http://www.ddj.com/go-parallel/blog/archives/2009/04/java_7_will_evo.html">new fork-join framework</a>, really optimized for multi-core.</p>
<p>C# 4.0 (Visual Studio 2010) will add task-based programming capabilities and parallelized LINQ (PLINQ). Besides, it will allow the possibility to manage the desired <a href="http:/software.intel.com/en-us/blogs/2009/05/06/specifying-the-desired-degree-of-parallelism-in-net-40-tpl-beta-1/">degrees of parallelism</a>.</p>
<p>Furthermore, there are new DSLs (Domain Specific Languages) to add parallel programming capabilities to existing high-level languages. For example, <a href="http://code.google.com/p/gparallelizer/">GParallelizer</a> adds nice parallel programming capabilities to <a href="http://www.ddj.com/go-parallel/blog/archives/2009/06/a_domainspecifi.html">Groovy</a>.</p>
<p>Most modern programming languages are evolving or adding inter-operatibility capabilities with other languages to favor multi-core programming.</p>
<p>However, don’t forget about vectorization. Mono, a free and open source .Net compiler, <a href="http://www.ddj.com/go-parallel/blog/archives/2009/04/novells_mono_br.html">offers access</a> to SSE3 and SSE4 for C# developers.</p>
<p>A few years ago, concurrency was about threads. Now, experts are talking about tasks and fibers. Why? Because in order to develop an application using a task based approach, threads are too heavy. Tasks and fibers are lightweight concurrency elements, much lighter than threads. They allow developers to implement complex task-based designs without the complexities of threads.</p>
<p><a href="http://www.ruby-lang.org/">Ruby</a> 1.9 added fibers and it simplify the creation of pipelines. Pipelines take great advantage of Hyper-Threading <a href="http://www.ddj.com/go-parallel/blog/archives/2009/04/intels_hyperthr.html">combined with</a> multi-core.</p>
<p>If you want to go parallel, follow James Reinders’ <a href="http://www.ddj.com/hpc-high-performance-computing/201804248">eight key rules for multi-core programming</a>. You can apply them to any combination of programming language, framework, compiler and virtual machine.</p>
<p>Java 7 and .Net 4 will not offer framework support for vectorization (SIMD instructions). SIMD has been there since Pentium MMX microprocessor.  This decision doesn’t make sense especially considering that there is a huge market for smart professionals in the new parallelism age.</p>
<h2>The New Tools</h2>
<p>A well-known proverb says “A good workman is known by his tools”.</p>
<p>A parallelized application requires new debugging and testing techniques. You need to catch potential bugs introduced by concurrency.</p>
<p>Intel has been offering tools for High Performance Computing and parallelism for many years now. A few weeks ago, Intel launched one of the most complete parallel toolkits for C/C++ developers, <a href="http://software.intel.com/en-us/intel-parallel-studio-home/">Intel Parallel Studio</a>. Among many other features, it helps developers to compile applications tuned for multi-core CPUs and to find concurrency specific bugs and bottlenecks. You should expect to see more tools like this coming on the next quarters.</p>
<p>Visual Studio 2010 will add enhanced multi-monitor support capabilities. You’ll need more than one monitor in order to debug applications running with a task-based approach. It will also add task-based debugging capabilities. However, Visual Studio 2010 has recently entered Beta 1. Therefore, if you want to develop an application using a task-based approach using C# 3.0, you still have to work with threads. Visual Studio 2008 offers nice <a href="http://www.packtpub.com/article/debugging-multithreaded-applications-as-singlethreaded-in-c-sharp">multithreading debugging capabilities</a>.</p>
<p>Most IDEs are changing to offer new task-based programming, debugging and testing capabilities. You have to test parallelized applications on multi-core CPUs. Many bugs aren’t going to appear when running them on single-core CPUs.</p>
<p>There are many free tools to help you in the multi-core jungle. You can monitor your applications and test their concurrency efficiency using <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx">Process Explorer</a> and Intel <a href="http://software.intel.com/en-us/articles/intel-concurrency-checker-icchecker-10/">Concurrency Checker</a>.  If you use these tools to check commercial software, you’ll be able to see the need for new multi-core aware developers. Besides, you’ll see a lot of opportunities in the multi-core age.</p>
<p>By the way, multi-core programming has a high quality weekly talk show lead by Intel experts, <a href="http://www.blogtalkradio.com/MulticoreSoftware">Parallel Programming Talk</a>.</p>
<h2>Summary</h2>
<p>While the old free lunch is over, the industry is reshaping itself to take advantage of the new microprocessors architectures of today and tomorrow.</p>
<p>Hardware will continue to advance and offer more parallel processing capabilities, even though the software industry is moving more slowly than expected.</p>
<p>Bottom line is that multi-core seems to be a really sustainable competitive advantage that requires a great paradigm shift from developers throughout the software lifecycle. There is light at the end of the tunnel. Are you ready to reach it?</p>
<blockquote><p><strong>About the author</strong>: Gaston Hillar has more than 15 years of experience in IT consulting, IT product development, IT management, embedded systems and computer electronics. He is actively researching about parallel programming, multiprocessor and multicore since 1997. He is the author of more than 40 books about computer science and electronics.</p>
<p>Gaston is currently focused on tackling the multicore revolution, researching about new technologies and working as an independent IT consultant, and a freelance author. He contributes with Dr Dobb&#8217;s Parallel Programming Portal, http://www.go-parallel and is a guest blogger at Intel Software Network http://software.intel.com.</p>
<p>Gaston holds a Bachelor degree in Computer Science and an MBA.You can find him in http://csharpmulticore.blogspot.com and http://software.intel.com/en-us/profile/417051/</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/technology/challenges-in-multi-core-part-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Challenges in Multi-Core Era – Part 2</title>
		<link>http://techdoertimes.com/technology/challenges-in-multi-core-era-part-2</link>
		<comments>http://techdoertimes.com/technology/challenges-in-multi-core-era-part-2#comments</comments>
		<pubDate>Tue, 23 Jun 2009 01:30:17 +0000</pubDate>
		<dc:creator>Gaston Hillar</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[hpc]]></category>
		<category><![CDATA[multi-core]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[parallelism]]></category>

		<guid isPermaLink="false">http://techdoertimes.com/?p=984</guid>
		<description><![CDATA[Previously I talked about the evolution of microprocessors and specialized hardware since the wide-spread adoption of multi-core began a few years ago.  In this second part to Challenges in Multi-Core Era, I&#8217;ll compare the multi-core capabilities across today’s popular operating systems. The Operating Systems No matter the version, Mac OS always had a great advantage [...]]]></description>
			<content:encoded><![CDATA[<p><a href="?p=965&amp;language=en">Previously</a> I talked about the evolution of microprocessors and specialized hardware since the wide-spread adoption of multi-core began a few years ago.  In this second part to <em>Challenges in Multi-Core Era</em>, I&#8217;ll compare the multi-core capabilities across today’s popular operating systems.</p>
<p><strong>The Operating Systems</strong></p>
<p>No matter the version, Mac OS always had a great advantage over any other desktop operating system. It knows exactly the underlying hardware because it is designed for running on Mac’s certified hardware only. You can run it on different hardware, at your own risk.  The same company develops the computers and the operating system. Leaving its great innovation aside, this is its great secret. For this reason, it can be tuned to take full advantage of specific hardware. For example, Mac OS X’s latest versions running over Intel microprocessors take advantage of vectorization, they use SSE (Streaming SIMD Extensions) and SSE2. In fact, Apple has been promoting <a href="http://developer.apple.com/hardwaredrivers/ve/simd.html">vectorization</a> and <a href="http://developer.apple.com/hardwaredrivers/ve/summary.html">SIMD</a> (Single Instruction Multiple Data) instructions in its <a href="http://developer.apple.com/documentation/HardwareDrivers/Conceptual/Mac_Pro_0608/Articles/M43_0906_arch.html">Developer Connection</a> Website.</p>
<p>However, Mac OS X Snow Leopard is giving another great step, offering <a href="http://www.ddj.com/go-parallel/blog/archives/2009/06/apples_grand_ce.html">Grand Central Dispatch</a>.  Nonetheless, there is a big problem. There are too few developers working with specific Mac developer tools. Mac is also going to the 64-bits arena.</p>
<p>FreeBSD is one of the free and open source operating systems that always offered great features when working with multiprocessor systems. FreeBSD 7 works great with multi-core CPUs as well. Therefore, many high-performance servers around the world trust in FreeBSD’s scheduler.</p>
<p>The key is the operating system scheduler.  It is responsible for distributing the physical and logical processing cores, and assigning processing time to each concurrent thread.  It performs a really complex task.  For example, an operating system running over an Intel Core i7 CPU has eight logical processing cores (it can run eight hardware threads concurrently), but four physical cores. It has to distribute dozens of threads on time-slices available from eight logical cores. Thus, the scheduler efficiency impacts on the application’s performance. An inefficient scheduler could ruin a highly parallelized application’s performance.</p>
<p>Linux works great with multi-core CPUs, <a href="http://people.freebsd.org/~kris/scaling/7.0%20Preview.pdf">FreeBSD works better</a> , but Linux does a great job. However, many desktop applications running on Linux GUIs aren’t optimized to take full advantage of multi-core. Nevertheless, Linux running as a Web server in a classic LAMP configuration is really fined tuned for multi-core.  Free Linux versions have a great advantage on the multi-core world as they don’t limit the number of cores using expensive licenses. Therefore, you can upgrade your desktop or server without needing to worry about the number of cores supported by your operating system license.</p>
<p>Both FreeBSD and Linux have a great advantage over Mac and Windows, most new deployments using these operating systems are using the 64-bits versions. Applications running in 64-bits offer more scalability than their 32-bits counterparts.  Parallel algorithms require more memory than serial ones. Most operating systems running in 32-bits can only address 4 GiB. There are some techniques to work with more memory even in 32-bits. However, they reduce the memory access performance.</p>
<p>4 GiB could seem a lot of memory. Nevertheless, as the memory map is a bit complex, you need some spaces for other purposes, like writing data to the video memory and other buffers. Hence, the operating system cannot access the whole 4 GiB of main memory. Furthermore, some operating systems limit the maximum memory addressable by an application in 32-bits mode (2 GiB in Windows standard configurations). Again, there are some techniques to work with more memory for the applications.</p>
<p>Whilst working with large images, videos and databases, these limits could be a great problem to add scalability. More cores mean more processes, more threads, more tasks or more fibers. A 2 GiB memory limit for a single process could mean a great I/O bottleneck.</p>
<p>Hence, working with 64-bits is a great step ahead. You have the same driver problems in both 32-bits and 64-bits Linux. Thus, you can install 64-bits Linux without worrying about additional problems. Working with 64-bits, you can scale as the number of cores increase without worrying about memory problems. Of course, you do have to worry about available physical memory. However, that’s another problem.</p>
<p>FreeBSD and Linux schedulers already offer an excellent support for NUMA. However, you may see nice improvements in future kernel versions. The idea is simple, the more the number of cores, the more optimizations required for an efficient scheduler.</p>
<p>Now, let’s move to Windows wonderland. Windows has a great disadvantage; each version offers different capabilities related to multi-core. You should check the maximum number of cores and the maximum memory supported by each Windows version. This doesn’t mean that Windows newest versions aren’t capable of handling multi-core CPUs. The problem is that they have different licenses and prices.</p>
<p>If you want scalability, you shouldn’t consider 32-bits versions anymore. Windows 2008 Server R2 and Windows 7 will support up to 256 logical processor cores. Nowadays, 256 logical cores seems a huge number. However, an Intel Core i7 is a quad-core CPU, but it offers eight logical cores (2 logical cores per physical core, 2 x 4 = 8). New CPUs with 8 physical cores are around the corner. Besides, they will offer 16 logical cores (2 logical cores per physical core, 2 x 8 = 16). Hence, you will see 16 graphs in your CPU activity monitor. An operating system offering support up to 256 logical cores really makes sense for the forthcoming years.</p>
<p>Despite being criticized everywhere, Windows Vista offered nice scheduler optimizations for multi-core. Windows 2008 Server R2 and Windows 7 will offer support for NUMA in their 64-bits versions. However, you must use the new functions to take full advantage of NUMA capabilities.</p>
<p>No matter the operating system, the applications must be prepared to take advantage of multi-core CPUs.<br />
The operating systems are adding multi-core optimizations. However, except from Mac OS X, most applications running on the operating system take advantage of neither multi-core nor vectorization. I really cannot understand this.</p>
<p>I do believe it is time to learn from Mac OS X. For example, Windows 7 should offer a special version, let’s call it 7 Duo. 7 Duo could require at least a dual-core CPU with SSE2. So, you wouldn’t be able to run 7 Duo on older machines. If you have newer hardware, you’d buy and install 7 Duo. The operating system would load much faser, taking full advantage of your modern hardware. Your favorite Web browser should take advantage of multi-core and vectorization when parsing HTML or XML. Check this white paper, <a href="http://www.usenix.org/event/hotpar09/tech/full_papers/jones/jones.pdf">Parallelizing the Web Browser</a>.</p>
<p>The great problem with PCs (x86 family) is the backward compatibility. It’s been an incredible advantage over the last decades. However, it is time to take advantage of modern hardware establishing baselines.<br />
The same happens with Linux. I’d love to install an Ubuntu Duo on my notebook.</p>
<p>The operating systems are really crucial to tackle the multi-core revolution. Their schedulers are very important to transform multi-core power into application performance. Vectorization and SIMD is also important and most applications are not using it. It seems logical to develop new operating system versions designed to take full advantage of really modern hardware. They would add real value to your notebooks, desktop, workstations and servers.</p>
<p>Click here for <a href="./?p=1000&#038;language=en">part 3</a> where I compare the new capabilities of programming languages and development tools with respect to multi-core processors.</p>
<blockquote><p><strong>About the author</strong>: Gaston Hillar has more than 15 years of experience in IT consulting, IT product development, IT management, embedded systems and computer electronics. He is actively researching about parallel programming, multiprocessor and multicore since 1997. He is the author of more than 40 books about computer science and electronics.<br />
<br/><br />
Gaston is currently focused on tackling the multicore revolution, researching about new technologies and working as an independent IT consultant, and a freelance author. He contributes with Dr Dobb&#8217;s Parallel Programming Portal, http://www.go-parallel and is a guest blogger at Intel Software Network http://software.intel.com.<br />
<br/><br />
Gaston holds a Bachelor degree in Computer Science and an MBA.You can find him in http://csharpmulticore.blogspot.com and http://software.intel.com/en-us/profile/417051/</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://techdoertimes.com/technology/challenges-in-multi-core-era-part-2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
