smart stuff http://www.approximity.com/cgi-bin/blogtariAgile/index.rb Approximity: smart stuff en-us Approximity smart stuff http://www.approximity.com/ http://www.approximity.com/public/images/apxBlue_s.png Adobe Flex developer wanted - remote or onsite http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/FlexDevWanted.rdoc Either as free lancer or permanently employed we need a Flex guru or an advanced Flex developer that likes challenges. <p> We have several projects in New York and Munich. </p> <p> A small international team in an agile setting is waiting for you developing applications that scale to millions of users. </p> <p> As usual, we care about experience, communication skills and simply the desire to excel and not page-long CVs. </p> <p> If interested, please email me at armin at personifi dot com. Please no Word docs, only .txt or pdf or put it all in a simple email. </p> <p> Next time we ask for some GNU Flex developers .. :-) </p> <p> <img src="http://www.approximity.com/~armin/BeerHelpsForRubyWorldDomination.jpg"> </p> XP: Real-world experiment with Hours instead of points http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/XP_Real_Hours.rdoc Manuel Klimek posted his insights to the XP-list. <pre> Hi, we're currently implementing some the XP concepts when we can see the reason for using a concept. Mostly this is due to some problems we identify. I'm not a consultant, but integrated into a development team, perhaps that allows me to see things from a different perspective. I found that people dislike &quot;guessing&quot; effort in time, because they feel bad if estimated ideal time is small compared to actual time. This can lead to the following problems: - overcommitment (but this time I'll do it in 2 days! really!) - undercommitment (if I guess a lot too much, I feel better if I'm wrong) - artificial pressure (I guessed 2 days, so I need to do it in 2 days, let's not do refactoring now) - demotivation (being wrong makes me feel bad) - problems with communication to product management (&quot;but you said you'll do it in 2 days, now it took already 5!&quot; - &quot;but I said it's ideal time!&quot; - &quot;than tell us the actual time it will take the next time!&quot; - &quot;but I can't do that&quot; etc) Using points solved this. Perhaps explaining to the developers that they have to accept that ideal time has nothing to do with actual time and that they should not worry too much about correctness of single guesses and explaining to product management that there are different time estimations (some in ideal time and some in actual time) would have solved the issue, too, but simply using points is clearer, since you make the distinction explicit if you communicate about effort. If I tell to product management that this item has size 3 and they ask me how long it'll take, then I tell them that if they include it in the current iteration they'll have it at the time the current iteration finishes. All this is less communication effort for me and thus increases ROI because I can work on code instead of nitpicking on the concept of time :-) Cheers, Manuel </pre> <p> <img src="http://www.approximity.com/~armin/blogPics/img043_small.jpg"> </p> <p> Skiing in Garmisch :-). </p> On indispensable persons in a team http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/indispensablePerson.rdoc John Carter posted this to the pragprog-ML. <pre> &gt;&gt; What happens when John leaves the company, and he's trained everyone &gt;&gt; to, whenever a certain class of error happens, go to him without &gt;&gt; learning anything about the problem first? That does concern me... It makes economic sense to me the rule &quot;If a person is indispensable to your company, fire him now, since it will cost you more when you do eventually loose him.&quot; Thus I have several counters to the Truck Factor... 1) Unit Test / TDD === executable documentation. 2) Good rdocs that I periodically refresh. 3) Get others to code review my changes. 4) Go on holiday. The &quot;It's Johns fault&quot; message tells them immediately they had better start reading code if they want it fixed before I get back... </pre> Scripting vs GUIs http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/ScriptingVsGUIs.rdoc Nice post from Paul W. homer in the pragprog-ML. <pre> &gt; You don't have to be stupid to avoid work. I'm no dope, but I avoid any &gt; &gt; work I can avoid. If your co-worker sees the change a fully-automated &gt; &gt; build as extra work, and he doesn't want to do extra work, then you &gt; &gt; could try showing him why the fully-automated build will make for less &gt; &gt; work. If he can't see it, he can't see it. Don't smack your head against &gt; &gt; the wall; it just hurts. </pre> <p> It could be a &quot;cultural&quot; thing. The Unix philosophy was that if you were going to do something more than a couple of times, you should write a script to automate it. For PCs, it was that if you were going to do something a bunch of times, you should get some fancy GUI with a ton of buttons and then memorize all of the icon functions and key sequences. Pressing 5 or 10 buttons in a row is not seen as being too onerous. </p> <p> Having been on both sides, automating it is always more consistent, faster in the long run, and helps to document the steps. Long sequences of button pressing are prone to human-memory glitches, making it a source of frequently errors. GUIs are good for rarely used and exploratory tasks, but not for frequently used or critical work. Unfortunately the PC development culture leans heavily on button bashing, IDEs and pretty GUIs (even for things like diff). It is something that I&#8217;ve always seen as a de-evolution in software development, but I realize with many developers it is a religious argument. </p> <p> Paul. </p> <p> <img src="http://www.approximity.com/~armin/blogPics/100_500_small.jpg"> </p> Dragons of Design http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/DragonsOfDesign.rdoc David Buck compares software subsystems with <a href="http://www.simberon.com/dragons.htm">dragons</a>. <p> In the end, it&#8217;s better to avoid creating stubborn dragons in the first place and to slay them early if they start to turn bad. Young dragons are easier to slay than old ones. You may even slay several dragons before you are happy that you have one you can live with. </p> <p> <img src="http://farm1.static.flickr.com/1/126240223_221808388d.jpg"> </p> <p> Image <a href="http://www.flickr.com/photos/60225544@N00/126240223/">source</a> </p> Beating a dead horse http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/DeadHorse.rdoc Victor posted this to the XP-list <p> Dakota tribal wisdom says that when you discover you are riding a dead horse, the best strategy is to dismount. However, in business we often try other strategies with dead horses, including the following: </p> <ul> <li>Buying a stronger whip. </li> <li>Changing riders. </li> <li>Say things like, &quot;This is the way we have always ridden this horse.&quot; </li> <li>Appointing a committee to study the horse. </li> <li>Arranging to visit other sites to see how they ride dead horses. </li> <li>Increasing the standards to ride dead horses. </li> <li>Appointing a tiger team to revive the dead horse. </li> <li>Creating a training session to increase our riding ability. </li> <li>Comparing the state of dead horses in todays environment. </li> <li>Change the requirements declaring that &quot;This horse is not dead.&quot; </li> <li>Hire contractors to ride the dead horse. </li> <li>Harnessing several dead horses together for increased speed. </li> <li>Declaring that &quot;No horse is too dead to beat.&quot; </li> <li>Providing additional funding to increase the horse&#8217;s performance. </li> <li>Do a Cost Analysis study to see if contractors can ride it cheaper. </li> <li>Purchase a product to make dead horses run faster. </li> <li>Declare the horse is &quot;better, faster and cheaper&quot; dead. </li> <li>Form a quality circle to find uses for dead horses. </li> <li>Revisit the performance requirements for horses. </li> <li>Say this horse was procured with cost as an independent variable. </li> <li>Promote the dead horse to a supervisory position. </li> </ul> <p> Nice thread int he <a href="http://tech.groups.yahoo.com/group/extremeprogramming/messages/124996?threaded=1&m=e&var=1&tidx=1">extremeprogramming-ML</a> </p> Cycles of Observers http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/CyclesOfObservers.rdoc Good post by John Carter to the pragprog@yahoogroups.com <pre> Let me relate a few war stories... Once I had a very very complex problem to solve. I had not the foggiest notion in which order to compute what. So I took the cowards way and hooked in the Observer all over the place so I didn't have to think in what order to do it. It was very slow and buggy and I was no closer to understanding in the problem than before. It did work occasionally though. I put in enough logging to see what order it did things in (when it worked). After glaring at that for an hour I saw the pattern, recoded it as a couple of tight while loops. Result... Very fast, very understandable, easily maintained, no bugs and no observers. Story two... Once I took over the maintenance of some code that had several observer pattern instances scattered around it. It was fragile, buggy, and erratic. After much loss of hair and many hours of poring over log traces I figured it out. There were complex loop paths through several observers. No mere mortal could really understand what would happen if object X updated, since the possible impacts and possible variants of paths were almost limitless and depended crucially on the order of registration of observers. After a brief killing spree amongst the instances of the observer pattern the code was still buggy, but at least no longer fragile and erratic... </pre> Small Teams Make Better Software http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/SmallTeamsBetterSoftware.rdoc I saw that a small team of good people seemed to outperform the most disciplined process, toolset, or philosophy. A bad team usually failed to produce a good result, regardless of what magic process was applied. <a href="http://www.extremeplanner.com/blog/2006/08/small-teams-make-better-software.html">Article</a> Twelve Benefits of Writing Unit Tests First http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/12Benefits.rdoc <a href="http://www.jtse.com/blog/2006/07/11/twelve-benefits-of-writing-unit-tests-first">www.jtse.com/blog/2006/07/11/twelve-benefits-of-writing-unit-tests-first</a>? Refactoring Demo Screencast http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/refactoringDemo.rdoc Four different ways of performing the refactoring &quot;Extract Method&quot;. <p> <a href="http://xp123.com/xplor/xp0605/index.shtml">xp123.com/xplor/xp0605/index.shtml</a> </p> A thousand cleaners in one tiny room http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/cleaners.rdoc Ron Jeffries answered in the XP list to Jim Hughes. <pre> &gt; Ed has tried what you suggest. When the bosses want 10 things and our &gt; &gt; measured velocity indicates we're going to get 6 done by the date, the &gt; &gt; bosses reply with &quot;how many contractors do you need to get it all done?&quot; Ed &gt; &gt; says &quot;We could use a couple more good coders; maybe we could get 7 done if &gt; &gt; we get them in soon. Any more than that will slow us down, because helping &gt; &gt; the get up to speed will take up too much of our time.&quot; &gt; &gt; &quot;Okay, so how many contractors do you need to get to 10?&quot; &gt; &gt; This exchange really takes place over weeks, not seconds, and involves many &gt; &gt; more people. &gt; &gt; I realize that what Ed's bosses don't &quot;get&quot; isn't just Agile, but basic &gt; &gt; proto-agile wisdom about how software development works, like in The &gt; &gt; Mythical Man-Month. Ed is looking for a way to help them get it. I'd really need to hear the real conversations to know what's up. But the answer to the first contractor question probably ought to be: Adding one contractor will slow us down for 45 to 60 days, then it will add X percent to our speed. The answer to the second is probably something like: There is no such number. We can't vacuum your office in ten seconds by using a thousand cleaners. They won't fit in the room. </pre> Engines of Democracy http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/GE.rdoc The General Electric plant in Durham, North Carolina builds some of the world&#8217;s most powerful jet engines. But the plant&#8217;s real power lies in the lessons that it teaches about the future of work and about workplace democracy. <p> A nice <a href="http://www.fastcompany.com/online/28/ge.html">article</a> about discovering the value of the human being. </p> Project (Cartoon) http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/scaryProjects.rdoc Enjoy the super <a href="http://www.scaryideas.com/project.html">comic</a>. <p> It&#8217;s truer than one thinks :-). </p> Ron Jeffries article: Complex Scope http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/JeffriesComplexScope.rdoc In which we discover that our implementation is &quot;totally wrong&quot; and we have to rewrite everything. Or do we? <p> <a href="http://www.xprogramming.com/xpmag/xstComplexScope.htm">www.xprogramming.com/xpmag/xstComplexScope.htm</a> </p> Agile Dilbert http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/Dilbert_agile.rdoc Even Dilbert has to face agile methods. Great <a href="http://www.dilbert.com/comics/dilbert/archive/images/dilbert2002220051116.gif">story</a>. Making the Date http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/MakingTheDate.rdoc Ron Jeffries posted a new <a href="http://www.xprogramming.com/xpmag/jatmakingthedate.htm">article</a>. <p> It seems like every development project begins with the date, and we&#8217;re held responsible for &quot;making the date&quot;. Making the date is not a development responsibility. Here&#8217;s why. </p> Outsourcing research and development work http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/On_outsourcing_luiz.rdoc I came across this great post by Luiz Esmiralha in the pragprog list. <pre> &gt;&gt; On Sun, Oct 16, 2005 at 11:48:34PM -0200, Luiz Esmiralha wrote: &gt;&gt; &gt; &gt;&gt; &gt; Maybe another question can help clarify the issue. &gt;&gt; &gt; &gt;&gt; &gt; Why pay 100 grand a year for a programmer just to make a guy in the US &gt;&gt; &gt; or Europe happy if I can get the same job paying 20 grand a year for a &gt;&gt; &gt; guy in India? &gt;&gt; &gt;&gt; Well those aren't anything near the figures. I know someone who is &gt;&gt; the IT director for a UK company that uses outsourcing. The financial &gt;&gt; savings are around 15%. If he sets up a UK shop in one of the more &gt;&gt; deprived areas of the UK he will be able to get to somewhere near that &gt;&gt; figure - lower salaries, govt grants etc. As a result he is seriously &gt;&gt; looking at doing just that. &gt;&gt; In a recent survey, average savings from offshoring are around a bit less than 10%. 5% of the companies polled acheved savings around 50% (cases where they replaced 400 bucks/hour resources for 50 bucks/hour resources). The realistic target saving when offshoring operations is estimated around 30% as companies become more mature in the way they conduct offshoring. 20 grand a year for a programmer in Brazil is a very good figure. I don't know the current average salary of a programmer in the US or UK. The 100K figure was based on supposition rather than fact. &gt;&gt; &gt; Your analogy implies that Indian software lacks quality. Quality seems &gt;&gt; &gt; to be measured (or guessed?) in CMM levels by every company in the US &gt;&gt; &gt; and the rest of the world is following this trend. Given that fact, I &gt;&gt; &gt; would like to remind you of the many companies in India appraised at a &gt;&gt; &gt; CMM 5 maturity level. &gt;&gt; &gt; I don't believe in CMM, but the guys in India didn't make it up, they &gt;&gt; &gt; just happily jumped on the SEI bandwagon. &gt;&gt; &gt;&gt; I don't believe in CMM either and I dont believe it necessarily produces &gt;&gt; a high quality product. It has been my experience (of three different &gt;&gt; Indian outsourcing companies) that product quality is variable, and &gt;&gt; a lot of the developers are what I would class as juniors even though they &gt;&gt; are not sold as such. Undoubtedly some of this can be tracked to &gt;&gt; the fact that development of apps that distant from the users is not the &gt;&gt; best way of doing things. Also there is a disinclination for the Indian &gt;&gt; guys to question the spec if they think it is inconsistent or lacking in &gt;&gt; detail and to raise questions with whoever is leading the project. &gt;&gt; &gt;&gt; Some (maybe most) of these issues are often also present for the big US/UK &gt;&gt; consulting firms. &gt;&gt; I worked with the 'Big Five&quot; in some projects and they present a uniform pattern in their staffing that I call &quot;War Movie Team&quot;. These teams are usually composed by a seasoned sargent (consultant) which marvels the spectator (customer) with his ability and 10 rookies (juniors or trainees). The sargent is usually assigned to another post in the middle of the movie and must leave the rookies to their own luck. In unrealistic war movies, the rookies will use their talent combined with the experience they acquired with Sarge to overcome the enemy and come home as heroes. In real wars and real projects, they are slaughtered by snipe fire, hidden mines and disease and return to South Dakota in bodybags. </pre> SD People & Projects: Mo' Developers, Mo' Problems? http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/teamSize.rdoc Thanks to Stefan for the forwarded eamil. <pre> Von: &quot;SD Magazine&quot;&lt;sd@newsletters.sdmediagroup.com&gt; Betreff: SD People &amp; Projects: Mo' Developers, Mo' Problems? Datum: Mon, 03 Oct 2005 19:09:26 -0400 (EDT) SD PEOPLE &amp; PROJECTS October 2005: Bigger Teams Not Always Better By Amit Asaravala &gt;&gt;&gt;&gt; MO' DEVELOPERS, MO' PROBLEMS? Thinking about assigning more developers to a project to accelerate your schedule? Be careful. Putting a large team on the job could cause you more trouble than it's worth, according to a new study by software estimation and analytics vendor QSM. The study, based on data that QSM collected from 564 information systems projects completed since 2002, revealed that large teams don't complete projects much faster than small teams, though they cost much more. In particular, teams with 34 people on average completed a 100,000-line project in 5.6 months at a cost of $2.1 million, while teams of four people on average took about two weeks longer but cost just $294,000. Thus, shaving two weeks off the schedule cost some companies as much as $1.84 million. Why such disproportionate production rates? Blame it on the bugs. The larger teams produced more than five times as many bugs as the smaller teams, which required the teams to reexamine their code more often, according to QSM. In the end, this ate into a large portion of the time saved by having more developers turn out more code per day. But before you decide to cut your team back to just four people, consider this: The size of the small team in the study was just an average, and QSM readily admits that it's saving the question of &quot;optimum&quot; team size for a future study. Rather, the real lessons here are that you'd better be sure that accelerating your schedule by adding more developers is worth the extra cost, and that you should have realistic expectations about how many days you'll actually save by doing so. --Amit Asaravala </pre> Linus on Specifications http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/SpecsAreCrap.rdoc William posted this to the XP-List. <p> Here&#8217;s a very interesting set of comments from Linus Torvalds and Theodore Tso on the problem with writing specs: </p> <p> <a href="http://kerneltrap.org/node/5725">kerneltrap.org/node/5725</a> </p> <p> Here&#8217;s a great quote from Linus: </p> <pre> The classic example of this is the OSI network model protocols. Classic spec-design, which had absolutely _zero_ relevance for the real world.We still talk about the seven layers model, because it's a convenient model for _discussion_, but that has absolutely zero to do with any real-life software engineering. In other words, it's a way to _talk_ about things, not to implement them. And that's important. Specs are a basis for _talking_about_ things. But they are _not_ a basis for implementing software. </pre> <p> And a good one from Ted Tso: </p> <pre> In those cases, if you implement something which is religiously adherent to the specification, and it doesn't interoperate with the real world (i.e., everybody else, or some large part of the industry) --- do you claim that you are right because you are following the specification, and everyone else in the world is wrong? Or do you adapt to reality? </pre> <p> And another one from Linus: </p> <pre> So don't talk about specs. Talk about working code that is _readable_ and _works_. There's an absolutely mindbogglingly huge difference between the two. </pre> <p> All heresy to the BDUF school of thought, of course. But relatively uncontroversial in the XP world. Interesting to see the parallel evolution. </p> Why I hate factories http://www.approximity.com/cgi-bin/blogtariAgile/index.rb/XP_agile/Hammer.rdoc Great post on the Joel on Software forums by Benji Smith. <p> &quot;Let&#8217;s pretend I&#8217;ve decided to build a spice rack. </p> <p> I&#8217;ve done small woodworking projects before, and I think I have a pretty good idea of what I need: some wood and a few basic tools: a tape measure, a saw, a level, and a hammer. </p> <p> If I were going to build a whole house, rather than just a spice rack, I&#8217;d still need a tape measure, a saw, a level, and a hammer (among other things). </p> <p> So I go to the hardware store to buy the tools, and I ask the sales clerk where I can find a hammer. </p> <p> &quot;A hammer?&quot; he asks. &quot;Nobody really buys hammers anymore. They&#8217;re kind of old fashioned.&quot; </p> <p> Surprised at this development, I ask him why.&quot; </p> <p> <a href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431.22">discuss.joelonsoftware.com/default.asp?joel.3.219431.22</a> </p>