<?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>Xebia Blog &#187; Martin van Vliet</title>
	<atom:link href="http://blog.xebia.com/author/mvanvliet/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>QCon San Francisco 2009</title>
		<link>http://blog.xebia.com/2009/11/24/qcon-san-francisco-2009/</link>
		<comments>http://blog.xebia.com/2009/11/24/qcon-san-francisco-2009/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 22:25:31 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[General]]></category>
		<category><![CDATA[qcon]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=3614</guid>
		<description><![CDATA[For a few years now, November has been the month of QCon San Francisco for me. So far it has proven an excellent conference with lots of thought-provoking presentations and conversations. This year was no exception. Read on for my personal high- and lowlights. The Conference If you&#8217;ve never heard of QCon before, the conference [...]]]></description>
			<content:encoded><![CDATA[<p>For a few years now, November has been the month of <a href="http://qconsf.com/">QCon San Francisco</a> for me. So far it has proven an excellent conference with lots of thought-provoking presentations and conversations. This year was no exception. Read on for my personal high- and lowlights.<br />
<span id="more-3614"></span></p>
<p><strong>The Conference</strong></p>
<p>If you&#8217;ve never heard of QCon before, the conference bills itself as a conference for and by software developers and architects of any &#8220;denomination&#8221;. Walking the hallways you are equally likely to encounter a Rubyist, Javaan or .NET afficionado. This refreshing diversity leads to interesting presentations and coffee-corner conversations. For me as a Java developer, it also meant that the news about Java 7&#8242;s closures by and large passed me by. <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Given it&#8217;s target audience of predominantly teamleads and architects, QCon has less technical depth than, for instance, the <a href="http://www.devoxx.com/display/DV09/Home">Devoxx</a> conference. But with entire tracks dedicated to Ruby and emerging languages (including some C#/F# sessions), it certainly has more breadth. For me personally this is one of the key reasons to attend.</p>
<p><strong>Keynotes</strong></p>
<p>The keynotes this year were a bit of a mixed bag. On Wednesday, two venture capitalists spoke about what they looked for in startups when deciding where to invest. The process they described resembled the <a href="http://www.startuplessonslearned.com/2008/09/lean-startup.html">Lean Startup</a> ideas of iterating as fast as possible with direct customer involvement. Interestingly, they mentioned Scala and Groovy as developments that they as VCs keep a close eye on.</p>
<p>Don Box experimented with Twitter during his keynote. Not saying a word, he wrote tweets on his laptop for the first 20 minutes. An interesting experiment, but it didn&#8217;t manage to hold the attendees&#8217; attention. When the subsequent code demos either failed or proved unable to bring the audience back, Don himself also ran out of steam and brought the keynote to an abrupt and disappointing close. Still good of him to try something new.</p>
<p>The last keynote of the conference was by David Chappel of Oracle who presented and then demonstrated Oracle&#8217;s cloud tooling. Way too Oracle-centric for my money.</p>
<p>For next year, I really hope QCon will do away with the vendor keynotes, even if this means going back to 2 keynotes like the last few years. Someone like Kent Beck or Uncle Bob has much more interesting things to say.</p>
<p><strong>Highlights</strong></p>
<p>Dan North&#8217;s <a href="http://qconsf.com/sf2009/presentation/Adventures+of+an+Agile+Architect">presentation</a> about a challenging agile project was great. It was filled with lessons about transitional architecture and agile adoption and plenty of humor to boot.</p>
<p>In <a href="http://qconsf.com/sf2009/presentation/Lessons+Learned+from+Architecture+Reviews">Lessons learned from Architecture Reviews</a> Rebecca Wirfs-Brock discussed not only how to perform an architecture review, but also how to effectively present an architecture depending on your audience and the political environment.</p>
<p>Eric Evans talked about <a href="http://qconsf.com/sf2009/presentation/Sustainable+Design+for+Agile+Teams">incorporating modeling and design</a> into the agile development process and presented an early draft of his <a href="http://www.domainlanguage.com/processdraft/">model exploration process</a>. Eric uses this process when doing DDD consulting for clients and is useful for anyone applying the technique.</p>
<p>There was a lot of interest in lean software development and kanban as well. I attended presentations by <a href="http://qconsf.com/sf2009/presentation/Using+Kanban+to+help+dysfunctional+agile+teams">Jeff Patton</a> and <a href="http://qconsf.com/sf2009/presentation/A+Leaner+form+of+Agility">David Laribee</a> which provided useful practical tips and real-world experience. Though I didn&#8217;t attend it myself, I heard a lot of good things about <a href="http://qconsf.com/sf2009/presentation/Kanban+vs+Scrum+-+a+practical+guide">Henrik Kniberg&#8217;s</a> talk as well.</p>
<p>One of the most impressive tracks at QCon is <em>Architectures you&#8217;ve always wondered about</em>. I&#8217;m always inspired by seeing how sites such as eBay or LinkedIn handle their scaling requirements. This year&#8217;s session about <a href="http://qconsf.com/sf2009/presentation/Amazon+S3:++Architecting+for+Resiliency+in+the+Face+of+Failures">Amazon S3</a> was equally impressive, describing design patterns for building applications that can guarantee uptime in the face of hard drive, network or machine failures. To test their service, Amazon regularly holds unannounced &#8220;game days&#8221; where they take an entire datacenter offline to see if their architecture can handle it. That is some serious testing.</p>
<p><strong>Trends</strong></p>
<p>During the conference, I noticed a lot of interest in:</p>
<ul>
<li>teaching people the craft of agile software development. Presentations discussing personal traits required for programming and software apprenticeship were the result.</li>
<li>JVM-based languages like Scala and Clojure. This is hardly news, but what surprised me was the level of interest there was from non-Java developers. Several people I talked to told me that they were experimenting with these languages in their spare time while working .NET at their dayjob.</li>
<li>Continuous <strong>deployment</strong> (meaning continuous deployment to production).</li>
</ul>
<p>Bucking the trend I&#8217;ve been hearing about at other conferences, the wifi at QCon actually worked without a hitch for me. </p>
<p><strong>Conclusion</strong></p>
<p>For me, QCon was about re-discovering the agile software development craft this year. Talking with practitioners and hearing their experiences gave me lots of new ideas and inspiration to bring to my own projects. That said, most of the tracks and topics feel like they&#8217;ve been around for a while. Next year I&#8217;m hoping to hear about the &#8220;next big thing&#8221;.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2009/11/24/qcon-san-francisco-2009/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2009%2F11%2F24%2Fqcon-san-francisco-2009%2F&amp;title=QCon%20San%20Francisco%202009" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2009/11/24/qcon-san-francisco-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Definition of Done for User Stories vs. Bugs</title>
		<link>http://blog.xebia.com/2008/12/19/definition-of-done-for-user-stories-vs-bugs/</link>
		<comments>http://blog.xebia.com/2008/12/19/definition-of-done-for-user-stories-vs-bugs/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 08:31:03 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=846</guid>
		<description><![CDATA[One of the most important concepts in Scrum is the Definition of Done. With it,the Scrum team and stakeholders determine what exactly is needed to finish a user story. Typically it includes one or more of code complete, developer tested, documented and acceptance tested. In my current project, the system we are building has been [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most important concepts in Scrum is the Definition of Done. With it,the Scrum team and stakeholders determine what exactly is needed to finish a user story. Typically it includes one or more of code complete, developer tested, documented and acceptance tested.</p>
<p>In my current project, the system we are building has been accepted by the client and is in production. At the same time, however, new development on the software is taking place. The bugs and user stories resulting from the first and second activity end up on the same product backlog and are worked on by the same Scrum team. For the user stories, we include coding, development testing and documentation in the Definition of Done. This has worked well for us and allowed us to create the system in the first place.</p>
<p>However, the bugs are a different story. These are defects in the already existing software that were found by either an external testing team or in production. At first, we were using the same Definition of Done for the bugs as for the user stories. When delivering software fixes for these bugs, our customer would regularly ask us a series of<br />
questions we had no answers for:</p>
<ul>
<li>which versions/applications are impacted by this bug?</li>
<li>which versions need to be patched?</li>
<li>does this affect the interface between applications A and B?</li>
<li>is there a workaround for it? Has it been documented?</li>
</ul>
<p>We realized the Definition of Done for the bugs needs to be different from the ones used for regular user stories. By including the questions above, we create transparency about what we need to consider when solving bugs and are able to better meet the customer&#8217;s expectations.</p>
<p>What do you think? Is it a good idea to use different DoDs for user stories in one backlog?</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2008/12/19/definition-of-done-for-user-stories-vs-bugs/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2008%2F12%2F19%2Fdefinition-of-done-for-user-stories-vs-bugs%2F&amp;title=Definition%20of%20Done%20for%20User%20Stories%20vs.%20Bugs" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2008/12/19/definition-of-done-for-user-stories-vs-bugs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>QCon San Francisco 2008 &#8211; Teamwork is an individual skill</title>
		<link>http://blog.xebia.com/2008/11/21/qcon-san-francisco-2008-teamwork-is-an-individual-skill/</link>
		<comments>http://blog.xebia.com/2008/11/21/qcon-san-francisco-2008-teamwork-is-an-individual-skill/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 00:55:23 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[Agile]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=815</guid>
		<description><![CDATA[One of the best sessions of the first day of QCon for me was the talk &#8220;Teamwork is an individual skill&#8221; by Christopher Avery. The talk focused on skills and habits that we can learn to become effective team members. This is becoming more and more important since most of us are in the position [...]]]></description>
			<content:encoded><![CDATA[<p>One of the best sessions of the first day of QCon for me was the talk &#8220;Teamwork is an individual skill&#8221; by <a href="http://www.christopheravery.com/">Christopher Avery</a>. The talk focused on skills and habits that we can learn to become effective team members. This is becoming more and more important since most of us are in the position that people we have no direct influence over determine whether we are successful or not. A software development team is a good example of this.</p>
<p><span id="more-815"></span></p>
<p>Team members on a software development team are dependent on each other to achieve their goals. This interdependence forces team members to work together. Of course this is easier said than done. One of the things that makes this hard is the way people respond to problems. Typically, they go through the following steps:</p>
<p>1. Lay blame (&#8220;Which one of you code monkeys broke the build?!&#8221;)<br />
2. Justify (&#8220;It&#8217;s always broken anyway&#8230;&#8221;)<br />
3. Shame (&#8220;I must be the worst developer EVER!&#8221;)<br />
4. Obligation (&#8220;I guess I have to fix the build since that&#8217;s what we agreed on.&#8221;)<br />
5. Take responsibility</p>
<p>Only the fifth step is a good attitude for learning and growth, but in order to arrive there, the first steps will have to be passed. Being aware of these steps can help you take responsibility more quickly.</p>
<p>Christopher showed data about successful teams and the factors that can predict their success. The interesting thing is that the top 3 factors were trust, goodwill/cooperation, and a shared purpose. Technical skills appear somewhere around the 15th spot on the list. This surprised me since in my experience, technical expertise plays a larger role in project success or failure than this spot leads me to believe.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2008/11/21/qcon-san-francisco-2008-teamwork-is-an-individual-skill/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2008%2F11%2F21%2Fqcon-san-francisco-2008-teamwork-is-an-individual-skill%2F&amp;title=QCon%20San%20Francisco%202008%20%26%238211%3B%20Teamwork%20is%20an%20individual%20skill" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2008/11/21/qcon-san-francisco-2008-teamwork-is-an-individual-skill/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Team norming and chartering</title>
		<link>http://blog.xebia.com/2008/03/15/team-norming-and-chartering/</link>
		<comments>http://blog.xebia.com/2008/03/15/team-norming-and-chartering/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 15:33:18 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Project Management]]></category>

	<!-- AutoMeta Start -->
	<category>norming</category>
	<category>forming</category>
	<category>storming</category>
	<category>formed</category>
	<category>stages</category>
	<category>newly</category>
	<category>staffing</category>
	<category>preferences</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/2008/03/15/team-norming-and-chartering/</guid>
		<description><![CDATA[Staffing a new project is always a challenge. Juggling availability, experience and personal preferences, the proper mix of people has to be found that can make the project successful. Once this has happened, the project can get going and the newly formed group is expected to get on with the business of creating software. One [...]]]></description>
			<content:encoded><![CDATA[<p>Staffing a new project is always a challenge. Juggling availability, experience and personal preferences, the proper mix of people has to be found that can make the project successful. Once this has happened, the project can get going and the newly formed group is expected to get on with the business of creating software.</p>
<p>One thing that is often forgotten is that the &#8220;project team&#8221; really isn&#8217;t a team at all yet &#8212; they are a group of people who have been put together to accomplish a goal. Chances are that at least some of the people have not worked together before and that there is no common ground for them to become a team. According to <a href="http://en.wikipedia.org/wiki/Forming-storming-norming-performing">Bruce Tuckman</a>, their evolution as a team can be divided into four stages:</p>
<ol>
<li>Forming</li>
<li>Storming</li>
<li>Norming</li>
<li>Performing</li>
</ol>
<p><span id="more-323"></span></p>
<h3>Forming</h3>
<p>When a team first gets together, it enters the forming stage. Team members are usually on their best behavior, working mostly independently. The team members get to know each other and learn about the project goals and issues.</p>
<h3>Storming</h3>
<p>In this stage the team members open up to each other and confront each other&#8217;s ideas and perspectives.</p>
<p>In some cases this phase can be resolved quickly, depending on the maturity of some team members. Immature team members will begin acting out to demonstrate how much they know and convince others that their ideas are correct. This phase is necessary to the growth of the team, but can be unpleasant to members of the team who are averse to conflict.</p>
<h3>Norming</h3>
<p>When a team enters the norming state, team members adjust their behavior to each other and agree on how to work together. </p>
<h3>Performing</h3>
<p>Some teams will reach the performing stage at which point the team is able to function as a unit and finds ways to get the job done smoothly and effectively without inappropriate conflict or the need for external supervision. Team members have become interdependent.</p>
<h2>Team norming and chartering</h2>
<p>To assist in the norming stage, it helps to conduct a facilitated norming session with the entire team. In this meeting, the team performs two activities. The first, <b>team norming</b>, serves to establish working agreements that enable the team to work together. Rules, values and professional behavior fall under this heading. <b>Team chartering</b>, the second activity, deals with shared methods and tools. The resulting agreements should be prominently posted (on the wall or a Wiki) and be visible to everyone. These agreements provide the basis for effective team work and can be referred to in the case of disagreements.</p>
<p>As an example, here are some agreements the team came up with when we held a team norming session at one of our project:s:</p>
<h3>Norming example</h3>
<p><b>Core Hours</b></p>
<ul>
<li>Everybody should be present from 9h30 &#8211; 16h00</li>
</ul>
<p><b>Technical Discussions</b></p>
<ul>
<li> Important discussions should be in core hours, to prevent absentees.</li>
<li>Results from the discussions should be on the wiki.</li>
<ul>
<li>White boards sesssions should be documented on the wiki.</li>
<li>The format used for this should be: Problem, Rational, Solution, Other discarded options.</li>
</ul>
<li>Absentees should:</li>
<ul>
<li>Trust the rest of the team.</li>
<li>Reopen the discussion (after reading all documentation) if they strongly believe a mistake has been made, with a representative of the group that had the original discussion.</li>
</ul>
<li>Whiteboard discussions should be on skype (with the offshore team) when possible.</li>
</ul>
<p><b>Cell phones</b></p>
<ul>
<li>Cell phones are on during working hours</li>
<li>Personal calls are taken outside of the team area</li>
</ul>
<h3>Chartering example</h3>
<p><b>Code Quality</b></p>
<ul>
<li>Everybody should check the code quality when they check in code (use CCs maven reports).</li>
<li>Everybody can suggest changes to quality standards.</li>
<li>We strive to prevent technical debt.</li>
<li>Discuss refactorings with as many people as appropriate (could be just pair).</li>
<li>Try to include refactorings in the User Story.</li>
<li>Balance refactoring with adding new functionality.</li>
<li>Javadoc: We follow the company checkstyle standard.</li>
<li>We have a standard header, which contains a copyright notice.</li>
</ul>
<p><b>Quality targets</b></p>
<ul>
<li>Test coverage: 90% overall. UI code should be tested by other means (logic should be unittested).</li>
<li>We strive to get the number of checkstyle violations as low as possible.</li>
</ul>
<p><b>Continuous Integration</b></p>
<ul>
<li>We try to check in at least once every day</li>
<li>If the build breaks, we fix it as soon as possible</li>
</ul>
<h2>Conclusion</h2>
<p>In my experience, team norming and chartering helps to give a newly-formed team some common ground from which to start. Open discussion of the practices and processes used to develop software ensure that everyone has a chance to contribute. The results from such a session can be referred to in case of disagreements and when new people join the team.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2008/03/15/team-norming-and-chartering/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2008%2F03%2F15%2Fteam-norming-and-chartering%2F&amp;title=Team%20norming%20and%20chartering" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2008/03/15/team-norming-and-chartering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QCon San Francisco</title>
		<link>http://blog.xebia.com/2007/11/19/qcon-san-francisco/</link>
		<comments>http://blog.xebia.com/2007/11/19/qcon-san-francisco/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 17:24:55 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
				<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<category>selection</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/2007/11/19/qcon-san-francisco/</guid>
		<description><![CDATA[Last week, the first QCon conference in the US was held. The conference is targeted at team leads, architects and project managers and aims to be the best environment for learning and networking. It is a relatively small-scale conference (about 400 attendees) that provided an intimate atmosphere and allowed for plenty of discussion and networking [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, the first QCon conference in the US was held. The conference is targeted at team leads, architects and project managers and aims to be the best environment for learning and networking. It is a relatively small-scale conference (about 400 attendees) that provided an intimate atmosphere and allowed for plenty of discussion and networking with other attendees and speakers. These are my impressions and topics I found most interesting.<br />
<span id="more-324"></span><br />
<strong>Scalability &#038; performance</strong><br />
Judging by the sheer number of people attending the architecture &#038; scalability sessions, these are hot topics among the attendees. </p>
<p>Two presentations by eBay architects gave some insight into what must surely be the most scalable Java application on the internet today. eBay architect Dan Pritchett described how their architecture deals with <a href="http://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/DanPritchett_ArchitectingForLatency.pdf">latency</a>. Instead of using ACID for their application, ensuring atomic and consistent data at all times across all databases, they employ the BASE (<strong>B</strong>asically <strong>A</strong>vailable, <strong>S</strong>oft-state, <strong>E</strong>ventually consistent) paradigm to improve availability and response time by sacrificing consistency and atomicity.</p>
<p>Randy Shoup discussed eBay&#8217;s architecture in more detail. His presentation, <a href="http://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/RandyShoup_eBayArchPrinciples.pdf">The eBay Architecture: Striking a balance between site stability, feature velocity, performance and cost</a>, highlighted the strategies eBay uses to scale their application. By applying <em>functional segmentation</em> (dividing the application by functionality) and <em>horizontal split</em> (for each piece of functionality, use multiple instances that are interchangeable) their architecture is able to scale to the required number of users. When you&#8217;re dealing with sites this size (to give you an idea, eBay has 16,000 application servers and produces 1.5TB log data <em>per day</em>) everything is custom &#8212; deploying new versions of the application, analyzing log files, persistence of data using partitioning, eBay uses custom built tools for everything. Very interesting to see, even if we don&#8217;t all build applications of this size.</p>
<p><strong>DSLs</strong><br />
While not a separate track, DSL (Domain-Specific Languages) were an oft discussed topic. One presentation on this topic, <a href="http://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/NealFord_BuildingDsls.pdf">Building DSLs in Static and Dynamic Languages</a> presented an overview of the motivations for using DSLs and categorized them as either <em>internal</em> (meaning implemented in an existing language) or <em>external</em> (using a custom-built lexer/parser). The former often takes the form of a fluent interface &#8212; a human-friendly, readable API. The presentation&#8217;s Java examples showed use of method-chaining to make statements more readable. A testament to the attention for this topic was Joshua Bloch&#8217;s statement that he was preparing a JSR that aims to, among other things, improve support for method chaining in the Java language by implicitly returning <strong><em>this</em></strong> from <strong><em>void</em></strong> methods.</p>
<p><strong>Non-Java</strong><br />
QCon provided a broad view of enterprise IT, not focusing on one language or platform. Instead, tracks on advances in both .NET and Ruby were presented and well attended. To underline this, participants in a panel discussion on the future of Java (which included Joshua Bloch and Charles Nutter) agreed that the Java language itself will become less important than the Java platform. Languages like JRuby and Jython are maturing and gaining in popularity. Rather than languages, tools and frameworks will determine which computing environment will &#8220;win&#8221; in the long run.</p>
<p><strong>Agile</strong><br />
Of course, the agile movement was not missing from this conference. A track about the current &#8220;Challenges in Agile&#8221; brought a number of agile-focused presentations. The most interesting of these, <a href="http://qcon.infoq.com/sanfrancisco/file?path=/QConSF2007/slides/public/JuttaEckstein_AgileInTheLarge.pdf">Agile software development in the large</a> discussed issues surrounding running agile projects with multiple teams, often geographically dispersed. Since I&#8217;m involved in just such a project, the presentation yielded little new insights, but confirmed many of our practices.</p>
<p><strong>Conclusion</strong><br />
The technical content was well-presented and, overall, quite in-depth and useful. Of all tracks, the  <strong>Architectures you&#8217;ve always wondered about</strong> track was most interesting as well as most popular. The track on <strong>Architecture Quality</strong> did not focus on software architecture quality as I&#8217;d hoped, but instead discussed qualities of system architectures.</p>
<p>An improvement would be to include sessions on topics like team dynamics or estimating and planning, which are certainly useful for team leads and project managers.</p>
<p>All in all, this was a good conference and more than enough reason to look forward to the next QCon, next year in London.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2007/11/19/qcon-san-francisco/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2007%2F11%2F19%2Fqcon-san-francisco%2F&amp;title=QCon%20San%20Francisco" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2007/11/19/qcon-san-francisco/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Handling bugs with Scrum</title>
		<link>http://blog.xebia.com/2007/10/28/handling-bugs-with-scrum/</link>
		<comments>http://blog.xebia.com/2007/10/28/handling-bugs-with-scrum/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 16:09:26 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>

	<!-- AutoMeta Start -->
	<category>owners</category>
	<category>iteration</category>
	<category>minor</category>
	<category>bugs</category>
	<category>transparency</category>
	<category>backlog</category>
	<category>testers</category>
	<category>product</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/2007/10/28/handling-bugs-with-scrum/</guid>
		<description><![CDATA[On my current project, we are using Scrum to build a data processing and publishing application. Our aim is to deliver working, tested software each sprint. Our team includes testers that test the software we make, as we make it. Any bugs they find we try to resolve as soon as they are discovered. Sometimes, [...]]]></description>
			<content:encoded><![CDATA[<p>On my current project, we are using Scrum to build a data processing and publishing application. Our aim is to deliver working, tested software each sprint. Our team includes testers that test the software we make, as we make it. Any bugs they find we try to resolve as soon as they are discovered. Sometimes, though, bugs can not be resolved in the sprint in which they are found. These bugs must be dealt with using the Scrum process.</p>
<p>We use the following process for this. At the end of a sprint, all unresolved bugs classified by the testers as major or higher are entered onto the product backlog as separate items. Issues of minor importance are collected in our bugtracking tool. At the planning meeting for the next sprint, the product owners select the highest priority items (including bugs) from the product backlog for inclusion on the sprint backlog. Items that are not selected remain on the product backlog, possibly for next sprints.</p>
<p>This process provides transparency about the workload left to the product owners, both in terms of user stories to be developed as well as outstanding issues. They can decide on the relative priority of these, giving them full control over the sprint scope. It also creates a bridge between our issue tracking system and the Scrum process, ensuring that these are not two separate worlds.</p>
<p>For this to work it is critical that the testers and the product owners agree on what constitutes a major versus a minor bug. If this is not the case, either unimportant issues show up on the product backlog (and will most likely remain there) or, worse, important issues are left in the minor category, with no visibility to the product owners. A regular review of minor issues with the product owners mitigates this risk and provides further transparency to stakeholders.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2007/10/28/handling-bugs-with-scrum/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2007%2F10%2F28%2Fhandling-bugs-with-scrum%2F&amp;title=Handling%20bugs%20with%20Scrum" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2007/10/28/handling-bugs-with-scrum/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Masters of Java</title>
		<link>http://blog.xebia.com/2005/12/05/masters-of-java/</link>
		<comments>http://blog.xebia.com/2005/12/05/masters-of-java/#comments</comments>
		<pubDate>Mon, 05 Dec 2005 14:44:43 +0000</pubDate>
		<dc:creator>Martin van Vliet</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/blog.xebia.com/www/wp-content/plugins/autometa/autometa.php</b> on line <b>303</b><br />
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/2005/12/05/masters-of-java/</guid>
		<description><![CDATA[Picture this: a dimly-lit basement-like room filled with PCs, a large projection screen showing the current standings and 30 teams of 2 people each hunched over a computer. Although just as hectic, this is not a multiplayer game of Quake or Doom, but rather the Masters of Java programming contest. The contest runs for a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.com/wp-content/uploads/2006/06/moj.gif" alt="MoJ" align="left"><strong>Picture this:</strong> a dimly-lit basement-like room filled with PCs, a large projection screen showing the current standings and 30 teams of 2 people each hunched over a computer. Although just as hectic, this is not a multiplayer game of Quake or Doom, but rather the <a href="http://www.nljug.org/moj">Masters of Java</a> programming contest.</p>
<p>The contest runs for a whole day, with each team competing in 5 tasks (out of 6, each team was assigned one task they would not be competing in). Each task contains one or more Java source files, with one class or method still to be implemented. The client software (an applet) behaves as an IDE (though no handy Javadoc lookup or code completion) and is used to compile the code, run the testcases and submit the results.</p>
<p>Our team (named <em>Inspiring 42</em> after a counting mishap <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) participated for the first time. Although we did have experience in other programming contests, the MoJ format was new to us: the realtime program/compile/test cycle, the short timeline for each task (30 minutes) and the large visible clock (and accompanying sound effects, like the crash of a gong at the start of the round and an annoying bleep-bleep sound when another team submits a solution).</p>
<p>The organizers published a preview of the cases on the MoJ site days before the event. That a lot of the contestants had looked at these and guessed what the tasks might be showed during the first assignment (validating Sudoku puzzles). Solutions for the Sudoku problem were entered very quickly. We had also done our homework and managed to be the first competing team to succesfully submit a solution.</p>
<p>For the second task we had to implement a simple load-balancing algorithm. Again, we finished first. Everything was looking good and the main price (a SUN Opteron workstation) was almost ours!</p>
<p>The third task had to do with regular expressions and this was really tough for us. At the end of the alotted 30 minutes we still had not found the correct regular expressions to solve this problem. Funny enough, neither had the winning team &#8212; they solved the problem by creating an anonymous inner class that parsed the input using a StringTokenizer. Hardly what the organizers had in mind, but it worked and earned them 20 points. I just wish we had thought of it! <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Obviously, this debacle caused us to drop to the number two spot. Worse, the team in the #3 position did not compete in the first task, so they could pass us if they performed well in the task we would not compete in. This was the fifth task: performing MD5 hash calculations to find suspect employees. We did well (finishing first again) but that did not score us any points since we weren&#8217;t competing. So now we were in the #3 position.</p>
<p>The last official assignment, AaiRobot, was a funny one. The idea was to guide a robot through a maze to it&#8217;s home location. There was very little information to go on, though, only a bump sensor, light sensor (to sense the color of the tile the robot was on) and a test to see whether or not this was the destination square. There was no indication of how far the robot was from the final square.</p>
<p>Also, the last test case required the robot to walk along a corridor and, halfway through, turn left without any indication. After attempting to come up with a generic algorithm, we realized a different approach was needed and, using trial and error, we determined the exact location at which to turn left (using the total distance travelled by the robot) that worked for the test case and submitted the result.</p>
<p>Even though we gave it our best shot we never recovered from the regexp task. The robot-task was a weird one and I&#8217;m not sure I like it. In the end, we did not submit a correct algorithm but a program that manages to complete the testcases. A small change such as moving the destination square in the final test case left by one square will break our &#8220;solution&#8221;.</p>
<p>All in all, the contest was a great experience and a lot of fun. We&#8217;ll be sure to participate again next year. And you better believe we will have studied up on regular expressions by then! <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><em>Team Inspiring 42 a.k.a. Erik Rozendaal / Martin van Vliet</em></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2005/12/05/masters-of-java/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2005%2F12%2F05%2Fmasters-of-java%2F&amp;title=Masters%20of%20Java" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2005/12/05/masters-of-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/author/mvanvliet/feed/ ) in 0.69823 seconds, on Feb 9th, 2012 at 4:43 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 5:43 pm UTC -->
