<?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>Chris Johnston &#187; Application Development</title>
	<atom:link href="http://www.fuzzylizard.com/archives/category/application-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fuzzylizard.com</link>
	<description>Web development and design with a little VFX thrown in for fun</description>
	<lastBuildDate>Sun, 30 Oct 2011 14:23:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>What&#8217;s the point</title>
		<link>http://www.fuzzylizard.com/archives/2011/01/18/1081/</link>
		<comments>http://www.fuzzylizard.com/archives/2011/01/18/1081/#comments</comments>
		<pubDate>Wed, 19 Jan 2011 02:53:18 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1081</guid>
		<description><![CDATA[After reading Dan North&#8217;s post on the Manifesto for Software Craftsmanship entitled &#8220;Programming is not a craft&#8221; and Liz Keogh&#8217;s post, &#8220;Why I didn’t sign the Software Craftsmanship manifesto&#8220;, it got me thinking about what is the point? What is it that we should be doing as software developers? Is the point of software development [...]]]></description>
			<content:encoded><![CDATA[<p>After reading Dan North&#8217;s post on the <a href="http://manifesto.softwarecraftsmanship.org/">Manifesto for Software Craftsmanship</a> entitled &#8220;<a href="http://dannorth.net/2011/01/11/programming-is-not-a-craft/">Programming is not a craft</a>&#8221; and Liz Keogh&#8217;s post, &#8220;<a href="http://lizkeogh.com/2011/01/14/why-i-didnt-sign-the-software-craftsmanship-manifesto/">Why I didn’t sign the Software Craftsmanship manifesto</a>&#8220;, it got me thinking about what is the point? What is it that we should be doing as software developers?</p>
<p>Is the point of software development to create clean, aesthetically beautiful code containing clever implementations to business problems or is the point to deliver working software? If you know anything about me then you probably already know what I am going to say, but, for those who are new, I will continue. I personally think the point is to deliver software. Everything else is how we do our job (well, except the clever part).</p>
<p>One problem with universities these days is that they teach people how to create programs. They do not teach students how to create software. When creating software, programming is probably the task that you do the least of. At least programming as it is taught in school. Developing software is about creating a solution that meets the user&#8217;s needs and solves their pain points. It is not about the cool heuristic you developed. No one cares about that stuff. They care about getting their work down and whether your software will help or hinder that goal. As such, you spend more time testing code, modifying old code, gathering and understanding business requirements, talking to other developers as opposed to sitting there and just churning out code.</p>
<p>Creating clean code that is easy to maintain and extend is how we go about reaching the goal of delivering working software; it is not the goal itself. I think this is the biggest mistake many programmers make. They mistake the process with the goal. And I agree with Dan and Liz that it is a pitfall for people signing the manifesto. </p>
<p>Now, don&#8217;t get me wrong, clean, maintainable code is important for the life of the software that is being delivered and your sanity as a developer. I am currently working on an application that was created by programmers, not software developers, and we are having to rip parts out and rework other parts in order to increase the application&#8217;s lifespan. So clean code is important and the goals of the craftsmanship movement are important, but they are the tools, not the product.</p>
<p>This is like a group of Doctors getting together and signing a manifesto for sterilizing their scalpels. Yes, it is important, and at one point in time, it was very much needed. But sterilizing tools was never the end goal, keeping their patients healthy and alive was the point and sterilization was only a means to that end. </p>
<p>If your goal is delivering working software then you only have time to code until it is good enough and test until it is good enough. There is no time to be clever or to make it perfect (there is no such thing anyway). Create the initial code using things like the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID principles</a> and TDD, but in the end, if you haven&#8217;t delivered software to your client and stakeholders then you are not doing your job and you have missed the point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2011/01/18/1081/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip &#8211; use github to &#8220;steal&#8221; code</title>
		<link>http://www.fuzzylizard.com/archives/2011/01/14/1083/</link>
		<comments>http://www.fuzzylizard.com/archives/2011/01/14/1083/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 02:34:28 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1083</guid>
		<description><![CDATA[One trick that I use when I can figure out an API or how to test something (like testing controllers that use AuthLogic) is to look for the particular method––in this case activate_authlogic––on github and look at how other developers use it. One of the problems with tutorials and documentation is that it never shows [...]]]></description>
			<content:encoded><![CDATA[<p>One trick that I use when I can figure out an API or how to test something (like testing controllers that use AuthLogic) is to look for the particular method––in this case <code>activate_authlogic</code>––on <a href="http://github.com">github</a> and look at how other developers use it. </p>
<p>One of the problems with tutorials and documentation is that it never shows how to test code that uses the gem. This was the case for me today with <a href="https://github.com/binarylogic/authlogic">AuthLogic</a>. I was having a hard time figuring out where to put <code>activate_authlogic</code> and the code for logging in a user in order to test a controller. A quick search on github provided more than enough examples for both <a href="http://rspec.info/">RSpec</a> and <a href="http://ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html">Test::Unit</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2011/01/14/1083/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The importance of a shared vocabulary</title>
		<link>http://www.fuzzylizard.com/archives/2011/01/12/1074/</link>
		<comments>http://www.fuzzylizard.com/archives/2011/01/12/1074/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 05:15:26 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1074</guid>
		<description><![CDATA[One problem I have seen on several projects I have been on, including my current project, is that the developers and the business stakeholders use different vocabularies when describing things. Eric Evans, in his book Domain-Driven Design, stresses the importance of having a shared vocabulary where the devs use the same language as business. As [...]]]></description>
			<content:encoded><![CDATA[<p>One problem I have seen on several projects I have been on, including my current project, is that the developers and the business stakeholders use different vocabularies when describing things. Eric Evans, in his book <a href="http://www.amazon.ca/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=sr_1_1?ie=UTF8&#038;qid=1294894417&#038;sr=8-1">Domain-Driven Design</a>, stresses the importance of having a shared vocabulary where the devs use the same language as business.</p>
<p>As an example of this, I recently had to make a change to my cell phone account. It was originally under my wife&#8217;s name and I had to move it so it was under my name. I went into a Roger&#8217;s store and attempted to describe what I wanted. The result was several strange looks. Eventually the sales person asked if I need to do a &#8220;Transfer of Responsibility?&#8221; To which I said yes. Immediately there was understanding between everyone involved. We were speaking the same language.</p>
<p>Having a shared language can be problem within a single application, not just between developers and business. The project I am working on right now contains a Person model that handles people. In the database, it has a People table. The problem is that every where else, we use the term Member and there are a few places where the term User is used. This makes working on the code confusing along with trying to describe it other developers and business.</p>
<p>The solution, contrary to what developers believe, is to learn the language that your clients and stakeholders use. They are the domain experts and they are the ones who will eventually use the application your are building. As such, one of the best methods of guaranteeing that you build the right solution is to learn the language of the domain in which the problem you are solving resides.</p>
<p>The biggest advantage of doing this is that it allows the developers and the users to have intelligent conversations without one group having to translate. Everyone know what everyone else is talking about and it allows decisions to be made quickly and for problems to be found and understood quickly. </p>
<p>Imagine a scenario where you have two developers discussing a particular user story. The discussion is over a bit of confusion and ambiguity in the story. A business user walks by and overhears the two developers talking. Instead of walking past, shaking his head at the foreign language the developers are speaking in, he is able to jump in and point them in the right direction. The reason is because he understands what they are talking about. Additionally, the developers very quickly understand the solution provided and don&#8217;t need to translate it.</p>
<p>In short, I believe that a non-developer should be able to sit down at a developers computer and start reading and understanding the code in front of her. The reason is that the objects, methods, and classes should all reflect the language of the domain. They may not understand the syntax or logic, but they should recognize the operations, names, and language as their own.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2011/01/12/1074/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The importance of User Experience</title>
		<link>http://www.fuzzylizard.com/archives/2009/09/14/1062/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/09/14/1062/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 23:06:10 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1062</guid>
		<description><![CDATA[One of the things that I am passionate about is the need for applications to be both usable and aesthetically pleasing for the people using them. If your application does not meet these two requirements then, in my opinion, you have failed. This means that every development team needs UX people. Or as Michael Feathers&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that I am passionate about is the need for applications to be both usable and aesthetically pleasing for the people using them. If your application does not meet these two requirements then, in my opinion, you have failed. This means that every development team needs UX people. Or as <a href="http://michaelfeathers.typepad.com/michael_feathers_blog/2009/09/thoughts-on-the-future-of-the-boutique-software-shop.html">Michael Feathers&#8217; puts it</a>, &#8220;To put it more boldly: it&#8217;s not that development teams need UX people, it&#8217;s more like UX teams need developers.&#8221;</p>
<p>Michael Feathers has written a blog post relating software development to cooking. In it, he asks the question, &#8220;Where are the high-end restaurants of software development?&#8221; His answer is that they are in the smaller boutique development shops popping up around the world. The shops that adhere to the ideas behind the <a href="http://manifesto.softwarecraftsmanship.org/">Software Craftsmanship movement</a>.</p>
<p>In this article, he also states that in this day and age, UX is the defining aspect of developing applications and those teams that do not understand that developing software is all about the customer are doomed. I can&#8217;t agree more with this idea. The only thing that matters to a customer of your software is how easy and pleasing is it to use. We as developers can no longer have the attitude that we will create software and, well, the users will just have to learn how to use it. Everything we do needs to be customer and user centered.</p>
<p>Michael also puts forth the idea that as developers we need to learn how to do UX and be able to use those tools when called on. We don&#8217;t need to be experts in design or layout, but we should have a shallow understanding of the principles and how to apply them when sitting with a customer.</p>
<p>I want to take this one step further by saying that I think UX also has a responsibility to share their knowledge with developers and have them present during every stage of the UI development process. Just as it is wrong to have developers who know nothing about usability, it is just as wrong to have UX people who do everything in secret and then simply hand developers a design expecting them to implement it. </p>
<p>We need to tear down this curtain that exists between developers and UX and work needs to be done on both sides. One of the best projects I ever worked on involved developers working with designers and UX people creating wireframes and doing lo-fi prototyping with the users throughout the entire development process. Everyone on the team owned the success and failure of the application and in the end we created one of the best apps I have ever worked on. We were able to create an application that the users were excited to start using.</p>
<p>I have also worked on teams were the UX team showed up to standups in the morning and then handed designs to the developers. There were no discussions on whether something was implementable and there was no insight into where the designs came from. For all I know they outsourced the photoshop work to penguins in Antarctica. How can the team own the entire application if one part of it is created in isolation?</p>
<p>If you are passionate about creating software applications that can actually be used by people and passionate about the quality of those application then go read <a href="http://michaelfeathers.typepad.com/michael_feathers_blog/2009/09/thoughts-on-the-future-of-the-boutique-software-shop.html">Michael Feathers&#8217; article.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/09/14/1062/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manifesto for Software Craftmanship</title>
		<link>http://www.fuzzylizard.com/archives/2009/03/10/1021/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/03/10/1021/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 17:04:00 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Application Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1021</guid>
		<description><![CDATA[A few days ago, some software developers got together at 8th Light and created the Manifesto for Software Craftsmanship. If you are a professional software developer who cares about the code you are creating, then you have a responsibility to sign and adhere by the principles laid out in the manifesto. As aspiring Software Craftsmen [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago, some software developers got together at 8th Light and created the <a href="http://manifesto.softwarecraftsmanship.org/">Manifesto for Software Craftsmanship</a>. If you are a professional software developer who cares about the code you are creating, then you have a responsibility to sign and adhere by the principles laid out in the manifesto. </p>
<blockquote><p>
As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:</p>
<p>Not only working software, but also well-crafted software<br />
Not only responding to change, but also steadily adding value<br />
Not only individuals and interactions, but also a community of professionals<br />
Not only customer collaboration, but also productive partnerships</p>
<p>That is, in pursuit of the items on the left we have found the items on the right to be indispensable.
</p></blockquote>
<p>For a better understanding of what this means, check out this video of a presentation that Robert Martin did on <a href="http://www.infoq.com/presentations/craftmanship-ethics">Craftmanship and Ethics</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/03/10/1021/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keeping tech tasks inside the dev team</title>
		<link>http://www.fuzzylizard.com/archives/2009/02/09/1010/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/02/09/1010/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 13:25:35 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Application Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1010</guid>
		<description><![CDATA[One thing I have been thinking about lately is who owns, or should know about, tech tasks. The team I am on right now, we need to justify every tech task we do with business and if business value for that task cannot be found then it doesn&#8217;t get done. For some reason, I really [...]]]></description>
			<content:encoded><![CDATA[<p>One thing I have been thinking about lately is who owns, or should know about, tech tasks. The team I am on right now, we need to justify every tech task we do with business and if business value for that task cannot be found then it doesn&#8217;t get done.</p>
<p>For some reason, I really don&#8217;t like this approach and for the first time, I have read a blog that expresses what I have not been able to as of yet. <a href="http://www.pitheringabout.com/?p=313">John Pither calls this tech leakage and explains it as such</a>:</p>
<blockquote><p>If we can see the dev team as an animal in the jungle (and so forth we have other ‘animals’ such as QA teams, BA teams, Project Managers etc), then ‘dev team leakage’ refers to the cutting open of such a large and volatile jungle beast and of letting it’s gooey entrails slide out and slither amongst the wider natural setting of which the poor animal finds itself.</p>
<p>Yep. Basically it’s about breaking encapsulation. In the case of a dev team, there are many inner workings that need not be externalised to the outside world. </p></blockquote>
<p>As graphic as this analogy is, I really like it (okay, I have a morbid sense of humour). Tech tasks should belong to the dev team and simply be a part of how we do our day to day jobs. I find that I spend far too much time explaining why I am doing a particular refactoring to a BA or business because the team does not own these tasks. In addition, far too many tasks never get done because we cannot justify them with business value. </p>
<p>One consequence of this anti-pattern is that nothing really comes out of retrospectives. Yes, do them every week, however, every action we create must first be justified with business and given some business value before we are able to carry it out. This means that we never have the chance to clean house and carry out those dev tasks that we should be doing as a part of our jobs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/02/09/1010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Re-estimating cards after they are played seems wrong</title>
		<link>http://www.fuzzylizard.com/archives/2009/02/08/1008/</link>
		<comments>http://www.fuzzylizard.com/archives/2009/02/08/1008/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 12:41:38 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Application Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=1008</guid>
		<description><![CDATA[One practice that I have observed that seems wrong to me is re-estimating cards after they have been completed. The dev pair completes the story card and the BA comes over and asks them to re-estimate the card based on the implementation. From the BA&#8217;s point of view, s/he is asking for the re-estimation for [...]]]></description>
			<content:encoded><![CDATA[<p>One practice that I have observed that seems wrong to me is re-estimating cards after they have been completed. The dev pair completes the story card and the BA comes over and asks them to re-estimate the card based on the implementation.</p>
<p>From the BA&#8217;s point of view, s/he is asking for the re-estimation for planing purposes. The reason given is so they can accurately plan out the stories for the next iteration. On this same project, there is also a lot of talk about correctly estimating cards. To me, this completely misses the point of estimating cards.</p>
<p>Story card estimation is a best guess of either the complexity, the story card size, or the ideal days needed to implement the card. That is all. This means that the estimations are inherently wrong. The point though is that they will be consistently wrong and over time, with the addition of velocity, the amount of work a team can get done will be correct.</p>
<p>If a team consistently underestimates, then the first iteration they will do more cards then they committed to. The velocity will show this and can be corrected the next iteration. So the first iteration they commit to doing 12 points and they actually do 15. The next iteration, simply select 15 points worth of story cards. Rinse and repeat.</p>
<p>By asking devs to re-estimate cards once they are completed you are breaking the corrective effect that velocity has on the process. The points on the cards carry less meaning because they have been adjusted after the fact. This means you now need to add a correcting feature into the teams velocity. </p>
<p>The team committed to doing 12 points and completed 15 points, but two of the cards they originally committed to doing were actually 1s and not 3s so did they in fact do 15 points or 19 points? So which cards for the next iteration are going to be re-estimated down and which cards will go up? Does this mean that the team should be doing 15 or 20 points for the next iteration?</p>
<p>My guess for the re-estimation requests is that the BAs do not trust the process. They do not believe that velocity will naturally add the needed correction. So instead, they try to do it themselves. In addition, on this particular project, I also think that business is trying to add to many features during a single iteration and the scope is just too large.</p>
<p>I think there is a time and place for re-estimating a story card, but after the card has been played it not one of them. If, before playing a card, more information becomes available that directly reflects the implementation of a card, that card should be re-estimated. This might include the outcome of a spike or the introduction of a new technology or a change in the development team for instance. The point is that this happens before a card is played, not after.</p>
<p>What do others think, can a story card&#8217;s estimate be updated after it has been played?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2009/02/08/1008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Of kickoffs and walk throughs</title>
		<link>http://www.fuzzylizard.com/archives/2008/12/02/985/</link>
		<comments>http://www.fuzzylizard.com/archives/2008/12/02/985/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:41:04 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=985</guid>
		<description><![CDATA[My current project, on the surface, is great. We do Agile. We pair, we practice TDD, we have stories that the business prioritize for us, we have a nice card wall where we can see our cards move from the story backlog to completed. We have continuous integration with unit tests, integration tests, acceptance tests [...]]]></description>
			<content:encoded><![CDATA[<p>My current project, on the surface, is great. We do Agile. We pair, we practice TDD, we have stories that the business prioritize for us, we have a nice card wall where we can see our cards move from the story backlog to completed. We have continuous integration with unit tests, integration tests, acceptance tests and selenium tests. And we care when the build breaks. We also have weekly retrospectives even though our iterations last two weeks.</p>
<p>I should have nothing to complain about, and yet, I do. However, I would like some feedback on my complaints. I think the team could be doing things better and would like some other opinions on a gripe that I have.</p>
<p>We have a practice of kicking off stories before a pair can begin work. This involves getting the BA, the producer (the business representative), the tech lead, the tester, and the rest of the team together to discuss a single story that a pair is about to work on. The reason that I have been given for this is that stories change too quickly and frequently and, therefore, cannot be reviewed any earlier then just before the pair begins work.</p>
<p>People are busy though, especially the business representative, and thge pair ends up sitting around waiting until everyone is available. A few of us have put forth the idea of doing a kickoff of all the stories committed to for an iteration during the iteration planning meeting. Then simply letting the pair work on the story when they get to it. If there are changes, it is the devs responsibility to read the story and discuss those changes with the BA and business. The conversation shouldn&#8217;t end just because everyone has done a kickoff.</p>
<p>Management, however, squashed this suggestion pretty quickly for the reason stated above. My take is that they don&#8217;t trust the devs to properly read and implemented the story. Which brings us to walk through.</p>
<p>Walk throughs happen after a story is dev complete and once again involves the BA, the producer, the tech lead, the tester, and the pair. Everyone goes through the story, dissecting it to ensure that it has been implemented correct. The pair cannot work on anything else until the walk through has been done. In the end, this means that the devs have to wait for everyone to be available.</p>
<p>The interesting thing is that even with all this scrutiny, I am not convinced that it results in any less bugs or better code. As far as I can tell, it simply wastes everyone&#8217;s time. The amazing thing is that the team continually votes to keep kickoffs and walk throughs as part of the process and adds things to make then either longer or harder to perform.</p>
<p>I can see value in each of these practices. Once you have completed a story, it is nice to have another pair of eyes take a look and double check that you haven&#8217;t missed anything. And before you start, it is important to have that conversation with the BA and business in order to clarify exactly what it is that they want. Both of these are vital parts of software development.</p>
<p>I think the part that bugs me is the lack of trust that is implied by the way the two practices are carried out. I feel that as a dev I am assumed guilty until proven otherwise. Until I can repeat back to the BA and producer what is written in the story, I am deemed not worthy to begin work on it. Likewise, until the business, BA, and tech lead have all signed off on a story, it is deemed incomplete simply because it was implemented by a developer. Or I could be reading to much into things.</p>
<p>Other devs have also commented on the lack of trust they feel due to these two practices, so I don&#8217;t think it is just me. But how do you go about changing this kind of culture? And is it even worth changing? It gets frustrating when these issues come up in retro and either management simply says no or the rest of the team votes to make them even more complicated and time consuming. I am not sure how to change an entire teams mind, especially when it seems to most people that it is working fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2008/12/02/985/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The point of Continuous Integration?</title>
		<link>http://www.fuzzylizard.com/archives/2008/08/29/975/</link>
		<comments>http://www.fuzzylizard.com/archives/2008/08/29/975/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 11:56:28 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Application Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=975</guid>
		<description><![CDATA[I have always thought the point of Continuous Integration was feedback. By doing builds and running tests (unit, integration, and functional) as often as possible it provided the team a high degree of confidence that the application worked. Artifacts are simply a nice side effect. I was in a retrospective today where the importance of [...]]]></description>
			<content:encoded><![CDATA[<p>I have always thought the point of Continuous Integration was feedback. By doing builds and running tests (unit, integration, and functional) as often as possible it provided the team a high degree of confidence that the application worked. Artifacts are simply a nice side effect.</p>
<p>I was in a retrospective today where the importance of the build seemed to focus more on the artifacts. We were discussing pipelining our build and the discussion centered around breaking the build down by artifacts as opposed to areas of feedback.</p>
<p>Personally, I find this a little strange. The last several projects I have been on, the various builds we had were all about providing feedback as quickly as possible. To this end, the first build ran unit and integration tests, the second build ran all the functional tests (think Selenium), with other builds running more in depth functional and acceptance tests.</p>
<p>To <a href="http://martinfowler.com/articles/continuousIntegration.html">quote Martin Fowler</a>, &#8220;The whole point of continuous integration is to find problems as soon as you can.&#8221; To me, this sounds like information and feedback, not artifacts.</p>
<p>My question to the greater, and more experienced, community is what do you think, should pipelining a build be about artifacts or feedback or a bit of both? Currently, one of our builds takes 2+ hours and we are looking to cut that down. I am not sure we can do this if we concentrate on artifacts instead of feedback. What do others think?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2008/08/29/975/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Playing with C# 3.0 and .NET 3.5</title>
		<link>http://www.fuzzylizard.com/archives/2008/07/02/949/</link>
		<comments>http://www.fuzzylizard.com/archives/2008/07/02/949/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 05:00:28 +0000</pubDate>
		<dc:creator>Chris Johnston</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.fuzzylizard.com/?p=949</guid>
		<description><![CDATA[It has been quite a while since my last post. Mostly that is because I have been fairly busy with a new project and busy trying to get my sorry butt into shape (it is amazing how much time exercising can take up). Anyway, the new project uses C# 3.0 and .NET 3.5, ASP.NET MVC [...]]]></description>
			<content:encoded><![CDATA[<p>It has been quite a while since my last post. Mostly that is because I have been fairly busy with a new project and busy trying to get my sorry butt into shape (it is amazing how much time exercising can take up). Anyway, the new project uses C# 3.0 and .NET 3.5, <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> and <a href="http://jquery.com/">jQuery</a>. All three are new to me and I have to say that I really like all three.</p>
<p>C# 3.0 is a really nice language. It seems to have gotten generics correct making for some really nice code, especially were the database layer is concerned. We are using LINQ to SQL and we have been able to implement a single class for the repository which works with whatever model object type we give it. I also really like the inclusion of Lambdas and delegates, which make for some very clean code constructs and are much cleaner then anonymous methods in Java.</p>
<p>The second new technology to me is <a href="http://www.asp.net/mvc/">ASP.NET MVC</a>. This allows us to do ASP.NET without actually using ASP.NET. Currently, it is still in preview releases, but it is definitely heading in the right direction. Everything (with the possible exception of views) is completely and easily testable. This means no more having to hide functionality behind presenters or controllers and hoping it works in the code behind. Controllers are completely testable right down to testing what views or redirects they return.</p>
<p>The last new thing I am using is <a href="http://jquery.com/">jQuery</a>. I fully understand why it is becoming the defacto Javascript library. To do most things only require a few lines of jQuery Javascript and its AJAX and JSON capabilities are incredible. One nice thing about ASP.NET MVC is that it is capable of returning JSON results with a single line of code. This makes working with <a href="http://jquery.com/">jQuery</a> seamless.</p>
<p>If you are starting a new .NET web project, definitely check out <a href="http://www.asp.net/mvc/">ASP.NET MVC</a>, C# 3.0 and <a href="http://jquery.com/">jQuery</a>. If you are new to C# 3.0 then check out the book <a href="http://www.manning.com/skeet/">C# in Depth</a>. It highlights all the changes since 1.1 in a nice concise format that will bring you up to speed quickly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuzzylizard.com/archives/2008/07/02/949/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

