<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3463111286945235987</atom:id><lastBuildDate>Wed, 06 Nov 2024 02:52:33 +0000</lastBuildDate><category>Agility</category><category>Communication</category><category>Agile Practices</category><category>Feedback Loops</category><category>Agility Patterns</category><category>BDD</category><category>People</category><category>Acceptance Testing</category><category>Agile</category><category>Agile Transformation</category><category>Cucumber</category><category>Language</category><category>Team Dynamics</category><category>Agile principles</category><category>Ancient Agility</category><category>Aristotle</category><category>Eudaimonia</category><category>Flourishing</category><category>Grammar</category><category>Information Radiators</category><category>Integration Testing</category><category>Remote Agile</category><category>Ruby on Rails</category><category>TDD</category><category>Team Size</category><category>Test Driven Design</category><category>Time-boxing</category><category>Trust</category><category>Uncle Bob</category><category>Virtue</category><category>pairing</category><category>Adwords</category><category>Agile Discipline</category><category>Agile Metrics</category><category>Agility Practice</category><category>Anarchy</category><category>Apache Lucene</category><category>Apache Solr</category><category>Apples</category><category>Aslak Hellesoy</category><category>Automated Testing</category><category>Behavior Driven Development</category><category>Chaos</category><category>Clade</category><category>Clean Code</category><category>Closed Culture</category><category>Composition Skills</category><category>Continuous Delivery</category><category>Continuous Integration</category><category>Control</category><category>Coupling and Cohesion</category><category>Cron</category><category>Culture</category><category>Ethics</category><category>Fear</category><category>Fencing</category><category>Gherkin</category><category>Homer</category><category>Idiomatic Code</category><category>Idioms</category><category>Iterative Development</category><category>Lead Management</category><category>Management</category><category>Milwaukee Agile</category><category>Paid Search Management</category><category>Polyglot Programming</category><category>Pomodoro</category><category>Pragmatic Implementation</category><category>Problem Solving</category><category>Punctuation</category><category>Python</category><category>Quartz.NET</category><category>REST</category><category>RSpec</category><category>Rails</category><category>Retrospectives</category><category>Search Engines</category><category>Second Life</category><category>Slang Code</category><category>Steak</category><category>Story Assignment Manager</category><category>Sunburnt</category><category>Taxonomies</category><category>Trust building</category><category>Windows Services</category><category>change</category><category>functional requirements</category><category>historical agility</category><category>internalization</category><category>prototyping</category><category>refactoring</category><category>training</category><category>web_steps</category><title>Agile - it&#39;s people!</title><description>software development by, for and with humans</description><link>http://agile-itspeople.blogspot.com/</link><managingEditor>noreply@blogger.com (CyberusFaustus)</managingEditor><generator>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-8339809472742338797</guid><pubDate>Sat, 27 Dec 2014 16:11:00 +0000</pubDate><atom:updated>2014-12-27T08:11:28.319-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">change</category><category domain="http://www.blogger.com/atom/ns#">functional requirements</category><category domain="http://www.blogger.com/atom/ns#">prototyping</category><category domain="http://www.blogger.com/atom/ns#">refactoring</category><title>Refactoring, functional and market requirements changes from the material product development world</title><description>https://medium.com/dome-kit/slow-flexible-cheap-5598ca91fb38</description><link>http://agile-itspeople.blogspot.com/2014/12/refactoring-functional-and-market.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-2629057388532697266</guid><pubDate>Tue, 28 Oct 2014 04:38:00 +0000</pubDate><atom:updated>2014-10-27T21:38:53.157-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile</category><category domain="http://www.blogger.com/atom/ns#">Agile Discipline</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">Fencing</category><category domain="http://www.blogger.com/atom/ns#">Pomodoro</category><category domain="http://www.blogger.com/atom/ns#">Time-boxing</category><title>Exercises in Agile Discipline</title><description>In my &lt;a href=&quot;http://agile-itspeople.blogspot.com/2014/10/3-ways-to-get-control-of-your-agile.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt; I wrote about how one of the primary things lacking in teams floundering with their attempts at Agility is a lack of discipline. I also linked to articles on two particular disciplines: &lt;a href=&quot;http://redpoint.github.io/RedpointWay/time_box.html&quot; target=&quot;_blank&quot;&gt;Timeboxing&lt;/a&gt; and &lt;a href=&quot;http://redpoint.github.io/RedpointWay/feedback_loops.html&quot; target=&quot;_blank&quot;&gt;Feedback loops&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In reality, every process part of Agile Delivery can be thought of as applying a timebox, setting up and using feedback loops, or a combination of both. The timebox and the feedback loops are the mechanics by which we traverse problem domains in an Agile manner. Problem domains can be delivery of a product (software or other), organizational transformation, team or self improvement, &lt;a href=&quot;http://agilescout.com/agile-scrum-for-anything-including-weddings/&quot; target=&quot;_blank&quot;&gt;holding a party&lt;/a&gt;, or any other problem complex enough to be broken into steps, but also vague enough that the understanding of the constraints around successfully solving it will change over time until the time of the completion of the solution.&lt;br /&gt;
&lt;br /&gt;
Every timebox should be defined as the shortest amount of time in which to produce a meaningful result. By meaningful result we want to focus on:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Delivering requested value,&lt;/li&gt;
&lt;li&gt;Coming to a better understanding of what value to deliver next,&lt;/li&gt;
&lt;li&gt;Coming to a better understanding of what value remains to be delivered, or&lt;/li&gt;
&lt;li&gt;Coming to an understanding on how to better do the first three.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Feedback loops are essentially a series of timeboxes in which one of points 1-3, as well as some information about point 4 is gleaned from each timebox and fed into the next in the series.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/commons/2/25/Gerard_Thibault_Mysterious_Circle.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/2/25/Gerard_Thibault_Mysterious_Circle.jpg&quot; height=&quot;235&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;In &lt;a href=&quot;http://agile-itspeople.blogspot.com/2014/01/agile-martial-arts-to-prevent-project-ko.html&quot; target=&quot;_blank&quot;&gt;another prior post&lt;/a&gt; I compared using these disciplines to the use of footwork in a martial art. In the fencing salle, footwork is so important, so foundational, that we have had new students spend &lt;i&gt;at least&lt;/i&gt; a month doing nothing but footwork before they were even allowed to touch a weapon.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If timeboxing and feedback loops are such foundational disciplines in Agility, we should all be rigorously exercising in using them. To that end, I propose the following challenge exercises. These are simply suggestions of where to apply the disciplines, not a complete exercise regimen. You can choose to do one, some or all of them and in whatever order you deem appropriate. Better yet, come up with your own regimen from these or other exercises and post it here for others to try!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Pick some chore or home project you are having difficulty finishing and set aside a timeboxed amount to work on it each day for a week (notice, the week is itself a timebox). Assess your progress after each session and at the end of the week.&lt;/li&gt;
&lt;li&gt;Pick some chore or project your kids are having trouble finishing. Have them determine the timebox for each incremental progress. You facilitate the assessment at the end of each increment and the end of the week.&lt;/li&gt;
&lt;li&gt;Try using the &lt;a href=&quot;http://pomodorotechnique.com/&quot; target=&quot;_blank&quot;&gt;pomodoro technique&lt;/a&gt; at work or at home.&lt;/li&gt;
&lt;li&gt;Take one of your agile ceremonies or meetings on your team and try to make it more effective using timeboxing.&lt;/li&gt;
&lt;li&gt;Apply timeboxing to breaking down large stories.&lt;/li&gt;
&lt;li&gt;(This can be done individually or even better, as a team exercise) Make a list of all the time-boxes your team is employing - whether consciously or not. Now, from this list, make a list of all the time-boxes where feedback could be collected but is not. Pick the most impactful missing feedback timebox. Start tracking the feedback from this timebox and discussing it before the next subsequent, related timebox. See if performance improves from loop to loop over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://agile-itspeople.blogspot.com/2014/10/exercises-in-agile-discipline.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-8709103747263940086</guid><pubDate>Tue, 21 Oct 2014 12:06:00 +0000</pubDate><atom:updated>2014-10-21T05:15:40.231-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile</category><category domain="http://www.blogger.com/atom/ns#">Agile Metrics</category><category domain="http://www.blogger.com/atom/ns#">Anarchy</category><category domain="http://www.blogger.com/atom/ns#">Chaos</category><category domain="http://www.blogger.com/atom/ns#">Control</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">Management</category><category domain="http://www.blogger.com/atom/ns#">Retrospectives</category><category domain="http://www.blogger.com/atom/ns#">Time-boxing</category><title>3 Ways to Get Control of Your Agile Teams</title><description>&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Your company rolled out its Agile initiative 6+ months ago. A team or teams under your leadership received the green light to manage itself in the approved flavor of Agile (usually Scrum). Team members have attended training. The team meets every day or at least once an iteration. There has been a Scrum Master appointed to the group. Yet the project(s) worked on seem to be slipping as each week goes by. You are assured that stories are being completed, yet you have no idea whether you are going to meet the deadline, let alone what is being developed toward that goal. Your situation feels less Agile and more like Anarchy.&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqsLm-bwsIXkyl_94JtwkQzTkL0sAM0NbfooAIf8jiOoJPw8MYr64IoagO80CS0GYq8phesl8leAkNzDLEYtOAGmLAc4xDh5vUXRNasYx2pk4mrGeLSNFwzXrmcX9RyKHuVW2gPCXOG94/s1600/agileGraffiti3.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqsLm-bwsIXkyl_94JtwkQzTkL0sAM0NbfooAIf8jiOoJPw8MYr64IoagO80CS0GYq8phesl8leAkNzDLEYtOAGmLAc4xDh5vUXRNasYx2pk4mrGeLSNFwzXrmcX9RyKHuVW2gPCXOG94/s1600/agileGraffiti3.png&quot; height=&quot;200&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Dire as this example seems, it is not far off the mark for many teams and companies who have given this &#39;Agile thing&#39; a go. Here are three tips used by successful Agile teams you can use to regain control of your team, its delivery of value and avoid the brink of chaos.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;b&gt;1) Agile Metrics.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&amp;nbsp;Despite the impression of some that Agile is just a free wheeling approach to development, the best Agile teams know that the built in feedback loops provide the perfect means to collecting tons of accurate data. Even if your teams have not implemented the tightest loops, like those around automated testing and pairing, they should be able to give you a fairly current Velocity measurement of the team&#39;s progress toward completion of the project as it is currently defined. This measurement is much more than a simple ratio of work not done to work remaining, but rather provides insight into numerous impacts on a team, including partial allocations, tech debt, changes in requirements, or lack of experience. Get your scrum master/project manager/team lead to track the team&#39;s velocity iteration after iteration. Trouble spots will become readily apparent and it will give you and the team something concrete to figure out how to improve. The team should start measuring its progress and those metrics should be openly communicated.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Here are some other metrics that you can glean from the Agile feedback loops available to you:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://agileatlas.org/articles/item/metrics-for-a-scrum-team&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://agileatlas.org/articles/item/metrics-for-a-scrum-team&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.leadingagile.com/2013/07/agile-health-metrics-for-predictability&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://www.leadingagile.com/2013/07/agile-health-metrics-for-predictability&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://salhir.wordpress.com/2011/09/18/agility-health&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://salhir.wordpress.com/2011/09/18/agility-health&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;If your team is having trouble coming up with a velocity or their velocity is varying wildly, it might be time to empower the team to develop some:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;b&gt;2) Agile Discipline.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;While this may seem contradictory at first, the most effective Agile teams seem to hum like a fine tuned German sports car. This is similarly achieved via a seemingly Teutonic application of discipline. However, you do not achieve this simply by broad mandate. The discipline should be applied as the team becomes aware of deficiencies. If the team is having difficulty meeting its sprint commitments and as such cannot provide a healthy, consistent velocity, the reaction is often to let up the slack... just extend the iteration. Soon iterations go from two to three then to four weeks. In the mean time evidence of progress toward the release goals is further delayed. Instead of lengthening the iteration, shorten it. Ask the team what it can commit to delivering in a week. You don&#39;t have to release every week, but the team should have produced release ready solutions in that time. Run four-to-six one week iterations and you and your team will very quickly develop a predictable velocity from which you can begin to more accurately extrapolate real progress toward completion or begin to see what other steps might be needed to improve.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Similarly, I often see teams that have a scrum/standup every day, perhaps multiple times a day, but they are still disorganized. Efforts may be duplicated, progress and blockers may go unseen, and no one may really know how close we are to &#39;done&#39; let alone what the next highest priority item to work on is. This is often due to an overloading of the Scrum. Instead of quick team sync up, they become a catch all, rapidly devolving into half to hour long design discussions, requirements gathering, bug reports or ad hoc planning sessions. Again the time-box is your friend. Have the scrum master limit the scrums to fifteen minutes. Anything not relevant to the standard team sync questions of a stand-up or scrum should be tabled for discussion after. Not only does this allow team members to get back to work, it also quickly brings to light related issues which can actually greatly improve the delayed discussions.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Further more, set limited, regular meetings for grooming, planning, the showcase and your retro with clear outcomes for each. Grooming should produce estimable stories with clear acceptance criteria, planning should produce an estimated commitment of delivery of some of these well defined stories and the showcase should clearly demonstrate how the acceptance criteria of each have been delivered. Obviously, each requires the previous one starting with the grooming session(s). Therefore making a rule that a grooming session must conclude with a percentage of the considered stories defined is helpful. To facilitate this I have sometime even set time limits on discussion of stories. 5 minutes per story. If it is not enough the team can vote to extend 5 more minutes or to push the story back in the queue. At the very least this drives progress towards story definition. Even if a story cannot be fully defined due to externally missing information, the team is more aware of the scope and caveats of the story than they were before. Moreover, this is all documented in the even partially groomed story. The alternative is no documentation, no progress, a long discussion ending with a bunch of questions and looks of confusion on the team&#39;s faces. Worse yet, the team gets to planning and nothing is understood well enough to commit to and the planning session is postponed.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Here are further details on some Agile disciplines:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://redpoint.github.io/RedpointWay/feedback_loops.html&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://redpoint.github.io/RedpointWay/feedback_loops.html&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;a href=&quot;http://redpoint.github.io/RedpointWay/time_box.html&quot;&gt;http://redpoint.github.io/RedpointWay/time_box.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Of course, this means that all those Agile meetings are actually important. Once they are run in a disciplined manner, their value becomes quickly evident. However, the most important of the Agile meetings/rituals is routinely the first casualty in teams floundering with implementing Agile:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;b&gt;3) Regular Retrospectives.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;For a team trying to get into a productive groove with Agile, the retrospective is the single most important Agile ceremony. Think of it like a professional sports team taking the time to regularly watch and critique their last game. If they don&#39;t do this, all they are doing is playing game after game and improvement is almost accidental. By taking even a short bit of time to call out one or two areas to improve upon for their next game or iteration, a team makes steady, focused improvements. This can be a powerful way to eliminate the most deleterious bad habits/practices and replace them with the habits which will make your teams deliver and succeed.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;More on Retros:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://agile.dzone.com/articles/%E2%80%9C-4-questions%E2%80%9D-retrospective&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://agile.dzone.com/articles/%E2%80%9C-4-questions%E2%80%9D-retrospective&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://agileretrospectivewiki.org/index.php?title=Retrospective_Plans&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://agileretrospectivewiki.org/index.php?title=Retrospective_Plans&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redpoint.github.io/RedpointWay/retrospectives.html&quot;&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://redpoint.github.io/RedpointWay/retrospectives.html&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://agile-itspeople.blogspot.com/2014/10/3-ways-to-get-control-of-your-agile.html</link><author>noreply@blogger.com (CyberusFaustus)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqsLm-bwsIXkyl_94JtwkQzTkL0sAM0NbfooAIf8jiOoJPw8MYr64IoagO80CS0GYq8phesl8leAkNzDLEYtOAGmLAc4xDh5vUXRNasYx2pk4mrGeLSNFwzXrmcX9RyKHuVW2gPCXOG94/s72-c/agileGraffiti3.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-110111690372822433</guid><pubDate>Thu, 12 Jun 2014 16:36:00 +0000</pubDate><atom:updated>2014-06-12T09:56:07.555-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile</category><category domain="http://www.blogger.com/atom/ns#">Agile Transformation</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Language</category><title>Agile - O, be some other name!</title><description>&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Agile methodologies have been around for quite a while now. The Agile Manifesto was created way back in 2001. As such Agile - as a term - has gone from a curious status quo disruptor to a buzz-word to an entrenched term. It is similarly used and abused in the same fashion as most business terms. It also carries some significant baggage - not least of all the perception that it can only be applied to software development.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://hklscom106.files.wordpress.com/2012/03/1196729_f520.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://hklscom106.files.wordpress.com/2012/03/1196729_f520.jpg&quot; height=&quot;220&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Shakespeare&#39;s Romeo &amp;amp; Juliet&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
Once one grows past the phase where one is simply trying to teach the practices of a particular flavor of Agile Methodologies, one is often faced with the decision of whether to drop using the moniker &#39;Agile&#39;. If one sees the raw potential within the practices and principles to transform organizational culture to be healthier, happier and more efficient, how do you sell it beyond the IT department? Some leverage broader terms such as Organizational Development, others reframe the term to something like &quot;Agility&quot;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I see the appeal of these approaches and use them myself when appropriate. However, I am often struck that we are just superficially engaging in word play. We are left with &lt;a href=&quot;http://www.shakespeare-navigators.com/romeo/T22.html&quot; target=&quot;_blank&quot;&gt;Juliet&#39;s quandary (Act 2 Scene 2 Line 43)&lt;/a&gt;: What&#39;s in a name?&amp;nbsp;That which we call an Agile Team, by any other name would be as healthy.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Which brings us to the true focus of the more advanced Agile Coach - to transform the team&#39;s or organization&#39;s health so that they can be, among other things, agile. For this reason I like to embrace the baggage of the term Agile. It is a handle we can use to enter into a transformative conversation. This sort of conversation is usually had at the start of a relationship with a client or potential client. It might not even be had by an Agile Coach, but rather by a Salesperson. I am a firm believer that successful transformations begin at the very first engagement. Why not utilize the power of this handle to begin the transformation?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Rather than telling the person what Agile is, ask what they know about Agile; what &lt;i&gt;they&lt;/i&gt; think it is. This can get into all manner of discussion quickly. Even misconceptions can be used as transformative opportunities. You can get quickly past lengthy and potentially boring or confusing explanations and start delving into where they are struggling and suggesting how you can assist them. If you use another name, you have to spend too much valuable conversation time just setting the stage.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://agile-itspeople.blogspot.com/2014/06/agile-o-be-some-other-name.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-1993042848524847172</guid><pubDate>Fri, 09 May 2014 18:24:00 +0000</pubDate><atom:updated>2014-05-09T11:25:07.714-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Transformation</category><category domain="http://www.blogger.com/atom/ns#">Apples</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">Iterative Development</category><title>... its like eating an apple</title><description>I was communicating with the owner of a client company where I am doing an Agile Transformation today when she said basically that to her Agile was all about reviewing, organizing and prioritizing things in bites... a bite at a time... I wanted to clarify to make sure that she understood much of the key is using the tight feedback loops available in iterative development; not just simply iterating. In response I continued the analogy - of eating an apple:&lt;br /&gt;
&lt;br /&gt;
A bite at a time that gives you more info about the rest of the apple, is it juicy and sweet? Tart? Have worms? Rotten? But it is also taking that info and making decisions around the further eating of the apple... Should it be cut unto slices? Cooked in a pie? Can we cut out the bad part and keep the rest?&lt;br /&gt;
&lt;br /&gt;
Or should we leave the apple at good enough and toss the rest in the compost pile while we go back to the fruit bowl for another piece of fruit?</description><link>http://agile-itspeople.blogspot.com/2014/05/its-like-eating-apple.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-4417586237779947156</guid><pubDate>Mon, 27 Jan 2014 20:52:00 +0000</pubDate><atom:updated>2014-01-31T17:34:47.910-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Automated Testing</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Continuous Delivery</category><category domain="http://www.blogger.com/atom/ns#">Continuous Integration</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">Information Radiators</category><category domain="http://www.blogger.com/atom/ns#">Milwaukee Agile</category><category domain="http://www.blogger.com/atom/ns#">Pragmatic Implementation</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><category domain="http://www.blogger.com/atom/ns#">Trust</category><category domain="http://www.blogger.com/atom/ns#">Trust building</category><title>Milwaukee Agile Meetup - Continuous Integration Panel Discussion Summary</title><description>&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Last week I had the pleasure of being on a panel discussion about Continuous Integration at the Milwaukee Agile Meetup. My fellow panelists were Carl Schrammel, Adam Black, Jason Duff, James Carpenter and Adam Johnson.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The discussion grew out of the group&#39;s growing interest in this area and challenges that individuals and teams attending the Meetup had expressed recently. I know several people who said they had wanted to attend, so I thought I would post a summary of the discussion.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Q: What does Continuous Integration mean to you? When were you first introduced to the concept and how did it change your perspective?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;A: After the initial text book definition was given (&quot;&lt;b style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_integration&quot; target=&quot;_blank&quot;&gt;Continuous integration&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;b style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;CI&lt;/b&gt;&lt;span style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;) is the practice, in&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Software_engineering&quot; style=&quot;font-size: 13px; line-height: 19.200000762939453px; text-decoration: none;&quot; title=&quot;Software engineering&quot;&gt;software engineering&lt;/a&gt;&lt;span style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;, of merging all developer working copies with a shared&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Trunk_(software)&quot; style=&quot;font-size: 13px; line-height: 19.200000762939453px; text-decoration: none;&quot; title=&quot;Trunk (software)&quot;&gt;mainline&lt;/a&gt;&lt;span style=&quot;font-size: 13px; line-height: 19.200000762939453px;&quot;&gt;&amp;nbsp;several times a day.&quot; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Continuous_integration&quot; target=&quot;_blank&quot;&gt;Wikipedia&lt;/a&gt;),&lt;/span&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;&amp;nbsp;the group continued to express their take on CI.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;CI is a powerful feedback tool for both engineering as well as project management - reduces surprises due to integration and deployments and makes the ones which occur more manageable.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;The benefits of CI are best reaped via automation, but even manual CI can bring great improvement.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;CI can help build confidence in the product and the team - one always knows the state of the code at the end of the day.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;The distinction between Continuous Integration and Continuous Delivery (CD) was also drawn... with Continuous Delivery being an advanced practice where a team is able to deploy changes to production with high frequency.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;Q: What tools are being used?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;A: The standard list of revision repositories, build servers, testing frameworks, continuous integration servers, deployment automation were quickly run through - basically if you are interested in CI there is likely a set of tools readily available for your language/tech stack of choice. It was noticed, however, that there are software products and systems which are not necessarily easy to integrate automation or other CI tools too. Particularly these tend to be configuration based systems, or closed systems which perhaps try to manage revision control internally - preventing access or control by external ci/build/test setups. This led to the discussion that aside from tools, the other aspect of CI is the practices and behaviors. These behaviors are often harder to implement than the tools. However, if the behaviors are embraced by a team, even the most simplistic of CI tooling can become powerful. The further consensus of the panel was that it is best to start simply - implementing behaviors and supporting tooling gradually. In this way, each advancement should be lauded as a positive win in the right direction rather than disappointment at not having achieved an elusive ideal CI or CD state in one try.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 19.200000762939453px;&quot;&gt;Q: How to prove the value of CI to developers? to business/product owners? how soon can one expect to see value?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; line-height: 19.200000762939453px;&quot;&gt;A: The answers to this echoed some of the previous discussion. The general feeling was to take each instance in a case-by-case basis and look for opportunities to introduce behaviors and tools pragmatically to provide greater insight into specific areas where a team may be experiencing pain. Examples: recurring bugs, painful massive code integrations, lost code, misunderstood and mis-implemented user requirements, painful coordination/integration with other systems/teams on deployment, out of sync versions of code between environments (Prod getting ahead of Dev or Test), not being able to do certain types of testing. All of these were brought up as pain points which some degree of CI could have alleviated.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; line-height: 19.200000762939453px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif; line-height: 19.200000762939453px;&quot;&gt;Since CI sits on the front lines of ever changing code, the positive impact of CI can be seen very quickly (as soon as one build cycle in some cases). The key is to communicate this to the parties who would most appreciate the benefit. This is where a CI server can help by providing dashboards and automated messaging, but even utilizing the low tech approach of holding stake-holder meetings before and after a CI &#39;event&#39; can shed light on the benefit of the activity.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The panel agreed that in order to get the buy in to do more advanced levels of CI requires the building of trust, something familiar to Agile Coaches and leaders everywhere. However, even the most rudimentary CI practices can provide excellent data and feedback which, if communicated properly, can facilitate the building of that trust. Due to the fact that CI can generate data about the health of the deliverable every time a change is made, it can be one of the most powerful and prolific sources of data for information radiators. The trick as with all data is to mine it for the most relevant information to the message you wish to communicate.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Q: Who owns CI? Who sponsors/drives for CI?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;A: The panelists seemed to generally agree that in most large project teams, there was a dedicated Operations team in charge of maintaining the CI tools (build servers, repositories, deployments and deployment automation, ci servers, etc). However, many expressed how this could lead to the negative effects of siloing. Panelists shared their experiences with teams who used various means to combat this. Rotation of members into the ops team, rotation of ops duties among teams, the use of embedded testers to serve as the bridge between dev and ops, and use of separate scrum-of-scrums to coordinate dev teams with ops.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;We did not get too much into the sponsors for CI. I would suggest, as with trying to get buy in, any individuals or groups who feel they would get a benefit out of the use of CI could sponsor it. I have seen CI started as an engineering initiative and I have also seen it sponsored by Project Management and even Product Owners.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Q: Of those doing CD, has anyone automated the signoff process in tightly controlled organization/industry?&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;A: No one had seen full blown automated sign-off at the level of the typical product owner, upper management deployment committee. However, several had seen groups who had automated sign-off at lower levels, such as moderate UAT sign-off. This can help pave the way to make the manual sign-off at the executive level easier once trust has been established through a record of reliable test/dev/pass/sign-off cycles.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The evening flew by and that was about all we were able to get to. &lt;/span&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Prior to the discussion, David Neuman from &lt;a href=&quot;http://www.redpointtech.com/&quot; target=&quot;_blank&quot;&gt;Redpoint Technologies&lt;/a&gt; sent out a &lt;a href=&quot;https://docs.google.com/document/d/1J061DEWZfd_vW-zrIOvZmJ56JRtQq-uOBfU0jq2UYt4/edit?usp=sharing&quot; target=&quot;_blank&quot;&gt;list of questions&lt;/a&gt; to the panelists that would serve to seed the discussion. I think we hit most of the items tangentially. If anyone would like to discuss them further, leave a comment or email me.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The last question on the list asked if there was one recommendation we have for successfully implementing and leveraging CI.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Build Automated Tests. Even if you still have to trigger your builds or other steps manually, having automated test suites that you can run against your built code is one of the most powerful tools to start getting an ROI on your CI efforts. Furthermore, many of the behaviors and practices of CI which are difficult to master initially revolve around disciplines of TDD. If you have automated tests, it is easier to start to instill these disciplines in your team. As some of the other panelists and I were discussion after the meetup, automated TDD is fun... it makes coding like a game with almost instant gratification to our problem/puzzle solving efforts. Making something fun can really make developing good habits to support it easier.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://agile-itspeople.blogspot.com/2014/01/milwaukee-agile-meetup-continuous.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-1151472636856733754</guid><pubDate>Wed, 22 Jan 2014 17:30:00 +0000</pubDate><atom:updated>2014-06-12T12:27:12.192-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><title>Agile Martial Arts to Prevent The Project K.O.</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3wuLOqt2s9Voq_kjOgxhwGDwFIctjLZVKJs7_kwJyVj8lLXdKYJ9Mw8vogJtjKienYucHuvZ_xK7IK26kWWkmtvVL_KpXZws_OpwsDAAbY6mnLHR4nWFG-d7KNcx7x7wm8h68yeAKW0/s1600/northfield_workshop_lunge.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3wuLOqt2s9Voq_kjOgxhwGDwFIctjLZVKJs7_kwJyVj8lLXdKYJ9Mw8vogJtjKienYucHuvZ_xK7IK26kWWkmtvVL_KpXZws_OpwsDAAbY6mnLHR4nWFG-d7KNcx7x7wm8h68yeAKW0/s1600/northfield_workshop_lunge.JPG&quot; height=&quot;268&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Recently, I have been having a number of discussions with colleagues about our projects and I noticed that there was a similarity in how we were discussing using the communication and feedback tools of Agile Development with concepts of Martial Arts.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;When training in martial arts, one comes to learn that one of the most powerful tools one has in dealing with an adversary is to control distance and time. One can either increase distance in order to give one more time to analyze and deal with an adversary&#39;s attack or one can reduce distance and/or time to limit your adversary&#39;s options and ability to develop an attack.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Similarly on a project, surprises are seldom a good thing. However one cannot know everything which is going to happen. Change management strategies have evolved to try to deal with this, however, traditionally these have been largely reactive... like a novice at Close distance flailing wildly to block each attack. So how do you control time/distance to problem fallout on a project?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;This is done via the use of feedback loops of varying frequency. Feedback loops of lower frequency can give you the time to &quot;step back&quot; and assess changes before rushing in. This can called a Distance/Time &lt;i&gt;&lt;b&gt;giving&lt;/b&gt;&lt;/i&gt; action since they give you more time to assess a developing problem, but that means they may also allow the problem to develop further. Feedback loops of higher frequency allow you to address issues immediately, preventing them from ballooning into larger problems or even implementing proactive solutions to stop the problem in its tracks. These are Distance/Time &lt;b&gt;&lt;i&gt;takers&lt;/i&gt;&lt;/b&gt;, since they shorten the time allowed for a problem to develop. The number and roles of individuals who receive and deal with the feedback initially also plays a part in whether a technique is more giving or taking in nature. Generally, lower number of individuals whose roles are closer to the source of the problem will be a taking action, while the converse is more of a giving action.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Some Distance/Time giving techniques (lower frequency loops):&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Daily scrums/standups&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Iterative development/delivery&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Regular demos&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Regular retrospectives&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Pairing&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Taking a step back to gain distance and time is one of the simplest defense moves. Appreciation of the different threat levels each distance presents and the ability to back-out to a safe distance is something which is taught to beginners. Similarly, the techniques for gaining Distance/Time in Agile Development are simple enough that any team can begin to use them right away.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;For example, a team is following a more traditional project management approach with few touch points across the team. Perhaps the PM only reports to a board &amp;nbsp;the status of things as dates for delivery of milestones occur. At this point, it is usually too late and if a problem has occurred, the PM is delivering the surprise bad-news. Even worse, a milestone is delivered only to have the product owners report all the surprise deficiencies. Obviously, both of these are uncomfortable for all involved and panic may often set in. By establishing short, frequent and regular meetings with the team including all stakeholders, a team can get the opportunity to see the problems coming and properly deal with them. They are effectively giving themselves the time to deal with the problems rather than rushing headlong into the fray.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;A recent client complained that historically, every time they tried to do a deployment the tools the development team used seemed to create surprise errors. Moreover, items were added to the new environment without the client&#39;s prior knowledge. These would not necessarily break anything, but they did add confusion and wasted time. In order to address this we established regular meetings with tech leads, the deployment lead, the clients and testing. At the meeting, proposed pending changes were discussed. A draft-deploy was reviewed for surprise dependencies which might be pulled in by the deploy tool. Team members who previously never spoke to one another now communicate regularly around a problem they were all experiencing from different perspectives. Out of this, the team has developed a much more rigorous deployment practice, surprises have been eliminated, and all parties have gained a much better understanding of their deployment tools and an appreciation for each others difficulties in deployment. It is not as much a typical Change Management/Approval board as it is an opportunity for the interested parties to communicate. Meetings never last more than half an hour and usually are about fifteen minutes, but we meet at least once a week. While not one of the traditional Agile Team Meetings, it follows the spirit of frequent cross-communication which is so vital to the Agile Approach.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Some Distance/Time taking techniques (high frequency loops):&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Automated Testing&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Test Driven Development&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Acceptance Criteria/Tests&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Test First Development&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Pairing&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Continuous Integration&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Daily scrums/standups&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Distance/Time taking techniques are usually more advanced in Martial arts as they require a bit more training and discipline to do safely. So too in software development. Most of the ones I listed here obviously employ development practices which software engineers will need to hone if they have not done them before. However, once proficiency is obtained in them, these practices can be life savers and even keep at bay the dreaded pager. Utilized well, these operate as a means of clinching problems by stopping them well before they develop into much larger problems in a more devastating environment. Use of Automated testing with a modern CI server can not only identify problems in with new code early on, it can also help make sure that once a bug is fixed, it stays fixed. One of the mantras on a team I was on was &quot;Find a Bug, Write a Test.&quot; Basically, whenever a bug was reported, the developer wrote a test for how the solution was supposed to behave. Of course, until the bug was fixed, the test would continue to break. However, the bug would likely never resurface again since our test coverage of our code had now improved. This of course requires the developer discipline of running tests before committing, as well as a Test-First mentality. Without those disciplines the team is back to reactive flailing.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;These techniques do not always stop problems from occurring, but like the clinch, they can prevent the problem from developing into a more lethal one. A team with good CI, TDD, and Acceptance testing practices for instance, can deal with and minimize the impact of major architectural changes or even severe problems introduced by changes in third-party software. They can tackle the severe problem in manageable chunks at a level of relative safety.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;I listed daily scrums and pairing under both because depending upon the situation these techniques can act both to give time to deal with potentially developing problems as well as to stop problems from starting in the first place through open communication. The latter is usually the case where someone either states what they are working on or having difficulty with and someone else on the team either gives them a solution or can help them avoid pitfalls they have experienced before. As it happens at such a frequent schedule, the time for problems to develop is often completely eliminated - effectively clinching the problems. Scrums and Pairing as time gaining operate in the sense that by approaching problems as a team tends to prevent us from making rash decisions.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;A final note: you will notice that I do not say Pair Programming... while I like Pair Programming, many of my colleagues have noted that pairing is a powerful tool for all team members. I have seen PM&#39;s, BA&#39;s testers, even Product Owners pair on deliverables with great results.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
</description><link>http://agile-itspeople.blogspot.com/2014/01/agile-martial-arts-to-prevent-project-ko.html</link><author>noreply@blogger.com (CyberusFaustus)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3wuLOqt2s9Voq_kjOgxhwGDwFIctjLZVKJs7_kwJyVj8lLXdKYJ9Mw8vogJtjKienYucHuvZ_xK7IK26kWWkmtvVL_KpXZws_OpwsDAAbY6mnLHR4nWFG-d7KNcx7x7wm8h68yeAKW0/s72-c/northfield_workshop_lunge.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-6748682464843288460</guid><pubDate>Thu, 19 Sep 2013 14:49:00 +0000</pubDate><atom:updated>2013-09-19T08:35:45.791-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Clean Code</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Composition Skills</category><category domain="http://www.blogger.com/atom/ns#">Coupling and Cohesion</category><category domain="http://www.blogger.com/atom/ns#">Language</category><category domain="http://www.blogger.com/atom/ns#">Uncle Bob</category><title>Do good communication skills improve your code?</title><description>What is one of the primary design flaws we see over and over in software?&lt;br /&gt;
&lt;br /&gt;
Tight coupling.&lt;br /&gt;
&lt;br /&gt;
I started wondering why this might be. I thought about the mental process I go through when attempting to write cohesive, decoupled code. I realized that is was very similar to the mental process I go through when composing paragraphs and sentences.&lt;br /&gt;
&lt;br /&gt;
Could there be a correlation between composition skills in one&#39;s native language and their skill at designing and developing loosely coupled software solutions?&lt;br /&gt;
&lt;br /&gt;
Certainly Uncle Bob Martin&#39;s book &quot;Clean Code&quot; suggests something of the sort. In it he approaches method writing much like telling a story. If one is better at communicating written stories, perhaps they would be better at this form of design.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I found this link after posting that I thought I would share:&amp;nbsp;&lt;a href=&quot;http://www.theatlantic.com/national/archive/2012/10/the-real-reason-silicon-valley-coders-write-bad-software/263377/&quot;&gt;http://www.theatlantic.com/national/archive/2012/10/the-real-reason-silicon-valley-coders-write-bad-software/263377/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://agile-itspeople.blogspot.com/2013/09/do-good-communication-skills-improve.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-9162192136334384984</guid><pubDate>Mon, 16 Sep 2013 20:33:00 +0000</pubDate><atom:updated>2014-02-14T07:02:38.804-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Adwords</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Cron</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">Information Radiators</category><category domain="http://www.blogger.com/atom/ns#">Lead Management</category><category domain="http://www.blogger.com/atom/ns#">Paid Search Management</category><category domain="http://www.blogger.com/atom/ns#">Quartz.NET</category><category domain="http://www.blogger.com/atom/ns#">Remote Agile</category><category domain="http://www.blogger.com/atom/ns#">REST</category><category domain="http://www.blogger.com/atom/ns#">Story Assignment Manager</category><category domain="http://www.blogger.com/atom/ns#">Team Dynamics</category><category domain="http://www.blogger.com/atom/ns#">Team Size</category><category domain="http://www.blogger.com/atom/ns#">Windows Services</category><title>Put your Adwords fears to REST (managing lead consumption)</title><description>I just finished up a neat little project where I got to help a client streamline how they were managing the monitoring of lead consumption among their sales members and making sure that they were not overspending in a particular region at another&#39;s detriment.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/u&gt;: The client&amp;nbsp;is using Adwords to garner leads in various states. Their sales team members are&amp;nbsp;selling in multiple states. They have a third party system for distribution of leads to the team members. This system has a toggle the team members are to use to indicate whether they are actively taking leads at a given time. When this flag is on for a team member, leads are sent to them. However, many team members were failing to turn their flag off.&amp;nbsp;These members&amp;nbsp;where then getting leads assigned to them when they might not even be in the office. This was to the detriment of other members who then would get none.&amp;nbsp;Due to the agreement&amp;nbsp;to provide members&amp;nbsp;leads, this meant a lot of work tracking consumption, establishing quotas and trying to modify behavior. It also meant that sometimes the Adwords budget&amp;nbsp;for particular campaigns would&amp;nbsp;have to be increased in order to meet the internal agreements with&amp;nbsp;the&amp;nbsp;sales team.&amp;nbsp;The cross region nature of sales member&amp;nbsp;activity also meant that it could effect campaigns in multiple regions. They were tracking all this using a spreadsheet and a lot of leg work.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;The Solution&lt;/u&gt;&lt;/strong&gt;: &lt;a href=&quot;http://www.redpointtech.com/&quot; target=&quot;_blank&quot;&gt;Redpoint&lt;/a&gt; was asked to build a small tool to automate what the lead manager was having to spend too much of his time fretting about with the spreadsheet. In a short 6 weeks from Inception to Production&amp;nbsp;Deploy we came up with a system to do this. The tool ultimately consisted of a web app and a poller service. The components pulled data&amp;nbsp;from various web services including the distribution tool,&amp;nbsp;internal employee data services, and Adwords.&amp;nbsp;Most were &lt;a href=&quot;http://en.wikipedia.org/wiki/Representational_state_transfer&quot; target=&quot;_blank&quot;&gt;RESTful&lt;/a&gt; - hence the title of this blog.&amp;nbsp;The web app gave the lead manager a dashboard to monitor individual sales member consumption of leads against an assigned limit. This contributed to the calculation of potentially available leads for a given state. Once all members selling in a state had gotten all the leads they were supposed to, all campaigns in that state would be paused for the day. If the lead manager wanted to they could then increase a particularly good sales persons limit and allow them to sell more, or refocus a sales persons lead consumption to a particular state or states. The&amp;nbsp;poller service&amp;nbsp;was automated by a Windows Service using Quartz.net CronTriggers to assign various pollers to maintain the list of sales team members, the states they sold in, their lead consumption, the availability pool, and ultimately to pause or restart the Adwords campaigns appropriately. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;The Result&lt;/u&gt;&lt;/strong&gt;: The final tool, as it had evolved, quickly gained admiration from the executive team and the project sponsors. Even in its testing state, it had shown that it was more than just an automated valve for Adwords. The dashboards and multiple levels of control built into the solution allowed them to quickly see patterns in sales member activity and behavior. The flexibility of the Cron Triggers allowed them to schedule polls and resets as well as to automatically turn off all campaigns during down times and prevent &#39;greedy&#39; team members from stock pilling all the leads while others were out of the office. This also assuaged&amp;nbsp;executive fears of&amp;nbsp;blowing the Adwords budget as they soon saw how this was&amp;nbsp;an excellent emergency shutoff valve to control their&amp;nbsp;spending.&lt;br /&gt;
&lt;br /&gt;
For phase two they are already talking about the ease of creating trending and tracking data from what is being pulled as well as adding in different lead types and groupings. &lt;br /&gt;
&lt;br /&gt;
As an Agilist, I appreciated this project as it had become an interesting, dynamic and interactive information radiator that would allow them to manage and change how they do business to meet the changing needs of their market and their staff. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Other Applications&lt;/u&gt;&lt;/strong&gt;: Of course this sort of tool could be very useful to any growing company who is struggling to wrangle their Adwords budgets and their sales team&#39;s quotas. A similar tool could be useful to Scrum Masters, PMs or Team Leads to monitor and&amp;nbsp;control&amp;nbsp;story assignment within a team, by using the information from their story management system and assigning categories or even complexity sections to various members (&quot;you did three &#39;1 point&#39; stories this iteration so far, you have to take a &#39;2&#39; or a &#39;3&#39; next&quot; OR &quot;You have been only taking stories involving that piece you created, for the rest of this iteration you need to take stories from other areas of the application&quot;). While not so helpful with a small team, it could be very handy with a large distributed team - like the sale team in this case.</description><link>http://agile-itspeople.blogspot.com/2013/09/put-your-adwords-fears-to-rest-managing.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-2758901693015769398</guid><pubDate>Mon, 16 Sep 2013 20:03:00 +0000</pubDate><atom:updated>2013-09-16T16:50:28.653-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BDD</category><category domain="http://www.blogger.com/atom/ns#">Closed Culture</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Culture</category><category domain="http://www.blogger.com/atom/ns#">Grammar</category><category domain="http://www.blogger.com/atom/ns#">Idiomatic Code</category><category domain="http://www.blogger.com/atom/ns#">Idioms</category><category domain="http://www.blogger.com/atom/ns#">Language</category><category domain="http://www.blogger.com/atom/ns#">People</category><category domain="http://www.blogger.com/atom/ns#">Polyglot Programming</category><category domain="http://www.blogger.com/atom/ns#">Problem Solving</category><category domain="http://www.blogger.com/atom/ns#">Punctuation</category><category domain="http://www.blogger.com/atom/ns#">Slang Code</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><category domain="http://www.blogger.com/atom/ns#">Team Dynamics</category><category domain="http://www.blogger.com/atom/ns#">Uncle Bob</category><title>The language you code in could say a lot about your developer culture</title><description>&lt;br /&gt;
In his essay on &lt;a href=&quot;http://www.bartleby.com/28/10.html&quot;&gt;&quot;Race and Language&quot;&lt;/a&gt; Edward Augustus Freeman suggested that language, rather than race (genetic similarities), might be a surer indicator of cultural kinship among peoples. Professor Freeman wrote: &quot;Every word that a man speaks is the result of a real, though doubtless unconscious, act of his free will. ... A man cannot, under any circumstances, choose his own skull; he may, under some circumstances, choose his own language. He must keep the skull which has been given him by his parents; he cannot, by any process of taking thought, determine what kind of skull he will hand on to his own children. But he may give up the use of the language which he has learned from his parents, and he may determine what language he will teach to his children.&quot; As such, the choice of language made individually and in the aggregate points to attributes of the language and those already speaking it which the new speaker of the language appreciates.&lt;br /&gt;
&lt;br /&gt;
Perhaps this is why few topics among developers can start a &#39;religious war&#39; faster than that of programming language.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The use of language is in essence a tool to capture an idea and communicate it to another. In IT we largely look at languages as tools to efficiently solve a problem. By &#39;solve&#39; we really mean &#39;communicate an algorithm to the machine&#39;. Just as some spoken languages are better for communicating facts or legal concepts and others are better for poetry or philosophical abstractions, each programming language is more efficient at &#39;solving&#39; some technical problems than others. One may be excellent for modeling relationships, another for solving concurrency problems. &lt;/div&gt;
&lt;div&gt;
Looking at language this way is a good pragmatic approach to choosing &#39;the right language for the job&#39;, but it also can subtly mask or neglect other factors in language choice. Namely, the speaker and prospective audience plays a large part in what language communication is captured and how that communication is shaped. The above take on the use of programming language measures its efficiency in processes or cycles or memory consumed. It is the run-time efficiency - or how easily the computer understands and can execute the message. However, when using high-level programming languages, that is really misleading. It is really more of a measure of how good the compiler or interpreter for a given language is at translating the solution into efficient byte-code. So, compilers and interpreters aside, the real audience to gauge the efficiency of the language used is - humans.&lt;/div&gt;
&lt;div&gt;
Looking at how we use language it seems to lie upon a continuum between communicating to a large or a small audience. On one hand we have the language of media news reports, which linguists will often point to as a general epitome of the common speech of a people. It is intended to be understandable and consumed by the largest portion of a population. Prose is also near this end of the spectrum. On the other end you may find cryptography, where the audience is narrowed to perhaps only one other person. Sonnets, slang and technical jargon are closer to this end. They use conventions and specialized vocabulary which only a smaller subset of the population would have exposure to. Obviously a particular communication can lie closer to one end or the other given both the speaker and the audience. For instance a technical treatise might use highly exclusive vocabulary, but be written utilizing the most standard academic grammar and style. This &#39;regulated language&#39; ensures that the message, while directed to technical specialists, will be understandable to the widest range of that population. It could even be accessed by outsiders armed with a good dictionary. Slang, on the other hand, often develops out the needs of the speaker... Complex grammar and punctuation is boiled down sometimes to only partial words. This makes the message easier and faster to say. To achieve this, the complexities of grammar and punctuation are replaced by context. One must understand this context, often cultural, to unpack the meaning behind this terse communication. It is particularly difficult for outsiders to master, and often intentionally so.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The intended range of audience has certain temporal effects as well. A loose jargon may make it easy for a small, tight knit group to communicate efficiently. However, it will be much harder to decode the meaning years later, perhaps even by members of that same community. Formal and standardized grammars and punctuation provide a degree of staying power to a language, allowing it to be understood for generations.&lt;br /&gt;
On can see this in development shops where one language is the exclusive language of development. On one hand a particular language may have been chosen for its similarity to human language. This may make translating business requirements into code easier. The same language may make it extremely difficult to describe the algorithm for performing a particular calculation. With greater complexity, it makes it more likely that a mistake will be introduced. The wordiness of this complexity can also make it harder to find the mistake. It also assumes that those writing code write well in their natural language. Run-on sentences can exist in code. A run-on piece of code is recognizable by loose cohesion, which is well known to negatively impact its brittleness and maintainability. &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As a developer it is important to know the ways of expressing algorithms that is most natural to the language being developed in. This is called Idiomatic Code. However, a more seasoned Lead or Architect may realize that the eventual human viewers of the code may dictate different ways of expressing the same algorithm. This may even call for a completely different language to be used. Perhaps it makes sense to write code in one language, but to write the tests against that code in another. Testing in another language is often a good way to extend the audience of code written to an otherwise smaller audience.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This also brings up the impact of language on developer culture. Code written in a language which is only understood by one group within a team can lead to a closed culture. Think of those developers who almost have a visceral reaction to coding in anything but their favorite language. This language is usually that of a closed culture. Entire myths can be constructed about the superiority of both the language and those who code in it. Ultimately, this can threaten to alienate the developers from others on their team (testers, BA&#39;s, designers) as well as the development community at large. Uncle Bob Martin touched upon this in his 2009 talk &lt;a href=&quot;http://www.youtube.com/watch?v=YX3iRjKj7C0&quot;&gt;&quot;What killed Smalltalk could kill Ruby too&quot;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then there is the case where the language is chosen for you. The experience in this scenario can range from mind-expanding to dehumanizing. Surely the Junior Developer can learn much from being made to code in another language, particularly if that language has been chosen by a group of seasoned veterans across an appropriate section of the team. In this case the developer may be introduced into whole new ways of communicating and problem solving. On the other hand, there is the case where the language is imposed by a corporate decision made years earlier which may have little bearing upon the way your team works today or the problems it is being asked to solve now. This is the fallacy of simply &#39;buying&#39; a language as a tool among equal tools. When that happens, the choice can become less about the effectiveness of the &#39;tool&#39; and more about the packaging/marketing (e.g. - IDE&#39;s, plugins, reporting tools, support plans, name recognition, third-party-apis and frameworks, etc.). In these cases, the developers may often feel as if they are being forced to use an inferior tool for what seems like an arbitrary reason.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Finding pragmatic ways to introduce other languages where appropriate can mitigate some of the negative cultural impacts and keep communication flowing. It also can make the developers &#39;smarter&#39; by making them look at and &#39;speak&#39; about the problem using different paradigms than they are used to. This is much the same as people who speak multiple languages. Becoming a polyglot programmer may just make you a better designer or architect as your pool of ways of looking at a problem will be larger.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
What other ways does the language you code in impact your team or say something about you?&lt;/div&gt;
</description><link>http://agile-itspeople.blogspot.com/2013/09/the-language-you-code-in-could-say-lot.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-4198924758216795522</guid><pubDate>Thu, 05 Sep 2013 15:56:00 +0000</pubDate><atom:updated>2013-09-16T13:24:47.887-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache Lucene</category><category domain="http://www.blogger.com/atom/ns#">Apache Solr</category><category domain="http://www.blogger.com/atom/ns#">Clade</category><category domain="http://www.blogger.com/atom/ns#">Python</category><category domain="http://www.blogger.com/atom/ns#">Search Engines</category><category domain="http://www.blogger.com/atom/ns#">Sunburnt</category><category domain="http://www.blogger.com/atom/ns#">Taxonomies</category><title>Clade Taxonomy with Solr 4.4 without getting burnt</title><description>I have recently had the opportunity to do some work with the &lt;a href=&quot;http://lucene.apache.org/solr/&quot; target=&quot;_blank&quot;&gt;Apache Solr&lt;/a&gt; search platform. It is a phenomenal tool and I am still discovering much of its power. I had the need to apply taxonomy to documents and essentially search using the taxonomy. Now, I understand that via the underlying &lt;a href=&quot;http://lucene.apache.org/&quot; target=&quot;_blank&quot;&gt;Lucene&lt;/a&gt;&amp;nbsp;search engine the newest versions of Solr have faceted searching and taxonomy support available, but there is also a nice open source tool called &lt;a href=&quot;http://www.flax.co.uk/blog/2012/06/12/clade-a-freely-available-open-source-taxonomy-and-autoclassification-tool/&quot; target=&quot;_blank&quot;&gt;Clade&lt;/a&gt;&amp;nbsp;which looked like it would fit the bill for working out some proof of concept ideas I had. The current version of Clade only supports Solr 3.6 out of the box. For my solution however, I was interested in utilizing the multicore support of the latest Solr version. Unfortunately, in addition to multicore support, there have been a &lt;a href=&quot;https://cwiki.apache.org/confluence/display/solr/Major+Changes+from+Solr+3+to+Solr+4&quot; target=&quot;_blank&quot;&gt;number of other changes&lt;/a&gt; since Solr3.6.&amp;nbsp;&lt;span style=&quot;line-height: 16px;&quot;&gt;An added benefit is that the Solr UI has improved substantially since 3.6 so digging into the created index is now easier.&amp;nbsp;&lt;/span&gt;Clade is also written largely in python, a language which I dive into only every other blue moon. This all led to bit of digging and as I could not find any documentation on how to get Clade working with the latest Solr version, here are the steps I took:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Updated the schema config so that the uniqueKey definition for doc_id included the multiValued=&quot;false&quot; attribute&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Changed the solr_url in the settings.py to conform to the multicore standard (e.g.: solr_url = ‘http://localhost:8983/solr/collection1/’ for the default example install of solr)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Similarly, when copying the conf files over, you have to make sure that you put them into the proper cores folder… (i.e. solr/collection1/conf NOT solr/conf)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;Replaced the included sunburnt with the latest &lt;a href=&quot;https://github.com/tow/sunburnt&quot;&gt;sunburnt&lt;/a&gt; (just named the included sunburnt folder sunburntOLD and copied the new sunburnt folder in) I did this just for good measure as so much of Solr had changed and I wanted to make sure that the sunburnt I was using to interface with it was a current as possible&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;In the Clade lib/taxonomy.py the sunburnt query in get_docs_for_category is being executed with the fields limited to just score=true… this causes a KeyError as doc_id and title are not returned. There is a note in the code to “FIX” it… this may have worked against the old versions of Solr and sunburnt as perhaps that limiting was not working properly in those versions, however, now you need to change the line to: results = query.field_limit([&quot;doc_id&quot;, &quot;title&quot;], score=True).paginate(rows=10).execute() (see: the &lt;a href=&quot;http://opensource.timetric.com/sunburnt/queryingsolr.html#returning-different-fields&quot;&gt;Sunburnt Docs&lt;/a&gt;)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #999999; font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;That brings back all three expected fields to create the desired tuple for return.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;Doing the above got Clade to work the same with Solr4.4 on my Mac as I had got it working with Solr 3.6 on my Linux machine.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;One other thing I have noted with Clade: re-running the classify script on the same data appears to create dupes in the index. This is not the expected indexing behavior so I will have to look a little closer as to what Clade is doing in that script. Fortunately, just blowing away the solr data directory clears it out - but that feels a bit heavy handed.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;line-height: 16px;&quot;&gt;I hope this helps someone. Now to start &lt;a href=&quot;http://www.petrikainulainen.net/programming/solr/spring-data-solr-tutorial-configuration/&quot; target=&quot;_blank&quot;&gt;wiring up my Solr instance via Spring Data&lt;/a&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
</description><link>http://agile-itspeople.blogspot.com/2013/09/clade-taxonomy-with-solr-44-without.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-8762043995187680832</guid><pubDate>Fri, 07 Sep 2012 19:42:00 +0000</pubDate><atom:updated>2014-11-03T11:10:01.707-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Remote Agile</category><category domain="http://www.blogger.com/atom/ns#">Team Dynamics</category><category domain="http://www.blogger.com/atom/ns#">Team Size</category><title>&quot;Our team is too _____ to be Agile&quot;</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdG5kLxYW4gHkrgC0017dhT8129dT3GKqmntJUKey9oZnlXbd88hGcu72AWsB_b4anEf4YQse_YINvTTBHuRv27qV0UkxQuDac-iPWeUHm0RYsgoSkJ67n8UBQtaOHHFgBvVJJuW_UVgg/s1600/Goldilocks.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdG5kLxYW4gHkrgC0017dhT8129dT3GKqmntJUKey9oZnlXbd88hGcu72AWsB_b4anEf4YQse_YINvTTBHuRv27qV0UkxQuDac-iPWeUHm0RYsgoSkJ67n8UBQtaOHHFgBvVJJuW_UVgg/s1600/Goldilocks.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Team dynamics is a common challenge with teams new to Agile Development. This often presents itself in comments such as &quot;Our team is too big/small/remote/unfocused/unavailable/divided to use Agile&quot;. &amp;nbsp;Teams which have not thrown in the towel and who are still earnestly struggling with this might ask questions such as:&lt;br /&gt;
&lt;br /&gt;
&quot;What is the &#39;right size&#39; for an Agile team?&quot;&lt;br /&gt;
&quot;Can we use Agile Management with remote teams or remote members&quot;&lt;br /&gt;
&quot;Does an Agile team need to be&amp;nbsp;co-located?&quot;&lt;br /&gt;
&quot;Do agile team members need to be 100% allocated?&quot;&lt;br /&gt;
&quot;How do you manage multiple Agile teams (with the same backlog)?&quot;&lt;br /&gt;
&lt;br /&gt;
With the exception of the last one, these are all assuming the definition of a team as being a group of people representing the various involved skills and interests necessary to produce a solution against a shared backlog.&lt;br /&gt;
&lt;br /&gt;
In essence, these are really all the same problem: how to synchronize the team members effectively. Not surprisingly, the first pain point that often comes up is around the Agile ceremony focused on team synchronization: the daily Stand-up or Scrum.&lt;br /&gt;
&lt;br /&gt;
How does this look in the previously mentioned scenarios:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Small team:&lt;/u&gt;&lt;/b&gt; &lt;i&gt;&quot;We (I mean &#39;I&#39;) know what we are (ahem... &#39;I am&#39;) working on, so having a stand-up feels like a waste of time.&quot;&lt;/i&gt;&lt;br /&gt;
Sometimes a team can be small enough that it really does keep itself in synch almost naturally. So maybe you don&#39;t need to have a formal daily synchronization. This is however where the other important output of a daily stand-up might need special attention: &lt;i&gt;updating information radiators&lt;/i&gt;. Just because the core team are all in alignment, make sure that you keep any other stake holders in the loop so that they can help or give guidance/direction where needed. Some sort of regular check point is also good to make sure that you have everyone&#39;s attention in case an impediment comes up that needs to be dealt with higher up.&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Advanced Tip:&lt;/i&gt;&lt;/b&gt; try synchronizing not just on tasks, but on your common goals. A short daily re-dedication to team goals or values (perhaps those noted in a retrospective) can be very powerful even for small teams which are otherwise synchronized on the work being done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Big Team:&lt;/u&gt;&amp;nbsp;&lt;i&gt;&quot;We have so many people involved that our stand-ups take an hour and we never really feel that we have a common direction on the work. Also, because the team is so big not everyone shows up all the time&quot;&lt;/i&gt;&lt;br /&gt;
First, ask yourself whether all these people are really needed for the work being done in the given Sprint. If not, can their needs/interests be met by less frequent special meetings to synchronize around their particular interests? Some teams get bogged down with extra BA&#39;s, Testers and even Scrum Masters and Developers who are really there to collect information for a tangential team. While communication and integration across teams is important, they are really more like additional Customers to your team and as such, should not be involved directly with the core teams synchronization. Once synching is completed, information they need can be more appropriately communicated in a separate meeting.&lt;br /&gt;
If everyone at your Stand-up is really part of the Sprint work, can the project backlog be carved up and the group split into two teams? This may take a little planning and grooming as well as coordination against the program/product backlog or release plan.&lt;br /&gt;
Agile can be done with large numbers of people. Team size however often tends to become less efficient beyond 6-8 developers plus the rest of the team. Usually this means 1-2 of each of the following: BA, QA/Tester, Scrum Master/Team Lead. The trick is to carve up the work and coordinate the effort such that value is still being regularly delivered. This is often done around value &#39;themes&#39;. If team size starts to interfere with delivery of your commitment every sprint, think about splitting up the team.&lt;br /&gt;
&lt;i style=&quot;font-weight: bold;&quot;&gt;Advanced Tip:&lt;/i&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;Splitting up the backlog and team is simply an organizational abstraction. Given you have decided to split the backlog into two teams for efficiency, if you hit a sprint where it makes more sense to work as one team to deliver value go ahead and recombine for that Sprint.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Team with remote/non-co-located members:&lt;/u&gt;&amp;nbsp;&lt;i&gt;&quot;It is hard to find a time to meet. Communicating with remotes loses much of the context so stand-ups become more of a status report. Not everyone shows up regularly. Not really sure what team members are working on. We feel like we are constantly fighting for synchronization, not just at stand-up.&quot;&lt;/i&gt;&lt;br /&gt;
I include non-co-located members in this category because one can feel like a remote if one is across the building, the street, or the city. The problems can be the same. When people work in close proximity to each other, there is a lot of high-bandwidth communication which goes on around discussions about tasks being done. Much of this can be lost by team members who are too far away to hear these conversations. This dis-synchronization seems to dilate with the difference in time zones. A team with members in the same time-zone +/-1 hour may be able to make up via various communication tools such as IM, Skype, Google Hangouts, Google Docs, and remote pairing techniques. Beyond that, the difference in time zones begins to add overhead to delivery. The benefit of the remote members has to be weighed against the cost to productivity on the Project as whole. One way to counter this friction is to gather remotes into teams which are closer in time zone (ideally co-located) to each other than the main team and carve off some of the backlog just for them, similar to dealing with a too &lt;b&gt;Big Team&lt;/b&gt;. Similar also to the &lt;b&gt;Small Team&lt;/b&gt;, regular and frequent updating of information radiators and publishing them so that remote members can see them is crucial. If it can be partially automated (such as build status, or even Sprint burn downs/ups) all the better. This is the type of team where having a digital Story/task board or at least duplicating the Story/task board digitally may be highly beneficial. &lt;i style=&quot;font-weight: bold;&quot;&gt;Advanced Tips:&lt;/i&gt;&amp;nbsp; &lt;b&gt;1)&lt;/b&gt; If you can afford to bring the remotes &quot;to the mothership&quot; at least for a sprint or two in the beginning, that can help solidify the team. Some teams bring the remotes &quot;home&quot; at regular intervals. &lt;b&gt;2) &lt;/b&gt;Remote pairing is a viable technique. If you have high bandwidth internet, you can pair using tmux or google docs (depending on what you are working on) while speaking over skype or IM. Particularly for paired programming, however, you should make sure that the remotes are good at pairing in person, so they know what to adjust to when pairing remotely.&amp;nbsp;An excellent presentation on pairing done right can be watched&amp;nbsp;&lt;a href=&quot;http://agile.dzone.com/videos/pair-programming-show&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&amp;nbsp;Joe Moore also has lots of good tips on his&amp;nbsp;&lt;a href=&quot;http://remotepairprogramming.com/&quot; target=&quot;_blank&quot;&gt;remote pairing blog&lt;/a&gt;.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Team with partially allocated members:&lt;/u&gt;&amp;nbsp;&lt;i&gt;Similar to the &lt;b&gt;Team with remote members&lt;/b&gt; with the added &quot;Partially allocated members are going to A LOT of daily meetings.&quot;&lt;/i&gt;&lt;br /&gt;
Sure, it is nicer to have 100% allocated teams, however, team members do not need to be 100% allocated to an Agile project for it to work. They do need to be 100% dedicated to working on the Agile project for the percent of time they are allocated. If a team has a member who is allocated 50% to a project, for 20 hours of their 40 hr week, they should be working solely on helping the team meet its Sprint commitment. This is one of the reasons I do not like assigning tasks during planning but rather prefer to just place the stories in priority order and allow the team members to pick up tasks as they finish other ones. In the partial allocation scenario this avoids someone who finishes their task early, realizing their other tasks are blocked, and then just spending their time trying to get ahead on their other project. What should happen is they should be empowered to pick up something else in the Sprint backlog to help the team deliver the value it has promised.&lt;br /&gt;
Another guideline I have found is that allocation beyond two projects usually lowers productivity. The scheduling of time to synchronize with the team can actually become harder with too many allocations than it is with remote members. If they are allocated across 3+ other Agile projects, think about how much time they are in meetings rather than working for any of the projects&#39; deliverables. Furthermore, the context switching demanded on them is a huge drag on their ability to engage meaningfully.&lt;br /&gt;
Due to the caveats and the hidden losses of productivity, this is why many teams just decide to have 100% allocation and avoid the potentially costly headaches.&lt;br /&gt;
&lt;b&gt;Advanced Tip:&amp;nbsp;&lt;/b&gt;If you have a program with many projects who share many of the same resources, consider consolidating those shared resources and carving the backlog such that they are only spread across one or two projects. With two projects, someone can work in the morning on one project, go to lunch and finish the day on the other project. This is much more manageable for all involved.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Multiple teams (or remote teams) with the same backlog:&lt;/u&gt;&amp;nbsp;&lt;i&gt;Similar to the &lt;b&gt;Big Team &lt;/b&gt;with the added &quot;We often feel we are stepping on each others toes. We find it hard to break up/hand-off/work on stories and deliver meaningful value.&quot; Add the complexities of the &lt;b&gt;Team with remote members&lt;/b&gt; if one or more of the teams is remote.&lt;/i&gt;&lt;br /&gt;
The difficulty here seems to come from the fact that being too closely joined around a backlog, the teams are not independent enough to self-organize and drive value. Try to carve up the backlog into functional chunks. This may be almost a sub-backlog. If the teams are working this way, then also ask whether synchronization with both teams fully present is of real value or whether each team should synchronize internally and simply report out at a separate meeting regarding integration points. This can keep the team focused on the work it has in front of it, instead of the work the other team is doing which it really cannot impact anyhow. Having good testing between these teams can provide an excellent interface or bridge. &amp;nbsp;This can allow teams to develop independent of the deliverable of the other team. When the other team completes its portion the testing framework is already there to verify the final integration. You may want to up your compliment of testers to at least one per team with possibly an additional one to facilitate cross team testing. Updated information radiators are also key to helping each team stay on top of what the other is doing without being over intrusive.&lt;br /&gt;
&lt;b&gt;Advanced Tip: &lt;/b&gt;One of the dangers of carving up a backlog and using multiple teams is a siloing effect. To combat this rotation of team focus can be a powerful tool. If teams are all local, they can implement this via rotation of members. This provides a gradual change that has less impact on each teams velocity. If one or more teams are remote, this can also be done, but you will likely wish to switch the whole teams focus. In this case, you can mitigate the drag of context change by setting up a temporary exchange program. Let us say Team A is working on widgets and Team B is working on sprockets. When they switch a member of Team A continues to work as a remote pair for Team B for a Sprint or two. In this way Team B can get some of the expertise of Team A&#39;s prior work on widgets. Similarly someone from Team B would remote pair with Team A for a sprint or two sharing knowledge about sprockets. Again, well written tests also can greatly facilitate this transfer of knowledge and responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://agile-itspeople.blogspot.com/2012/09/our-team-is-too-to-be-agile.html</link><author>noreply@blogger.com (CyberusFaustus)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdG5kLxYW4gHkrgC0017dhT8129dT3GKqmntJUKey9oZnlXbd88hGcu72AWsB_b4anEf4YQse_YINvTTBHuRv27qV0UkxQuDac-iPWeUHm0RYsgoSkJ67n8UBQtaOHHFgBvVJJuW_UVgg/s72-c/Goldilocks.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-9164788162287364801</guid><pubDate>Wed, 30 May 2012 02:47:00 +0000</pubDate><atom:updated>2012-05-29T19:48:49.552-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Ancient Agility</category><category domain="http://www.blogger.com/atom/ns#">historical agility</category><title>9th century incremental development</title><description>&lt;div&gt;&lt;p&gt;Appreciation of the incremental, pragmatic approach used in Agile Development from the annals of history:&lt;/p&gt;
&lt;p&gt;&quot;The just man builds on a modest foundation and gradually proceeds to greater things.&quot; - unknown circa 9th&amp;#160; century.&lt;/p&gt;
&lt;p&gt;This saying is used by Asser to describe the philosophy of learning of King Alfred the Great.&lt;/p&gt;
&lt;p&gt;* &#39;just man&#39; may also be more modernly translated as &#39;man with sound judgement&#39;.&lt;/p&gt;
&lt;/div&gt;</description><link>http://agile-itspeople.blogspot.com/2012/05/9th-century-incremental-development.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-1348841994923400131</guid><pubDate>Fri, 24 Feb 2012 03:15:00 +0000</pubDate><atom:updated>2012-02-23T20:20:31.464-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Ancient Agility</category><category domain="http://www.blogger.com/atom/ns#">Homer</category><category domain="http://www.blogger.com/atom/ns#">pairing</category><title>Homer on Pairing</title><description>(From the &lt;u&gt;Iliad&lt;/u&gt;, Diomed in giving his counsel on how the Achaeans might capture some intelligence on the Trojan plans):&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;&quot;When two men are together, one of them may see some opportunity which the other has not caught sight of; if a man is alone he is less full of resource, and his wit is weaker.&quot;&lt;/blockquote&gt;&lt;/div&gt;</description><link>http://agile-itspeople.blogspot.com/2012/02/homer-on-pairing.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-644338073289828948</guid><pubDate>Fri, 10 Feb 2012 15:55:00 +0000</pubDate><atom:updated>2012-02-10T08:07:33.542-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Acceptance Testing</category><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">BDD</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Cucumber</category><category domain="http://www.blogger.com/atom/ns#">Integration Testing</category><category domain="http://www.blogger.com/atom/ns#">Ruby on Rails</category><category domain="http://www.blogger.com/atom/ns#">Test Driven Design</category><title>Prezi on Writing Communicative Tests using BDD, Cucumber and Rails</title><description>&lt;div class=&quot;prezi-player&quot;&gt;&lt;style media=&quot;screen&quot; type=&quot;text/css&quot;&gt;
.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }
&lt;/style&gt;&lt;object classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; height=&quot;400&quot; id=&quot;prezi_jrtsf-c0lwn0&quot; name=&quot;prezi_jrtsf-c0lwn0&quot; width=&quot;550&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://prezi.com/bin/preziloader.swf&quot;/&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;/&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#ffffff&quot;/&gt;&lt;param name=&quot;flashvars&quot; value=&quot;prezi_id=jrtsf-c0lwn0&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0&quot;/&gt;&lt;embed id=&quot;preziEmbed_jrtsf-c0lwn0&quot; name=&quot;preziEmbed_jrtsf-c0lwn0&quot; src=&quot;http://prezi.com/bin/preziloader.swf&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;550&quot; height=&quot;400&quot; bgcolor=&quot;#ffffff&quot; flashvars=&quot;prezi_id=jrtsf-c0lwn0&amp;amp;lock_to_path=1&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;div class=&quot;prezi-player-links&quot;&gt;&lt;a href=&quot;http://prezi.com/jrtsf-c0lwn0/writing-communicative-tests-with-bdd-cucumber-rails/&quot; title=&quot;Writing Communicative Tests with BDD, Cucumber &amp;amp; Rails&quot;&gt;Writing Communicative Tests with BDD, Cucumber &amp;amp; Rails&lt;/a&gt; on &lt;a href=&quot;http://prezi.com/&quot;&gt;Prezi&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://agile-itspeople.blogspot.com/2012/02/prezi-on-writing-communicative-tests.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-2615374635958884814</guid><pubDate>Tue, 25 Oct 2011 16:10:00 +0000</pubDate><atom:updated>2011-10-25T13:44:35.367-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Acceptance Testing</category><category domain="http://www.blogger.com/atom/ns#">Agility Patterns</category><category domain="http://www.blogger.com/atom/ns#">Aslak Hellesoy</category><category domain="http://www.blogger.com/atom/ns#">BDD</category><category domain="http://www.blogger.com/atom/ns#">Cucumber</category><category domain="http://www.blogger.com/atom/ns#">Gherkin</category><category domain="http://www.blogger.com/atom/ns#">Rails</category><category domain="http://www.blogger.com/atom/ns#">Ruby on Rails</category><category domain="http://www.blogger.com/atom/ns#">web_steps</category><title>When the Cucumber is mightier than the Pen - Fixing Rails 3 in Action</title><description>Aslak Hellesoy and the good people behind Cucumber have realized there &lt;a href=&quot;http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off&quot;&gt;was a problem&lt;/a&gt; in the Cucumber community. People were using web_steps to build, rather than just as a set of examples. So, the latest versions of cucumber have removed the creation of web_steps and the attendant files when you run the generator.&lt;br /&gt;
&lt;br /&gt;
As Mr. Hellesoy noted in his blog entry, this is going to break a lot of Rails training materials which have come to rely on these files being available.&lt;br /&gt;
&lt;br /&gt;
Having recently gotten a copy of Rails 3 in Action and noticing that an edit seems to be a ways off, I offer my humble solution for getting through chapter 3 of this book using the latest Cucumber. You can and probably should still read through the text that I skip in the book, as it does give you insights, but my path below will allow you to use Cucumber the &#39;right&#39; way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;The trouble starts on Page 55&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;I have rewritten the Gherkin for the feature file. Notice the more domain language syntax?&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Listing 3.8&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;b&gt;Feature:&lt;/b&gt; &lt;i&gt;Create projects&lt;/i&gt;&lt;br /&gt;
In order to have projects to assign tickets to&lt;br /&gt;
As a user&lt;br /&gt;
I want to create them easily&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;b&gt;Scenario:&lt;/b&gt; &lt;i&gt;Creating a project&lt;/i&gt;&lt;br /&gt;
Given I am on the homepage&lt;br /&gt;
When I navigate to the new project creation page&lt;br /&gt;
And I create a new project&lt;br /&gt;
Then I should be shown the project created verification message&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;Then skip to the portion about doing the db migration&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;rake db:migrate (page 56)&lt;br /&gt;
rake cucumber:ok&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;You can implement step definitions for undefined steps with these snippets:&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Given /^I am on the homepage$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;br /&gt;
When /^I navigate to the new project creation page$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;br /&gt;
When /^I create a new project$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;br /&gt;
Then /^I should be shown the project created verification$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;stick this in features/step_definitions/project_steps.rb&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Now edit this using Capybara API (&lt;a href=&quot;http://rubydoc.info/github/jnicklas/capybara/master/file/README.rdoc&quot;&gt;http://rubydoc.info/github/jnicklas/capybara/master/file/README.rdoc&lt;/a&gt;)&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Given /^I am on the homepage$/ do&lt;br /&gt;
&amp;nbsp; visit(&#39;/&#39;)&lt;br /&gt;
end&lt;br /&gt;
When /^I navigate to the new project creation page$/ do&lt;br /&gt;
&amp;nbsp; click_link(&#39;New Project&#39;)&lt;br /&gt;
end&lt;br /&gt;
When /^I create a new project$/ do&lt;br /&gt;
&amp;nbsp; fill_in(&#39;Name&#39;, :with =&amp;gt; &#39;TextMate 2&#39;)&lt;br /&gt;
&amp;nbsp; click_button(&#39;Create Project&#39;) &lt;br /&gt;
end&lt;br /&gt;
Then /^I should be shown the project created verification$/ do&lt;br /&gt;
&amp;nbsp; page.should have_content(&quot;Project has been created.&quot;)&lt;br /&gt;
end&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;The visit(&#39;/&#39;) is substituted for the path_to stuff from web_steps that is mentioned on page 56&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;basically we are sending it to the root&amp;nbsp;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;continue to page 57-58&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;when editing the routes.rb file&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;…&lt;br /&gt;
&amp;nbsp; # You can have the root of your site routed with &quot;root&quot;&lt;br /&gt;
&amp;nbsp; # just remember to delete public/index.html.&lt;br /&gt;
&amp;nbsp; # root :to =&amp;gt; &#39;welcome#index&#39;&lt;br /&gt;
&amp;nbsp; root :to =&amp;gt; &quot;projects#index&quot;&lt;br /&gt;
...&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;continue through to page 61&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;when editing routes.rb&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;…&lt;br /&gt;
&amp;nbsp; # Sample resource route (maps HTTP verbs to controller actions automatically):&lt;br /&gt;
&amp;nbsp; # &amp;nbsp; resources :products&lt;br /&gt;
&amp;nbsp; resources :projects&lt;br /&gt;
…&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;You can continue on till&amp;nbsp;Page 73 adding a title:&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;add the following line to the creating_projects.feature&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;And I should be on the project page for the new project&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;running &lt;i&gt;rake cucumber:ok&lt;/i&gt; will give you the following step def to add to your file (project_steps.rb)&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Then /^I should be on the project page for the new project$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&amp;nbsp;&lt;/blockquote&gt;Then edit this to: &lt;blockquote class=&quot;tr_bq&quot;&gt;Then /^I should be on the project page for the new project$/ do&lt;br /&gt;
&amp;nbsp; current_path.should == project_path(Project.find_by_name!(&#39;TextMate 2&#39;))&lt;br /&gt;
&amp;nbsp; page.should have_content(&quot;TextMate 2 - Projects - Ticketee&quot;)&lt;br /&gt;
end&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;This replaces the paths.rb stuff and the other web_steps.rb stuff referred to on page 73&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;do read the stuff on the bottom of page 73-74 about the dynamic method invocation&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;i&gt;rake cucumber:ok&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;will give following error:&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;…&lt;br /&gt;
&quot;expected there to be content &quot;TextMate 2 - Projects - Ticketee&quot; in &quot;Ticketee\n\n&amp;nbsp; \n&amp;nbsp; &amp;nbsp; Project has been created.\n&amp;nbsp; \nTextMate 2\n\n\n&quot; (RSpec::Expectations::ExpectationNotMetError)&quot;&lt;br /&gt;
…&lt;/blockquote&gt;&lt;div class=&quot;p1&quot;&gt;(instead of the expected #has_content? error mentioned in the text)&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;both are Rspec type errors though&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;continue on with page 74-77&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;New Cucumber Feature for Page 77&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;make your features/creating_projects.feature look like:&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;Feature: Creating projects&lt;br /&gt;
&amp;nbsp; In order to have projects to assign tickets to&lt;br /&gt;
&amp;nbsp; As a user&lt;br /&gt;
&amp;nbsp; I want to create them easily&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&amp;nbsp; Background:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Given I am on the homepage&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; When I navigate to the new project creation page&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Scenario: Creating a project&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; And I create a new project&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; Then I should be shown the project created verification&lt;br /&gt;
&amp;nbsp; &amp;nbsp; And I should be on the project page for the new project&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;&amp;nbsp; Scenario: Creating a project without a name&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; And I try to create a project without a name&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Then I should be informed that the project has not been created&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; And I should be told that the name is required&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;i&gt;rake cucumber:ok&lt;/i&gt;&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Add these to the project_steps.rb&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;When /^I try to create a project without a name$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;br /&gt;
Then /^I should be informed that the project has not been created$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;br /&gt;
Then /^I should be told that the name is required\.$/ do&lt;br /&gt;
&amp;nbsp; pending # express the regexp above with the code you wish you had&lt;br /&gt;
end&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Implement them as per below:&lt;/div&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;When /^I try to create a project without a name$/ do&lt;br /&gt;
&amp;nbsp; click_button(&#39;Create Project&#39;)&lt;br /&gt;
end&lt;br /&gt;
Then /^I should be informed that the project has not been created$/ do&lt;br /&gt;
&amp;nbsp; page.should have_content(&quot;Project has not been created.&quot;)&lt;br /&gt;
end&lt;br /&gt;
Then /^I should be told that the name is required\.$/ do&lt;br /&gt;
&amp;nbsp; page.should have_content(&quot;Name can&#39;t be blank&quot;)&lt;br /&gt;
end&lt;/blockquote&gt;&lt;div class=&quot;p2&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;This should get you on track to continue at the bottom of page 77.&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;I realize my Tests are not ideal. For instance the second scenario could also check that on a failed verification you stay on the New Project page. I was simply trying to mirror what the book had and put it into a more business domain syntax. It also nicely shows the division between the Gherkin and the step definitions.&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;Hopefully this is helpful to others. As I have time to go through the book, I will try to add further updates, but this should give most a good start in the right direction.&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;I am eager to see other modifications others make to this.&lt;/div&gt;&lt;div class=&quot;p1&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://agile-itspeople.blogspot.com/2011/10/when-cucumber-is-mightier-than-pen.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-3041665735933221784</guid><pubDate>Tue, 25 Oct 2011 15:48:00 +0000</pubDate><atom:updated>2011-10-25T08:48:24.690-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Acceptance Testing</category><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Agile principles</category><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Agility Patterns</category><category domain="http://www.blogger.com/atom/ns#">BDD</category><category domain="http://www.blogger.com/atom/ns#">Behavior Driven Development</category><category domain="http://www.blogger.com/atom/ns#">Cucumber</category><category domain="http://www.blogger.com/atom/ns#">Integration Testing</category><category domain="http://www.blogger.com/atom/ns#">RSpec</category><category domain="http://www.blogger.com/atom/ns#">Steak</category><category domain="http://www.blogger.com/atom/ns#">Test Driven Design</category><title>Eat your meat AND your vegetables!</title><description>No matter what dietary fads are upon us, most of us realize that we need to eat a balanced diet.*&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Why is it in the software industry that I so often see teams binging on just one thing when it comes to testing?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What I mean specifically, is testing frameworks. In the Rails world the frameworks &lt;i&gt;du jour&lt;/i&gt; are RSpec, Cucumber and Steak - with a little Capybara sauce. Mmmm sounds&amp;nbsp;tasty!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;RSpec has become a solid core for all layers of testing with the other parts. Cucumber was initially created to make the BDD&#39;ness more domain specific... so that customers/project owners/BA&#39;s could read and even write them. Unfortunately, many Gherkin examples in the wild tend to be anything but non-coder friendly. This seems to have occurred due to many factors which may come to play on a team.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;One of these factors seems to be part of what has attracted many people to Ruby on Rails in the first place. You often hear Rails coders talking about how they love it that RoR &#39;gets out of the way&#39; and &#39;just lets them code&#39;. This is definitely laudable when what is getting in the way is technical&amp;nbsp;scaffolding or other technical&amp;nbsp;encumbrances. It is like using a power tool over the old manual ones. Where it becomes a problem is when what is being &#39;gotten out of the way&#39; is meaningful communication and collaboration&amp;nbsp;across&amp;nbsp;the team. Teams who have tried to get their &#39;business folks&#39; involved through BDD have run into the problem that either the business loses interest or can&#39;t write the tests well enough. I believe at least a good portion of this is due to how the tests are being written. They are often too low level - basically a series of instructions for filling out web forms, clicking buttons, etc. &amp;nbsp;The folks behind Cucumber have tried to &lt;a href=&quot;http://aslakhellesoy.com/post/11055981222/the-training-wheels-came-off&quot;&gt;force a solution&lt;/a&gt; by removing one of the culprits they provided early on: web_steps.rb. Web_steps was a sample collection of step definitions around many boring day to day activities. Instead of serving simply as an example, teams baked their tests around it - creating many awful to read, low level test suites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;While I applaud the removal of web_steps on the part of Cucumber, it is having the oposite effect. Teams are just moving away from Cucumber to Steak (because it is more &#39;coder&#39; friendly) for their Acceptance/Integration tests. What lies at the core is&amp;nbsp;a one-two punch of badness that I am seeing more and more: Teams are confusing Integration Testing with Acceptance testing AND coders are writing those tests.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Acceptance tests should be written in the domain language of the business. They are meant to be high level - to provide the coders a place to start.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Integration tests should be written to test across &#39;the stack&#39; and as such are more focused on the implementation details. These are therefore in the more code like language of the&amp;nbsp;implementation&amp;nbsp;domain.&lt;/div&gt;&lt;div&gt;Unit Tests test the code directly... everyone knows the coders are supposed to write these.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Cucumber is good for BDD acceptance tests. Steak is great for integration tests. &lt;i&gt;Eat your meat and vegetables!&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Let me suggest a &lt;i&gt;possible&lt;/i&gt; test driven development team and their roles in testing under the above approach.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&quot;The Business&quot; (Story owners/Customers/BAs/etc)&lt;/b&gt;&lt;/i&gt; - write high level Acceptance Test Scenarios - These could even be part of the story. In essence they write the Cucumber Tests. (Someone else might actually cut and paste the tests into a &#39;feature&#39; file, but you get the idea).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&quot;Coders&quot; (Software Engineers/Programmers/etc)&lt;/b&gt;&lt;/i&gt; - write the step definitions behind the Gherkin. Step definitions can be more implementation specific. Writing these can be the first time the coders actually start doing Test Driven Design. Then the coders write their Unit tests however they see fit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;b&gt;&quot;Testing Team&quot; (Test Engineers/QAs)&lt;/b&gt;&lt;/i&gt; - write Integration tests using Steak, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The above scenarios are based upon testing using Cucumber and Steak. It could just as well apply to the myriad other testing frameworks (Fitnesse, JBehave, Selenium, etc). &lt;i&gt;The essence is that integration and acceptance testing should be separate endeavors.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I can hear the objections already. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&quot;We don&#39;t have a testing team.&quot;:&lt;/b&gt; &amp;nbsp;Fine, there are projects which are small enough, simple enough where the coders serve this role. The point is, integration testing is a different animal from acceptance testing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&quot;Our business people are not involved/would never write tests)&quot;:&lt;/b&gt; Really? Who writes your stories? Maybe they were driven away by previous &lt;a href=&quot;http://elabs.se/blog/15-you-re-cuking-it-wrong&quot;&gt;bad cukes&lt;/a&gt;. Listen to your business people describe the functionality they want. &quot;So I am on the home page and when I go to create a new account then I should get some indication that the account creation succeeded&quot;. That is practically Gherkin already! If they won&#39;t physically write the tests, then the BA&#39;s could certainly be following them around &#39;taking dictation&#39; as the acceptance tests drip from the Owners&#39; lips.&amp;nbsp;&lt;/div&gt;&lt;div&gt;On the other hand, if your business people are not involved, it is likely you have a deeper issue than what testing framework you are using. Do you have an Agility Coach?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;&quot;That is totally going to slow us down!&quot;:&lt;/b&gt;&amp;nbsp;Again, fine! Speed by itself is not a good thing. Without direction it simply means you are going to drive off the cliff faster. If you are a business owner and the &#39;acceptance tests&#39; you are being fed make you want to cry with their technical level of detail - ask why they are being written this way - or better yet - write them yourself. If the testing is being taken away from you completely, don&#39;t let them. Don&#39;t let anyone tell you that integration tests are the same thing as acceptance tests. Coders, if you want your business owners to engage more, realize that giving them pages of cryptic, coder centric tests to review &lt;a href=&quot;http://skillsmatter.com/podcast/home/refuctoring-your-cukes&quot;&gt;does not really encourage their engagement&lt;/a&gt;. As stated before, the idea of &lt;a href=&quot;http://en.wikipedia.org/wiki/Behavior_Driven_Development&quot;&gt;BDD&lt;/a&gt; was to simplify acceptance gathering so that coders would know where to start. It supports Agility by giving a venue for business people and programers to collaborate frequently. In the end, the slight reduction in speed along a more prudently chosen path will likely save you way more time than a radical course change much later in the project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;All of this raises a number of other questions I have been pondering for years - such as having different types of &#39;Customers&#39;, What sufficiency of testing levels for a given project, optimizing testing approaches...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;It also makes me hungry...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;* - &lt;i&gt;my wife wanted me to note that our household is vegetarian and that I am only promoting Steak in the &#39;software&#39; sense. Thank you dear!&lt;/i&gt; :-)&lt;/div&gt;</description><link>http://agile-itspeople.blogspot.com/2011/10/eat-your-meat-and-your-vegetables.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-2678241977542877427</guid><pubDate>Fri, 02 Sep 2011 16:46:00 +0000</pubDate><atom:updated>2011-09-02T11:12:39.422-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile Practices</category><category domain="http://www.blogger.com/atom/ns#">Agile principles</category><category domain="http://www.blogger.com/atom/ns#">Agile Transformation</category><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Agility Patterns</category><category domain="http://www.blogger.com/atom/ns#">Agility Practice</category><category domain="http://www.blogger.com/atom/ns#">internalization</category><category domain="http://www.blogger.com/atom/ns#">pairing</category><category domain="http://www.blogger.com/atom/ns#">training</category><title>Shortcuts don&#39;t always get you where you set out for</title><description>I have lived in a lot of places over the years. I have learned with each new place to get out and drive (or better - bike or walk) to start to get a feel for the place. Assess the lay of the land if you will. A number of years ago I was enrolled in a three year program at St. Louis University. So, I got myself a map which I kept posted near the door to my then apartment. Every weekend I would pick a place or a route to explore. I would mark it on the map either upon my departure or return. One day I had decided to check out some places downtown. On my way out, I asked one of my friends who was a native if they could tell me the best way to get to the first building. I thanked him and started on my drive. About three-quarters of the way there, battling down-town traffic I caught a glimpse of the building I was trying to get to down a quiet side street. This is nuts I thought. Why am I dealing with all this traffic when the building is RIGHT there! Needless to say, I promptly turned down the almost empty side street and headed merrily towards my intended destination. I remember congratulating myself that I had found a faster way than my native friend and making plans to tell him about the route when I got back. Then I made it over the first hill. While I could clearly see the building I had set out for from the initial route, what I had not seen was that this street ended with a very solid structure between my car and the streets beyond which would actually take me there. Of course, it then took even longer to go back, re-merge with traffic and get to my final destination. It turns out that St. Louis has a lot of these deceitful &quot;shortcuts&quot;. My friend had a good laugh when I got back. I realized that I had momentarily put the real goal at risk by prioritizing speed to the goal. In the end it took a lot longer.&lt;br /&gt;
&lt;br /&gt;
Let me tell you another story. One of my passions for many years is the traditional martial art of fencing. After a while, I wound up teaching it myself and running a salle. Now, most people who start fencing have at best, romantic ideas about what they are getting into. Few have any other martial arts background when they come to the salle. Fewer still, if any, have trained their bodies in the way that is necessary to move in our art. Our job is to train them how not to be hit by someone intent on hitting them. One of the first lessons a student learns with sword in hand is their guards and their parries. Inevitably, their first parries are all really wide (a natural reaction when someone is coming at you with a sword!). We calmly explain that while they may have avoided that attack, what if it had been a feint? Their large motion has left them wide open in all the other lines of attack. We work with them over and over through drills to parry a precise way and precise distance. We also repeat over and over that the goal is not to be hit and that part of that is to be efficient enough to be able to deal with multiple changing attacks.&lt;br /&gt;
&lt;br /&gt;
Now one of the unique parts of our salle is that we believe in having all levels train together. There is value for the novices to work with fencers who already have the basics down. Additionally, the advanced students never stop drilling the basics. Eventually, therefore, we will get the question: why do you make us parry that way when the more advanced fencers parry differently when they fence? &lt;br /&gt;
Of course when starting out, focusing on form is important because it is really teaching you something deeper: how to be efficient so as not to get hit. More advanced students know more ways to do this by manipulating time, distance, blade engagement, etc. A novice does not. But all the novice sees is that the advanced fencer is using a smaller parry or a larger parry than what they have been taught. The thing is, it takes a minimum of two years of training and constantly being told the mantras about not being hit, and fencing is about trained, logical, efficiency rather than reactive reflexes before it sinks in.&lt;br /&gt;
&lt;br /&gt;
So what does all of this have to do with Agile Development?&lt;br /&gt;
&lt;br /&gt;
A friend and fellow Agilist, &lt;a href=&quot;http://twitter.com/#%21/cbartling&quot;&gt;Chris Bartling&lt;/a&gt;, tweeted about a post he saw the other day: &lt;span class=&quot;z19Dle&quot; id=&quot;col-z12wzzv5dli3er2ai04cixib1z2iexubfgc&quot;&gt;&lt;span class=&quot;zo&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;a class=&quot;ot-anchor&quot; href=&quot;http://t.co/jq531Il&quot;&gt;http://t.co/jq531Il&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The blogger, Jay Fields, makes an interesting point. The goal of paired programming seems to address this principle of the Agile Manifesto: &quot;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&quot; It also hits some of the other principles such as attention to technical excellence and of course the primary one of continually delivering valuable software (by quality checks and reduction of truck numbers). The thing is, no-where in the manifesto does it say that to achieve these goals you have to pair. Rather it trusts motivated, self reflective and self organizing teams to come up with good ways to meet these goals themselves. All of this I agree with. yet something still troubled me about the post.&lt;br /&gt;
&lt;br /&gt;
Jay is like the native St. Louis resident, or the advanced fencer. He understands the deeper goals and has enough experience to be able to draw upon a myriad of techniques to achieve them. The thing is, it takes a minimum of two years of fencing training and constantly being told the mantras about not being hit, and fencing is about trained, logical, efficiency rather than reactive reflexes before it sinks in. Even after living years in a city, my knowledge of the most efficient routes will pale in comparison with someone who has spent their life there. Similarly, the principles of Agile development look great on paper... a team reads it and there is much head nodding and affirmative mumbling. Yet, they don&#39;t really sink in until you practice them. Jay mentions that he has been pairing for years before this recent project/position. Advanced fencers fence, novices practice techniques. Advanced Agilists are agile, teams new to Agility practice techniques to become more agile.&lt;br /&gt;
&lt;br /&gt;
My concern with the post is that like so many novice fencers, teams new to Agility will just see Jay not doing a technique which they may not agree with or find particularly painful initially. They will ask, why should we do it if he isn&#39;t... can&#39;t we just ask each other questions when stuff comes up? Unfortunately, too often, new &#39;Agile&#39; teams will fail to ask those questions. The rigor of stand-ups, TDD, pairing, even collocation, gets the team members into the habit of asking the right questions. It helps create a culture of communication and collaboration where it may not have existed before. Of course, simply doing these practices is not enough, and should never be dogmatically considered the &#39;only way to Agility&#39; - a good coach will work with the team as individuals to nurture the new culture in subtle ways relevant to the team and individuals... but discarding a new practice without understanding the underlying goal or reason can wind up being as wasteful as my &#39;shortcut&#39; in St. Louis - and probably a lot more costly.&lt;br /&gt;
&lt;br /&gt;
</description><link>http://agile-itspeople.blogspot.com/2011/09/shortcuts-dont-always-get-you-where-you.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-4190957697068472287</guid><pubDate>Wed, 20 Apr 2011 20:05:00 +0000</pubDate><atom:updated>2011-04-25T13:44:40.244-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Second Life</category><title>Presenting on Agility in Second Life!</title><description>On Wed April 20th at 7pm PDT, I will be presenting in Second Life. The topic is &quot;Developing Healthy Teams through Agility&quot;. &lt;br /&gt;
&lt;br /&gt;
Second Life is a thriving Virtual Reality community on the internet. There is a group of Agilists who meet there regularly.&lt;br /&gt;
&lt;br /&gt;
Follow this link to join us in Second Life for the presentation: &lt;a href=&quot;http://maps.secondlife.com/secondlife/Agile%203D/60/123/25&quot;&gt;http://maps.secondlife.com/secondlife/Agile%203D/60/123/25&lt;/a&gt;</description><link>http://agile-itspeople.blogspot.com/2011/04/presenting-on-agility-in-second-life.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-4457007487080442492</guid><pubDate>Thu, 10 Feb 2011 21:00:00 +0000</pubDate><atom:updated>2011-04-25T14:12:19.383-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Agility Patterns</category><category domain="http://www.blogger.com/atom/ns#">Aristotle</category><category domain="http://www.blogger.com/atom/ns#">Eudaimonia</category><category domain="http://www.blogger.com/atom/ns#">Flourishing</category><category domain="http://www.blogger.com/atom/ns#">People</category><category domain="http://www.blogger.com/atom/ns#">Virtue</category><title>Prezi of a collaborative presentation on Virtue and Agility Patterns</title><description>I gave a dynamic, collaborative presentation on Virtue and Agility Patterns. Rather than using a slide based presentation, I used a tablet to mark up documents on the screen. This gave more of a feeling of using a whiteboard/chalkboard and allowed me to interact more with the audience.&lt;br /&gt;
&lt;br /&gt;
Afterward, I compiled the artifacts into a Prezi.&lt;br /&gt;
&lt;br /&gt;
All in all a neat experiment in making various presentation technologies work for us, rather than the other way around.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://prezi.com/jfhtf48lswsr/sex-lies-agility-patterns/&quot;&gt;Sex, Lies &amp;amp; Agility Patterns&lt;/a&gt; on &lt;a href=&quot;http://prezi.com/&quot;&gt;Prezi&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to view it in full screen (under the More menu which appears at the bottom right corner of the Prezi).</description><link>http://agile-itspeople.blogspot.com/2011/04/prezi-of-collaborative-presentation-on.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-3229454249307165145</guid><pubDate>Sun, 06 Feb 2011 20:30:00 +0000</pubDate><atom:updated>2011-04-25T14:11:52.210-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Grammar</category><title>The Grammar of Agile Software Development</title><description>This is in response to David Hussman&#39;s Tweet : &quot;+5 RT @jbrains: &quot;Please please stop using &#39;agile&#39; as a noun&quot; - @pragdave (YES!!!!) #magicruby &lt;br /&gt;
&lt;br /&gt;
Agile: (adjective)&lt;br /&gt;
Agilely: (adverb)&lt;br /&gt;
Agility: (noun)&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
&quot;We are striving to develop our software in a more agile manner.&quot; - (Agile describes the manner [noun: object of a preposition] in which they are trying to develop [verb] the software [direct object].)&lt;br /&gt;
&quot;We are striving to develop our software more agilely&quot; - (Agilely describes how they develop [verb])&lt;br /&gt;
&quot;We seek greater agility in our software development&quot; - (Agility is the object of their seeking - and is as such a noun/direct object)&lt;br /&gt;
&lt;br /&gt;
I think that people have become lazy and started truncating the descriptive title &quot;Agile Software Development&quot; to just &quot;Agile&quot;. I am as guilty of this as anyone. Unfortunately this has done more harm than good and has led to a lot of confusion. Particularly, it may have contributed to the misguided notion that Agility is a binary state - using &quot;Agile&quot; as a noun gives the impression that it either exists or does not exist (&quot;Are you doing Agile?&quot;)whereas the term agility used in its common sense is well understood to be manifest in degrees.&lt;br /&gt;
&lt;br /&gt;
&quot;The young gymnast&#39;s agility was only enough to perform the most basic routine&quot;.&lt;br /&gt;
&quot;All things which move of their own volition are agile, however they possess this agility to varying degrees. Hence a deer can move more agilely than a rhinoceros.&quot;&lt;br /&gt;
&lt;br /&gt;
I hereafter shall endeavor to respect the proper terms of speech when discussing Agile Development.&lt;br /&gt;
&lt;br /&gt;
Any other suggested corrections of the use of the term &quot;Agile&quot; and its variances?</description><link>http://agile-itspeople.blogspot.com/2011/04/grammar-of-agile-software-development.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-3377892199893041957</guid><pubDate>Thu, 27 Jan 2011 00:08:00 +0000</pubDate><atom:updated>2012-09-14T09:39:48.508-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Aristotle</category><category domain="http://www.blogger.com/atom/ns#">Ethics</category><category domain="http://www.blogger.com/atom/ns#">Eudaimonia</category><category domain="http://www.blogger.com/atom/ns#">Fear</category><category domain="http://www.blogger.com/atom/ns#">Flourishing</category><category domain="http://www.blogger.com/atom/ns#">People</category><category domain="http://www.blogger.com/atom/ns#">Trust</category><category domain="http://www.blogger.com/atom/ns#">Virtue</category><title>Aristotelian Software Development = Agile Software Development?</title><description>I admit it. I am an Aristotelian. What I mean by that is that of the three predominant ethical theories, deontology, utilitarianism and virtue oriented ethics, the latter makes the most sense to me. It is the ethical theory which was promulgated by Aristotle. Jon Dahl gave an excellent &lt;a href=&quot;http://www.slideshare.net/jondahl/aristotle-and-the-art-of-software-development-presentation&quot; target=&quot;_blank&quot;&gt;introduction&lt;/a&gt; to ethical theory and comparison to software development. Initially, he alluded to the fact that determining what makes a good programmer has less to do with external signs, and more to do with the programmers habits. He briefly makes ethical comparisons of software development methodologies. In this sense, he starts to look at the human element of software development. The rest of the talk, however, makes comparisons between ethical theories and specific programming languages. Perhaps this is because he was at a Ruby conference. Ultimately, I think that a closer analogy can be drawn between specific programming languages and philosophical principles from Metaphysics or Ontology rather than Ethics. This is because languages are tools for expressing concepts. Ethics however, deals with humans and human society. The goal of Virtue Oriented Ethics is for the individual to achieve a state of Eudaemonia: human flourishing. Applied to software development we could say we wish the team or project to reach a state of flourishing, or Software Development Eudaimonia. As such, I think that comparison to ethical theories is more appropriate to things such as Software Development Methodologies or Project Management.&lt;br /&gt;
&lt;br /&gt;
I am an Agilist (no surprise there). If you have ever had the good fortune (Eudaimonia is also sometimes translated as good fortune) to be on a highly Agile team, you probably have a sense of this flourishing. Notice how I used the comparative when describing the Agile team. Agility is not a binary state as much as it is a spectrum. Similarly, Eudaemonia can be achieved to varying degrees. The recognition of underlying rules or laws which help a society achieve such a state is codified as Natural Law. In so far that Agile methodologies work because of their recognition of humans at the core of software development, I think Agile comes close to describing a Natural Law of software development. Yet it is one thing to state a Law or set of Laws and another to develop a lawful society. Dahl brings this up when he talks about how the XP rules as they are promulgated are very deontological. Following the rules does not ensure that you will be a good programmer. This is interesting in that the people who came up with XP were good programmers. The generation of their rules probably was a long process of self reflection and attempts to make both their code and themselves better. So while the rules they promulgate may be used deontologically, the rules&amp;nbsp; themselves were likely developed via a more virtue oriented or utilitarian analysis. A common concern is how to get a team or company to &#39;become Agile&#39;. Downloading lists of rules is easy, transforming a culture is not. Approaching Agility as attainable by degree seems to lead to better transformations. However these transformations are not simply replacing one deontological set of rules for another. People sense a real change in how they interact. &lt;br /&gt;
&lt;br /&gt;
Therefore I posit that Agility is the Eudaimonia of Software Development. To follow the Aristotelian thought that virtue is taught by role models, perhaps a better use of the XP rules is as good models to others; sort of a goal state for developers working on their own virtue. Yet this presupposes that there are virtues inherent to achieving Agility. What are these virtues? Where would we look to find these virtues? &lt;br /&gt;
&lt;br /&gt;
In his &lt;a href=&quot;http://possibility.com/blog/content/agile-owes-more-aristotle-renaissance&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt;, Todd Hoff compares Agile as Aristotelian with Waterfall which he deems Machiavellian. In this, the core element which he recognizes is a scale between Trust and Fear. He presents the Waterfall world as being fear driven, whereas the Agile world requires teams built on trust. I think this a good place to start with analyzing Agile from a Virtue Oriented perspective. In many lists of Virtues, the concept of Trust is apparent. It is usually listed as Faith. In our modern minds, this word often is equated with a naive, unfounded belief. The way we use the word faith throughout our language indicates trust born from an observation of habitual behavior. We can say a dog is faithful, or I have faith in my friends, team members or boss. We say we are faithful to our spouses. This is language of Trust. In many of the classical virtue lists, Trust/Faith is a core virtue. This is similar to what we see in Agile transformations. The failure of many teams to transform to a higher state of Agility is often tracked back to embedded distrust within the culture. &lt;br /&gt;
&lt;br /&gt;
In order to place the virtue of Trust in an Aristotelian context, it should be on a spectrum, with the virtue found at the mean of two extremes. So let us say that on one side we have distrust breeding fear. On the other side we have naive or blind trust, where we have no reason to really trust. The mean then is a Trustful state - where the team members both work to be Trustworthy/Faithful and based upon the actions of other team members they Trust or have Faith in them.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;
 &lt;br /&gt;
&lt;table border=&quot;5&quot; cellpadding=&quot;10&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Naive Trust&lt;/td&gt;&lt;td&gt;Trust/Trustworthiness&lt;/td&gt; &lt;td&gt;Distrust/Fear&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/center&gt;
&lt;br /&gt;
&lt;br /&gt;
What then are some other Virtues embedded in Agile which help to promote Software Development Eudaemonia? The XP rules mentioned by Dahl have been noted as being somewhat limited in scope. So,while they may be a good guide for some of the team, they may not be the best model for general Agility. In their broad approach, the Agile Manifesto and Agile Principles are a better suited for guiding general virtuous development toward Agility. In my next posting(s) on this topic, I will go through these documents and highlight traditional virtues which are embedded in the behavior they are trying to model. I will then discuss how these behaviors and particular techniques from various Agile methodologies can help a team or individual increase specific virtues and achieve greater Agility.</description><link>http://agile-itspeople.blogspot.com/2011/01/i-admit-it.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3463111286945235987.post-4074227353462061953</guid><pubDate>Tue, 04 Jan 2011 16:05:00 +0000</pubDate><atom:updated>2011-04-25T13:45:43.752-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agility</category><category domain="http://www.blogger.com/atom/ns#">Communication</category><category domain="http://www.blogger.com/atom/ns#">Feedback Loops</category><category domain="http://www.blogger.com/atom/ns#">People</category><title>What makes Agile work</title><description>In my career, I have seen team after team struggle to &#39;succeed&#39; at implementing Agile. I asked a recent Product Owner who felt that the team had been partially successful, but still had a way to go, what he felt made Agile successful on his team. His answer was enlightening. He said &#39;the ability to change.&#39; In essence, this is a tautology. Agility is the ability to change. It is why one would chose to implement Agile. It is not however, what makes Agile work. This is unfortunately typical. A team will focus on one practice or outcome of Agile as being the be-all of Agile. In so doing their focus creates false expectations and at the same time prevents them from focusing on making the changes necessary to harness Agile most effectively.&lt;br /&gt;&lt;br /&gt;So what is it that make Agile work? Let us look at the Agile Manifesto and the Principles behind it. Over and over again, one concept is referred to: &lt;span style=&quot;font-weight: bold;font-size:100%;&quot; &gt;People&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt; &lt;/span&gt;develop software. (Humanitatem Progressio Progressus) In other words, Agile is successful when it recognizes that Human Beings are the core component of the development process; not tools, not methodologies, not practices, not languages. Once we recognize that Humans, and not just Humans in the broad sense, but specific individuals, we are faced with individuals who each bring specific strengths and weaknesses to the development effort. From here on out, everything else in Agile is simply about helping teams enhance the strengths and mitigate the weaknesses of individuals on them. The primary tool which Agile uses for this is tight feedback loops. Agile fosters communication so that the dangers of weaknesses can be exposed and avoided and strengths can be shared or leveraged quickly.&lt;br /&gt;&lt;br /&gt;This brings me to the failure point for every team I have seen struggle with Agile. Something gets in the way of the communication.  While I intend to post on technical issues as well, my primary focus for this Blog is to explore the ways communication breaks down on Agile teams and what tools Agile methodologies have to solve this. Where the methodologies do not propose a direct solution, I hope to bring you thoughts from practice and professionals on tactics used to bring Agile teams back on course, keeping the principles and the humanity of software development in mind.</description><link>http://agile-itspeople.blogspot.com/2011/01/agile-patterns-for-designing-effective.html</link><author>noreply@blogger.com (CyberusFaustus)</author><thr:total>0</thr:total></item></channel></rss>