<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7318198126063885762</id><updated>2011-10-21T11:30:28.250-07:00</updated><category term='assert'/><category term='manifesto'/><category term='improve'/><category term='trust'/><category term='functionality'/><category term='refactoring'/><category term='kent beck'/><category term='yagni'/><category term='customer'/><category term='honesty'/><category term='demarco'/><category term='pair programming'/><category term='traps'/><category term='solid'/><category term='iteration board'/><category term='psychology'/><category term='respect'/><category term='agile'/><category term='backlog'/><category term='sales'/><category term='coding'/><category term='unit testing'/><category term='quality'/><category term='tdd'/><category term='maslow'/><category term='waterfall'/><category term='navigator'/><category term='priority'/><category term='testing'/><category term='review'/><title type='text'>Bits &amp; pieces on software as we are beginning to know it powered by Extreme Programming</title><subtitle type='html'>Agile Software Development, Kent Beck, Extreme Programming, XP, Values, Principles, Martin Fowler, Pair Programming, Iteration Board, Iteration Planning, Incremental Design, Agile Testing</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-6427700565753660089</id><published>2011-10-20T23:22:00.000-07:00</published><updated>2011-10-20T23:48:27.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='refactoring'/><title type='text'>TDR - Test Driven Review</title><content type='html'>We all did it a couple of times, but it wasn't until recently that I found out how useful and efficient it was. Our fresh hires start working on production code relatively soon after their first day. Nevertheless we want to review their work before check-in.  &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Getting up to speed&lt;/span&gt;&lt;br /&gt;I always start with, "Let me see the tests". It is only partially to emphasise the importance of tests, the real reason is that for me it's easier and quicker to engage in the task he has just solved. And this gives me the chance to profoundly review the code itself and how it looks.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Defining&lt;/span&gt;&lt;br /&gt;Sometimes we don't even continue to the code, because it turns out that he misinterpreted the task at hand, and solved something else. But that's okay too, for through the tests I can very easily and clearly explain what the real task is. If we were to do this via the implementation, it would be less unambiguous.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Demonstrating&lt;/span&gt;&lt;br /&gt;Finally, I can show him couple of coding tricks, again without being too superficial, yet being quite quick. What I mean is I can quickly refactor his code on the spot, without saying things like "... and you can imagine the rest" - no, at the end of the demonstration we have a still working code(checked by the help of the tests), but with me already having made my points on coding as we know it: expressive and duplication free.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-6427700565753660089?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/6427700565753660089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=6427700565753660089&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6427700565753660089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6427700565753660089'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2011/10/tdr-test-driven-review.html' title='TDR - Test Driven Review'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-2319987044668420797</id><published>2010-09-03T11:35:00.000-07:00</published><updated>2010-09-04T10:37:17.511-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='priority'/><category scheme='http://www.blogger.com/atom/ns#' term='yagni'/><category scheme='http://www.blogger.com/atom/ns#' term='backlog'/><title type='text'>Really.Only.Very.Rarely.</title><content type='html'>The jawbreaker above is one of the most efficient half-sentence that a client could unwittingly ruin your day with. And usually alongside your day goes most of the model you have been building up. On top of all there is this huge chasm between the thinking of the customer("Really, it's no biggie. We only have like two cases a month where this and that..") and the cruel reality of software's unforgiving nature, i.e. if you want the software handle those two-times-a-month exceptions then &lt;em&gt;that &lt;/em&gt;piece of the software needs to be developed just as well as another piece that handles all non-exceptional cases. &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Laymen have a hard time understanding it, and for us it sure feels like trying to explain the colors to a blind man. No wonder, I mean we have learned software in school for years, have been around in the industry for even more. We spend most of our time in an environment where this unforgiving nature of software is self-explanatory and taken for granted. &lt;br /&gt;&lt;br /&gt;It hasn't been till only recently that I realised how this problem is actually an opportunity. Why this jawbreaker is not something you should loath and fear -- on the contrary. This is something that can help you deliver quality software on time.&lt;br /&gt;&lt;br /&gt;The answer is almost here. I just need you to take a second and find out on your own.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-2319987044668420797?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/2319987044668420797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=2319987044668420797&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2319987044668420797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2319987044668420797'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/09/reallyonlyveryrarely.html' title='Really.Only.Very.Rarely.'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-977904760818345199</id><published>2010-06-14T12:28:00.000-07:00</published><updated>2010-06-14T13:45:45.964-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='waterfall'/><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='manifesto'/><title type='text'>Agile in hostile environment</title><content type='html'>It can be tricky to apply agile methods in a fundamentally waterfall environment. So tricky in fact, that we might be better off without agility. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; was created to help creating software of value, which - according to the founders - required a different approach and a different set of methods altogether. The neccessary shift of approach was expressed in nice and clean preferences from wich the methods are more or less directly derived. If because of the circumstances we cannot make the shift in the approach, using the methods stubbornly makes little to no sense. I start with the easy ones, see if I can ruin it all for you.. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;(1) If the deadlines and the scope is fixed, moreover you need to deliver certain results (documentation, software, test results, etc) at certain times, you are following a plan, instead of responding to change.&lt;br /&gt;&lt;br /&gt;(2) If you need to provide detailed req.spec, estimations, design documents, etc, then obviously working software is only of second priority, since the signing and the delivery of the contract relies heavily on these documents, rather than on working software itself.&lt;br /&gt;&lt;br /&gt;(3) If you have to have the req.spec and the corresponding estimations upfront, you and your client - forced by contract - are bound to them(i.e. requirements and more or less estimations too). And then with even the best intentions you can get your client involved in the preliminary discussion only which are theoretic almost by definition.&lt;br /&gt;&lt;br /&gt;(4)I left the toughest one for last. &lt;br /&gt;The sobering truth is that - and a sick plot twist is around the corner, you better watch out - in such a hostile, anti-agile environment, as the above depicted one - applying agile tools and processes, in fact might be the wrong choice, and for the wrong reasons too. Because this in itself goes against agile principles in that it chooses processes and tools over people, who can't enjoy the benefits of agile methods, nonetheless have to invest the extra effort they demand. And almost all of it is completely in vain, as the software won't be any more of value than it would have been with traditional methods, because it will turn out to be exactly the thing that was required/designed/estimated/agreed-upon &lt;b&gt;before&lt;/b&gt; any line of code had been written and/or tested.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-977904760818345199?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/977904760818345199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=977904760818345199&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/977904760818345199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/977904760818345199'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/06/agile-in-hostile-environment.html' title='Agile in hostile environment'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-6520454721850504047</id><published>2010-04-08T01:42:00.000-07:00</published><updated>2010-04-08T02:45:49.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quality'/><category scheme='http://www.blogger.com/atom/ns#' term='customer'/><category scheme='http://www.blogger.com/atom/ns#' term='functionality'/><category scheme='http://www.blogger.com/atom/ns#' term='demarco'/><title type='text'>Cont.'d  - Quality: another agile buzzword?</title><content type='html'>In my previous post on &lt;a href="http://agilebase.blogspot.com/2010/04/quality-just-agile-buzzword.html"&gt;software quality&lt;/a&gt;, I talked about how quality has an indirect, nevertheless beneficial effect on costs and time.&lt;br /&gt;Now I want to continue with the next most important factor of a project, that is the most important from the customer's perspective. &lt;br /&gt;(Functionality) How improved quality helps to deliver better functionality? &lt;span class="fullpost"&gt; Interestingly enough, asking that question is already the first part of answering it. Really, there is no magic answer here: it's plain to see, that once you concentrate on quality from day one you will deliver better functionality. Your testers can focus on usabilty instead of checking and tracking trivial bugs and scenarios. Instead of the i-click-here-and-it-crahses type of bugs, you will get more of the it's difficult-to-find-that-menu-item or this-messagebox-makes-no-sense kind of bugs. Your customer also can effectively participate in the developing process, once he's not stuck trying to only install and start your program. In short it's similar to the &lt;a href="http://agilebase.blogspot.com/2010/03/maslow-for-programmers.html"&gt;Maslow for Programmers&lt;/a&gt;, but on the project's scale. If customers, product managers, developers and testers don't have to spend precious time on finding, documenting and fixing trivial bugs, they all of a sudden have time for something else, and unless they hooked up on porn beyond the avarage amount they can spend it on creating software of real value.&lt;br /&gt; &lt;br /&gt;(Developer Team)And last but not least, I'd like to mention DeMarco's take on quality. He advocates that quality is more important for the dev team, than anyone else involved in the project. It's for the programmers' self-esteem. If you deliver quality software as a rule, you can be proud of every day's work. If you are proud, you can and want to take credit, if you take credit, you will be even more motivated to deliver quality. It's a &lt;a href="http://en.wikipedia.org/wiki/Feedback"&gt;positive feedback loop&lt;/a&gt;, but according to Wikipedia, it's not a bad thing:&lt;br /&gt;"Positive feedback amplifies possibilities of divergences; it is the condition to change, evolution, growth; it gives the system the ability to access new points of equilibrium." It also helps team culture, and creates an atmosphere where the &lt;a href="http://agilebase.blogspot.com/2010/01/improvement.html"&gt;constant urge to improve &lt;/a&gt;is a common and selfexplaining thing.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-6520454721850504047?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/6520454721850504047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=6520454721850504047&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6520454721850504047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6520454721850504047'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/04/contd-quality-another-agile-buzzword.html' title='Cont.&apos;d  - Quality: another agile buzzword?'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-1833043958142783372</id><published>2010-04-04T05:06:00.000-07:00</published><updated>2010-04-04T12:08:44.157-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quality'/><category scheme='http://www.blogger.com/atom/ns#' term='demarco'/><category scheme='http://www.blogger.com/atom/ns#' term='sales'/><title type='text'>Quality: another agile buzzword?</title><content type='html'>Agile literature is full of explanations and techniques as of how to improve software quality. There is lot less talk about why quality is important in the first place. Even K. Beck goes only so far that quality improves trust, and that with trust everything is more simple. &lt;br /&gt;I think an important issue is rarely or never addressed. The fact that users and customers don't seem to care about quality all that much. &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;As DeMarco puts it, if you present to your client that the software right now has a &lt;a href="http://en.wikipedia.org/wiki/Mean_Time_Between_Failures"&gt;Mean Time Between Failures&lt;/a&gt; of 1.2 hours, and with three extra weeks of work you could reach an MTBF as high as 2000 hours, then after some hemming and hawing "the users will explain that they are as quality-conscious as the next fellow, but three weeks is real money." [1] &lt;br /&gt;This is another classic example of why software industry has way less in common with more traditional industries(cars, architecture, etc) than we've been told. What is quality in other areas, if not the longevity of things? One considers a car or a watch of good quality if it lasts long without the need of repair. Well, in that sense software is always perfect, you can use it as much as you want its parts won't break or fray. Of course there is a minimum quality required, but only to the extent that poor quality doesn't render the software utterly useless, and anything above that is a bonus, that clients aren't willing to pay for.&lt;br /&gt;&lt;br /&gt;So why are agile teams so hung up on quality then? - Well, you should ask them, but my guess is that they don't know. [if you are in agile development take a minute here and try to answer that]&lt;br /&gt;&lt;br /&gt;I get back to that in a minute, but first I'd like to point out, that when selling your agile methodolgy to your clients, quality shouldn't be high on your list of arguments, or not at all. Quality 'per se' has little to no value to your clients. What you should try instead is to explain to them, how quality will be beneficial for the factors that they do care about, i.e. costs and time and functionality. &lt;br /&gt;(Costs and time) The cost of a software in general is made up of two - not all that independent - parts: development and maintenance. It is easy to see that improved quality brings the cost of maintenance to a minimum. But what's often overlooked, that quality doesn't increase the cost of development in turn. In fact, many times it lowers that too. How is this possible? You just need to recall all the times when you were happily coding away and away, until all of sudden you hit a wall, a wall made of all sorts of different "materials": badly designed, badly laid out code; bugs hiding other bugs that have been lurking around for months only to surface at the worst time possible; performance issues that can only be resolved by completely restructuring your code which - now that you think about it - doesn't really have a structure; endless email/bugtracking ping-pong, between you and the test department; so on and so forth. That is the moment, when development cost and time estimates go out the window, and unfortunately this moment comes almost always nearing the end of the project when it is no more possible to rethink scope, deadline or effort. &lt;br /&gt;I'm not saying that quality is a silver bullet, and that you will never hit a wall with agile, but I can say with confidence, that &lt;br /&gt;a) chances of hitting a wall are much lower&lt;br /&gt;b) even when you hit a wall, it's less dense (is made up of fewer things)&lt;br /&gt;c) and the end of the project is typically not near at all&lt;br /&gt;I'm saying that if you constantly strive for quality the inevitable walls of software development will become more like bumps. And that's your selling argument right there.&lt;br /&gt;&lt;br /&gt;[Next time I'll talk about the third factor (functionality), as well as why quality is important for the developer team.]&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.amazon.de/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439/ref=sr_1_1?ie=UTF8&amp;s=books-intl-de&amp;qid=1270383183&amp;sr=8-1"&gt;DeMarco - Lister: Peopleware&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-1833043958142783372?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/1833043958142783372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=1833043958142783372&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/1833043958142783372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/1833043958142783372'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/04/quality-just-agile-buzzword.html' title='Quality: another agile buzzword?'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-460364376981969207</id><published>2010-03-12T08:33:00.000-08:00</published><updated>2010-03-12T12:50:32.148-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maslow'/><category scheme='http://www.blogger.com/atom/ns#' term='improve'/><title type='text'>Maslow for Programmers</title><content type='html'>What would the &lt;a href="http://en.wikipedia.org/wiki/Maslow's_hierarchy_of_needs"&gt;Maslow-pyramid&lt;/a&gt; look like if we applied it to programmers? &lt;br /&gt;&lt;em&gt;(Physiological Need)&lt;/em&gt; The starting layer is the fundamental knowledge to implement something in a given environment with given tools. This doesn't need further explanation, without this the rest has no meaning.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Safety)&lt;/em&gt; The basic security of your program; that is a relatively bug-free level, where you can think of, and prepare your software for many of the exceptional situations that could arise.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Love, Belonging)&lt;/em&gt; The awareness of the user and the explicit intention of creating software that has value for its users. This level also includes the intention of writing code that others can understand, designing software with aproved and well-spread concepts in mind, following industry standards and guidelines. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Esteem)&lt;/em&gt; When you don't only care about clean code and design, but also about the process by which you achieve those things. Reflection is a great part of this. Through honest and regular reflection you regularly arrive to the conclusion that you need to learn more, and so you do just that. Without continuous improvement, you can't reach the fifth level&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Self-actualization)&lt;/em&gt; Where you can make your own contributions to the software world let they be books, theories or techniques. They could also be development tools, SDK's that aid others' work or have beneficial influence on the way others implement things. &lt;br /&gt;&lt;br /&gt;Are you still with me? If you are, you could say, "It's all very nice, but is there a point to all this?" There might.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;You have to know your tools and the programming language you use before you can look any further.&lt;/em&gt; This sounds trivial, but it's actually quite difficult to achieve. The problem is that many of today's development tools are so sophisticated, sport so many features, offer so many options and solutions in syntax and in libraries, that you just can't learn it from a book. You have to work on many projects, preferably in different problem domains, so that you can come across all particular features of your tool that solve your particular problems perfectly. This takes time, and luck is also a factor here. The good news is that once you have acquired that knowledge, it's only up to you to move up in the pyramid:&lt;br /&gt;&lt;br /&gt;* You can start to think about the value of the software you develop. &lt;br /&gt;* You can start looking up literature on how to design, create and test software. It's all out there. &lt;br /&gt;* You can start reflecting on yourself(on your team), you can start improving your process, you can strive to become better at what you do. &lt;br /&gt;&lt;br /&gt;Okay, the top level may be out of reach for most us. Not everyone can think as originally as Kent Beck, or write  about software as systematically and meticuluosly as Frederick Brooks. But who knows? Maybe, one day &lt;em&gt;you&lt;/em&gt; will write the next, all new version of Rhino.Mocks for all the .Net-developers to awe. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-460364376981969207?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/460364376981969207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=460364376981969207&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/460364376981969207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/460364376981969207'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/03/maslow-for-programmers.html' title='Maslow for Programmers'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-2297596501410017302</id><published>2010-03-03T12:40:00.000-08:00</published><updated>2010-03-03T13:56:18.600-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assert'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='kent beck'/><title type='text'>Assert First Development</title><content type='html'>A good programmer writes about 10 lines of code a day. Maybe less maybe more, though it's a very interresting topic leading to names like Barry Boehm and Tom DeMarco, it's not the subject of this post. I just wanted to point out that eventhough undoubtedly useful, IntelliSense, or any autocompletion tool for that matter, is way overrated. A programmer might type in that single line of code of the hour in five minutes, or in eight without IntelliSense. I'm glad we've got that out of the way. Next, if you are a TDDer and don't already use the &lt;a href="http://c2.com/cgi/wiki?ArrangeActAssert"&gt;Arrange/Act/Assert &lt;/a&gt;concept, start today and you will never look back. Anyways. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;"Assert First Development"[1] is about writing the assert of your test first. This gives you the means to write the act-part in a way your assert needs it, and then the arrange-part as your act and assert needs it. This way you have to think about only one thing at a time. If you do it the other way around - that is from arrange to assert - you always have to think about all three parts simultaneously. You could of course say "I'm very smart and I can think about many things at once", and I believe you can, but you could use all your cleverness to solve one problem at a time, potentially solving things even better. If not, you still haven't lost anything, you just did your job sequentially. But chances are that your assert will be right the first time around, not mentioning your arrange in which you set really only those things up your act needs, and not the things you &lt;em&gt;think&lt;/em&gt; your act will need. Only thing you lose is some parts of your IntelliSense, but we already established that it's really not that much of a loss.&lt;br /&gt;One last thought. Assert First Development is another great example of the pull-system: there is never waste produced, we don't setup mocks or fakes or anything we might not need eventually. &lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;[1] &lt;a href="http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530"&gt;Kent Beck: Test Driven Development: By Example&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-2297596501410017302?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/2297596501410017302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=2297596501410017302&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2297596501410017302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2297596501410017302'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/03/assert-first-development.html' title='Assert First Development'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-6772134995289220632</id><published>2010-01-25T11:06:00.000-08:00</published><updated>2010-01-28T13:17:46.104-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='honesty'/><category scheme='http://www.blogger.com/atom/ns#' term='kent beck'/><category scheme='http://www.blogger.com/atom/ns#' term='improve'/><title type='text'>Problems With And Without Honesty</title><content type='html'>&lt;em&gt;Without&lt;/em&gt; honesty there are a tons of problems. It's easy to see why Beck (not again?!) advocates openness and transparency in software development: in short, if we talk about issues honestly we stand a much better cance to resolve them. It's easy to see, but very difficult to realise. &lt;br /&gt;Difficult because of the only problem &lt;em&gt;with&lt;/em&gt; honesty: our self-esteem. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;More specifically the From and the To part of honesty. The difficulty with the From part is manners and custom. We have a hard time telling our colleague he screwed up badly or has not the first clue what he's talking about, because that's what we are all used to: the not-telling. And because we could be and many times have been at the To-end of honesty and we know first hand how it feels when our mistakes are pointed out. From or To: our self-esteem gets in the way.&lt;br /&gt;In retrospectives mature teams have the strength to be honest about mistakes, as I &lt;a href="http://agilebase.blogspot.com/2009/11/true-weight-of-iteration-board.html"&gt;mentioned before&lt;/a&gt;. But it's a lot easier to tell honestly and to be told honestly about problems, when you are team. This is not to underestimate the power of collective responsibility, actually this is to encourage teams to try. You will be susprised how much more honesty you can handle as a team. &lt;br /&gt;However. A team's straightforwardness is not invincible either. At the end of the day the team is made up of individuals, and their willingness and inclanation for honesty ultimately will draw the limits of the team's honesty. Team-members will have to intentionally put aside their self-esteem and pride so that the team can go the distance with honesty, can find real issues, real solutions and once again the team can improve.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-6772134995289220632?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/6772134995289220632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=6772134995289220632&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6772134995289220632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6772134995289220632'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/01/problems-with-and-without-honesty.html' title='Problems With And Without Honesty'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-5448940792570905948</id><published>2010-01-23T04:18:00.000-08:00</published><updated>2010-01-23T04:32:09.419-08:00</updated><title type='text'>Your Choice</title><content type='html'>Here's the deal. The last post wasn't much of anything. I know. The reason was that there are a couple of things I want to write about, but couldn't decide which one to pick, so I wrote about something I didn't really want to. Anyways, now is your chance to decide what the next post should be about. Vote on the right, comment below, if and when.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-5448940792570905948?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/5448940792570905948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=5448940792570905948&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/5448940792570905948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/5448940792570905948'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/01/your-choice.html' title='Your Choice'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-8042033612667715857</id><published>2010-01-19T11:31:00.000-08:00</published><updated>2010-01-19T14:14:29.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='kent beck'/><category scheme='http://www.blogger.com/atom/ns#' term='improve'/><title type='text'>"Perfect is a verb, not an adjective" [1]</title><content type='html'>Learning new stuff is paramount in our line of work. I know, I know Cobol coders might tell you otherwise, and yeah, cobol coders might be home free, but the rest of us mortals need to keep up with the pace technology dictates. Or at least not to fall behind irreversibly much. Because then you might become the subject of Murphy's law, saying "If a hammer is all you have, everything you see will appear to look like a nail". It seems trivial, yet many software companies' don't seem to be sporting any learning or improving. Employers and employees alike seem to be confident in and/or content with their current experience and skills. Obviously it's extra effort short term to spend time and energy to learn new things, but with newer and better tools and techniques you can deliver better sotfware in shorter time. In fact the benefits and the profit are so plain to see, that it doesn't need any further explanation or examples, but then again this post would be ridiculously short. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Once you start looking up new stuff, or rather - because it might be something old - stuff you don't know, it becomes second nature, and you don't even notice all the advantages it gives you, or the way programming becomes easier with recently acquired knowledge. So it's difficult to pick any one example from our past year but I settled for mocking frameworks. &lt;br /&gt;When we got to know &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt; we dived into writing lots and lots of incomprehensible unit and functional tests nobody understood or was able to maintain. Then we stumbled upon mocking frameworks, and how we could live without one, beats the hell out of me now. We started to use &lt;a href="http://www.ayende.com/projects/rhino-mocks.aspx"&gt;Rhino Mocks&lt;/a&gt;, but soon enough our unit tests once again started to look like a can of worms, so this time intentionally searching for a cure, we found out about the AAA-concept (it's short for arrange/act/assert, but I can't find the exact link anymore; go google it up!). Finally we learned that we can use the lambda-expression to make our code even cleaner and readable. We learned and learned till unit testing and object mocking is less and less of a technical problem, and we can concentrate more on what we are trying to express and accomplish with our tests.&lt;br /&gt;Again this example it's not even about new stuff, it's just stuff we hadn't known before. Keep learning and remember there are other useful tools than just the hammer.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;[1] Kent Beck:&lt;a href="http://www.informit.com/store/product.aspx?isbn=0321278658"&gt; Extreme Programming Explained 2nd Edition&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-8042033612667715857?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/8042033612667715857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=8042033612667715857&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/8042033612667715857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/8042033612667715857'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2010/01/improvement.html' title='&quot;Perfect is a verb, not an adjective&quot; [1]'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-1636988864519322822</id><published>2009-12-29T10:27:00.000-08:00</published><updated>2010-01-08T13:25:11.077-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='waterfall'/><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Transformers</title><content type='html'>Much of the agile literaure is focused on how difficult the transition from traditional to agile could be. They address the problem from many angles describing techniques how to help programmers to make peace with pair programming, how to get better at incremental design, some even suggest to use Organizational Patterns to introduce some of the practices to a team or a company. They all seem to be empathic with people who as a rule fear and loath change.&lt;br /&gt;I don't see it that way. I actually think being a true "waterfall guy" helps you to accept agile, and helps you to execute XP practices and to a better outcome too(from this point on I'll be referring to XP, but probably most of what I have to say applies to other agile methodologies as well) &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Having had been a true waterfall guy myself, with my precious UML diagrams, my very own modules and an ever strengthening habit of working alone on a laptop in pubs and cafes only occasionally checking in my work for my team to see, I had no problem at all transitioning to XP -- quite the contrary.&lt;br /&gt;I enjoyed Pair Programming from Day 1, because I realised how much easier it is to pick one from the many possible ways to solve a problem, if you have someone competent to discuss it with. I learned not to fear to be stuck anymore, simply because it happens almost never, and even if it does, it's far less frustrating when you have someone next to you to share the pain. Becuse of all the implicit and explicit problems I had with the tradtional way, I appreciated Pair Programming a lot more then I would have otherwise.&lt;br /&gt;To be able to do Incremental Design it's good to have had done a few &lt;a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front"&gt;BDUF&lt;/a&gt; yourself. It helps you to see the big picture - which some false interpretation of incremental desgin denies to be allowed - and it helps you to come up with sophisticated solutions quickly. But most importantly once you have seen first hand what's wrong with BDUF, you are ready to like Incremental Design for all of its benefits.&lt;br /&gt;TDD is again something you appriciate more coming from a Waterfall world, because then you know how fustrating the bugfixing phase normally is, fixing and refixing bugs for months. You also know how frustraing and shameful it is not to make changes to code you hate and not to refactor at all due to either fear of breaking something, or an explicit order from your bosses, with something about changes are risky at this stage of the project, but the right stage for a change never seems to come. In which BTW they are absolutely right: without an extensive test harness, you can never be sure, even a little, that the changes you're about to make won't break the whole system.&lt;br /&gt;All in all, the skills you learned and the bad experiences you had with waterfall all will make you a better agile developer.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-1636988864519322822?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/1636988864519322822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=1636988864519322822&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/1636988864519322822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/1636988864519322822'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/12/transformers.html' title='Transformers'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-2534850817344904760</id><published>2009-12-22T05:27:00.000-08:00</published><updated>2010-01-08T13:32:46.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trust'/><category scheme='http://www.blogger.com/atom/ns#' term='respect'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='kent beck'/><title type='text'>Oil And Water, Or Are They?</title><content type='html'>Tester and developer couldn't be further apart, both of them fighting all the time without knowing any better. As one of our former tester put it, we have different goals: developers want the software to work, testers want it to break. For a long and regrettable time we shared this belief. But then we thought with agile it is over: bringing the tester closer to the team, both locationally and spiritually, would bring everyone to the same goal, i.e. to create quality software. It didn't work out as expected. Maybe the shared goal still wasn't shared enough, but I think we were missing a more important ingredient.&lt;br /&gt;Fortunately we had learned our lesson, and with our new tester we tried harder. Once again Kent Beck helped us to find the missing pieces: Respect and Trust. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Though in his &lt;a href="http://itc.conversationsnetwork.org/shows/detail301.html"&gt;lecture&lt;/a&gt; he talks specifically about how trusty realtionship between developers and clients can help both parties to concentrate on creating values, I watched the inner workings of respect and trust in a tester-developer relationship.&lt;br /&gt;In a timespan of a couple of 2-week iterations, our tester became a full-member of our team, thank to trust and respect. Quite rapidly we have arrived to the point where she trusts the developers enough to dare to ask them about the observed and expected behaviour of the system. She knows now she can be sure that a bug-candidate won't be dismissed due to programmers' arrogance or ego. She also knows she can freely ask all sorts of questions and won't be shushed or ignored or made fun of. &lt;br /&gt;On the other hand we developers learned to respect her and her view on our software, and we learned not to discount whatever she has to say based solely on the fact that she didn't write the code, and in fact wouldn't even know how to. &lt;br /&gt;Few minor, though important things at last. This productive relationship couldn't spring to life without our seriousness toward bugs: in an attempt to avoid the mini-waterfall effect we try to act quickly upon new bugs, this is not only practical from the technical point of view but also expresses respect, and thus strengthen trust. Unit and functional tests makes it possible that very few already working features break due to a fix of a new bug, again strengthening trust. Finally, our relatively fast build closes a very short feedback-loop of finding, fixing and retesting a bug creating a productive and positive atmosphere.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-2534850817344904760?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/2534850817344904760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=2534850817344904760&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2534850817344904760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/2534850817344904760'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/12/oil-and-water-or-are-they.html' title='Oil And Water, Or Are They?'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-4556382704393733032</id><published>2009-11-23T13:09:00.000-08:00</published><updated>2010-01-08T13:33:39.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='psychology'/><category scheme='http://www.blogger.com/atom/ns#' term='iteration board'/><category scheme='http://www.blogger.com/atom/ns#' term='kent beck'/><title type='text'>The True Weight Of An Iteration Board</title><content type='html'>An iteration board carries lot more than its actual weight. It is there every day to remind you of all your mistakes and weaknesses. Sure, many people envy us for our friendly atmosphere and the unusually humane working environment we work in. What most people fail to see is our constant struggle to do our best. They don't see the cruel honesty that forces us to face our shortcomings day after day. There has not been an iteration, however successful, going by at the end of which we didn't identify issues in our process, approach or skills that we needed to resolve. &lt;br /&gt;This honesty could be a real burden,&lt;span class="fullpost"&gt; especially for one with a programmer's ego, if you don't reach out to Kent's Principle of Opportunity, that states that we need to look at problems as opportunities. In this case as opportunities to improve.&lt;br /&gt;Also don't forget, the problem is not the iteration board and its bug-cards for instance. Iteration boards and burndown-charts can solely be indicators of something going wrong, they are not the problem, nor the cause. So next time when you look at  a burn-down chart that is not steap enough, or an iteration board that is not "green" enough, don't rush to find solutions to make it steaper, or don't try to organize your work, so that you can score more green points. Try to find the underlying problems, the more the merrier, forget your ego, and think of all the improvements you now have the opportunity to make.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-4556382704393733032?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/4556382704393733032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=4556382704393733032&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/4556382704393733032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/4556382704393733032'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/11/true-weight-of-iteration-board.html' title='The True Weight Of An Iteration Board'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-9044654463331978484</id><published>2009-11-07T13:11:00.000-08:00</published><updated>2010-01-08T13:36:18.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pair programming'/><category scheme='http://www.blogger.com/atom/ns#' term='navigator'/><title type='text'>The Navigator</title><content type='html'>Pair programming is one of the key practices of XP, and so there is a lot to know and learn about it(which you can start by reading &lt;a href="http://www.amazon.com/Pair-Programming-Illuminated-Laurie-Williams/dp/0201745763/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1257634988&amp;sr=8-1"&gt;Pair Programming Illuminated&lt;/a&gt; by Laurie Williams, Robert Kessler). Let's focus on the navigator for now.&lt;br /&gt;The navigator's role in my view is to look ahead: while the driver is to keep us on the road without any accidents, the navigator is to know where we're going and why, also what we're gonna do when we get there.&lt;br /&gt;I figured that the best way I can accomplish this as a navigator is if I sit back and don't even watch what my driver is typing. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Don't get me wrong, it's not without merit when the navigator and driver don't talk much, just simply understand each other through bits of code and a few words, though this benefits the team more on the personal and social levels, helps to build mutual respect, team spirit and so on. &lt;br /&gt;But the navigator's sort of turning away from the screen makes it imperative for him and the driver to start &lt;em&gt;talking &lt;/em&gt;about the problems and solutions. A lot of good things can come out of saying something out loud. For instance you can realise you can't say it: it's too blurry to be said, and then chances are that your solution or your model of the problem is way too complicated. Other times when you try to explain your implementation out loud, you realise that it's just simply wrong. &lt;br /&gt;In our praticular office layout there is another, quite relevant side effect of my turning somewhat away from the monitor: I get to see other parts of the room: the iteration board, the release board, the burn-down chart, our product manager, our tester, our build machine - all of which remind me to look at the problem at hand from many, different perspectives: all of which I might have forgotten about, had I watched my driver and his code unneccessarily closely... &lt;br /&gt;&lt;br /&gt;So you can try it next time when you're the navigator and let me know how it turned out...&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-9044654463331978484?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/9044654463331978484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=9044654463331978484&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/9044654463331978484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/9044654463331978484'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/11/navigator.html' title='The Navigator'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-5397966970711413320</id><published>2009-10-23T05:06:00.000-07:00</published><updated>2010-01-08T13:46:44.231-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='solid'/><title type='text'>Case closed</title><content type='html'>Many heated arguments about Test-Driven Development have certain recurring reasoning on both sides. In general, developers have a hard time accepting that they need to think differently about implementation and design and/or have to alter exisitng design in order to be able to write tests. "I would need to introduce this indirection only for testing" or "There is no need for this kind of hierarchy to implement the features in the production system", and their alikes are common critiques of TDD. &lt;br /&gt;Inexperienced TDD people almost invariably try to tackle these with answers like "But your design will be better this way" or "Modularity is your friend" or "Indirection is a way to build flexibilty into your code". &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Obviously all of these are correct and nothing new. &lt;a href="http://www.davesquared.net/2009/01/introduction-to-solid-principles-of-oo.html"&gt;SOLID&lt;/a&gt; for example is a well-known and universal set of principles supporting the answers above. However most of the defenders of TDD are missing the point. &lt;br /&gt;The point is this:&lt;br /&gt;Once we've agreed that unit testing is a very efficient way to create quality software and we want to do it, there is no room for further discussion. You just have to think about the testability of your code as any other requirement you have to implement. Don't worry, you will get all the earlier mentioned: flexibility, maintainability, comprehensibility, and so on. But that shouldn't have influence on this praticular matter, because you are required to write testable code anyway. There is really nothing else to it. &lt;br /&gt;Once you can get your head around this, your life as an agile programmer will be much, much easier. Mine already is.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-5397966970711413320?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/5397966970711413320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=5397966970711413320&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/5397966970711413320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/5397966970711413320'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/10/case-closed.html' title='Case closed'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7318198126063885762.post-6285031690326388273</id><published>2009-10-17T12:55:00.000-07:00</published><updated>2010-01-08T13:41:23.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='traps'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Traps Pt.1.: Rope-A-Dope</title><content type='html'>Many times in software development you have a simple problem, which has an easy solution. Or so it seems. You start solving the problem, but it turns out first you have to solve a different problem. Not a difficult one either, so you start working on it, but it's not long before you realise that before you could solve the second one you have to start with a third, all new problem. Again, not a very complicated one. Before you know it it's six o'clock in the evening, and you'd forgot all about the original problem, let alone solving it. Let's call it the Rope-A-Dope Trap. It's difficult exactly becuse it seems easy all the way. Every time just one small step away. There was just no point where you could have said no. &lt;br /&gt;A possible escape from this trap is applying the Rule Of Three(or Two). &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;There are always obsticles creeping in when solving software problems, it's inevitable. But whenever you find yourself face to face with the third "creeper" in a row, you need to abort what you're doing, take a step back, a deep breath and a very good look at your original problem in light of the three unforseen ones. Rethink, regroup and start over. Starting over could mean a different approach, design, tool or even different requirements.&lt;br /&gt;So watch out next time for a Rope-A-Dope. And don't forget that it could occur on many levels too. A method, a feature or a whole solution.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7318198126063885762-6285031690326388273?l=agilebase.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agilebase.blogspot.com/feeds/6285031690326388273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7318198126063885762&amp;postID=6285031690326388273&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6285031690326388273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7318198126063885762/posts/default/6285031690326388273'/><link rel='alternate' type='text/html' href='http://agilebase.blogspot.com/2009/10/traps-pt1-rope-dope.html' title='Traps Pt.1.: Rope-A-Dope'/><author><name>srac</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
