ThoughtWorker Blogs


For a complete listing of ThoughtWorker blogs, you can go to blogs.thoughtworks.com

Martin Fowler : Bliki: VcsSurvey

Last updated: 2010-03-08T19:02:00Z


When I discussed VersionControlTools I said that it was an unscientific agglomeration of opinion. As I was doing it I realized that I could add some spurious but mesmerizing numbers to my analysis by doing a survey. Google's spreadsheet makes the mechanics of conducting a survey really simple, so I couldn't resist.I conducted the survey from February 23 2010 until March 3 2010 on the ThoughtWorks software development mailing list. I got 99 replies. In the survey I asked everyone to rate a number of version control tools using the following options:Best in Class: Either the best VCS or equal bestOK: Not the best, but you're OK with it.Problematic: You would argue that the team really ought to be using something elseDangerous: This tool is really bad and ThoughtWorks should press hard to have it changedNo opinion: You haven't used itThe results were this: ToolBestOKProblematicDangerousNo OpinionActive ResponsesApproval %Subversion20726109993%git651910148599%Mercurial332720366297%ClearCase03144141585%TFS00322244540%CVS0145911158417%Bazaar11330801782%Perforce126161544461%VSS11116422773% As well as the raw summary values, I've added two calculated columns here to help summarize the results.Active Responses: The total of responses excluding "No Opinion". (eg for git: 65 + 19 + 1 + 0)Approval %: The sum of best and ok responses divided by active responses, expressed as a percentage. (eg for git: (65 + 19) / 85)The graph shows a scatter plot of approval percentage and active responses. As you can see there's a clear cluster around Subversion, git, and Mercurial with high approval and a large amount of responses. It's also clear that there's a big divide in approval between those three, together with Bazaar and Perforce, versus the rest.Although the graph captures the headline information well, there's a couple of other subtleties I should mention.Although the trio of Subversion, git, and Mercurial cluster close together on approval, git does get a notably higher amount of best scores: (65 versus 20 and 33).VSS got the most "dangerous" responses, but a couple of people approved of it.Neither TFS or ClearCase are liked much, but ClearCase got more "dangerous" responses than TFS (41 versus 22).Some caveats. This is a survey of opinion of ThoughtWorkers who follow our internal software development discussion list, nothing more. It's possible some of them may have been biased by my previous article (although unlikely, since I've never managed to get my ThoughtBot opinion-control software to work reliably). Opinions of tools are often colored by processes that are more about the organization than the tool itself. But despite these, I think it's an interesting data point.I should also stress the important point to take away from this isn't the comparison between those close in the numbers, eg comparing git and Mercurial or comparing TFS and ClearCase. Any survey like this has a certain amount of noise in it, and I suspect the noise here is greater than such a difference. The important point is the big approval gap between the leading tools (Subversion, git, and Mercurial) and the laggards - essentially the point in VersionControlTools.


Marc McNeill : Petition

Last updated: 2010-03-08T12:58:14Z


I’ve written in the past about the government’s abysmal track record on IT development.  I met with the local MP to discuss the issues but he didn’t really get it; he sent me away to write a policy paper for him which I really had time for…  So good news that someone is doing something about it with a petition on the Number 10 website. In his recent update on the progress of the petition, Rob Bowley mentions the Rural Payments Agency project.  I can’t attest to either have been an ‘expert’ or to have had a salary anything near what he mentions, but I was a consultant on that project so nod in informed agreement.  That experience gave me a benchmark to compare ‘bad’ ways of going about an IT project to compare with the ‘good’ world of lean and agile that I now inhabit. Please sign the petition.


Sriram http://www.blogger.com/profile/01237485664035584743 noreply@blogger.com : Pair Programming Payoff

Last updated: 2010-03-07T12:36:05Z


For a project that runs for, say six months or more, there should no extra development cost on account of pair programming. Period. If there is extra cost, it means pairing is not paying off for you. Pairing should pay off in the following difficult-to-measure ways:Lesser rework during development on account of misunderstood/ill-defined requirements. These things surface quickly when pairs talk to each other. Slight reduction in maintenance cost on account of clearer code. Because every line is now considered readable by at least two people. (more in case of pair rotation) A better detail level design results when each pair acts as a sounding board for the other. Good design reduces cost of future change. Faster/better process of bringing new team members up to speed. Lesser impact of people taking vacations. Lesser bugs in QA, UAT More hours of focused work per day - however professional someone may be it is natural for concentration to wax and wane. Pairing almost always helps here.  Unlike the case of no-pairing, there is no separate code-review activity required How do you figure if there is extra cost? Estimate both ways. The total 'release-lifecycle effort' for the case of pairing should not exceed that of no-pairing. Individual stories may indicate greater effort but that is okay. It is very difficult to do controlled experiments to nail this down. There are some studies but your mileage may vary. A word of caution when estimating for such comparisons. Remember that on all real projects, actuals mostly exceed estimates. Some of the difference is borne by the client (change control etc) and the rest by the vendor (unpaid overtime etc). You need to have a realistic idea of effort overrun for the case of no-pairing to be able to compare it with the overrun for the case of pairing. If pairing is resulting in net higher development cost on a long running project, then it simply means (to paraphrase Kent Beck) that the client is getting XP'd on :)blog home page


Jason Yip http://www.blogger.com/profile/08286768587936088382 noreply@blogger.com : Day 2: 2nd Australian Positive Psychology and Well-Being Conference

Last updated: 2010-03-03T11:53:54Z


Martyn Newman - Why happiness is good for businessDo relationships lead to happiness or are happy people more likely to be in a relationship?"The constraint isn't money, it's people." Rex Tilerson, Exxon Mobil"To be independent of public opinion is the first formal condition of achieving anything great or rational." Friedrich HegelSelf-confidence comes from self-liking + self-competence.Felicia Huppert - Defining, measuring, and promoting flourishing in the populationBeyond Money: Toward an Economy of Well-Being by Ed Diener and Martin E.P. SeligmanCore features of flourishing (i.e., the opposite of depression): positive emotion; engagement, interest; meaning, purpose; positive relationships; and 3 of either confidence, optimism, resilience, vitality, or self-determination.5 ways to well-being:Connect...Be active...Take notice...Keep learning...Give...Andrew Carnegie - Positive steps for managing workplace conflict - A manager training programIf you see a machine blowing blue smoke, you fix it. But when you see the equivalent with people, you're more likely to do nothing.Happiness at Work Index (what matters most in order of importance)Friendly and supportive colleaguesEnjoyable workGood boss / line managerGood work / life balanceVaried workBelief that we're doing something worthwhileFeeling that what we do makes a differenceBeing part of a successful teamRecognition for our achievementsCompetitive salary


Jason Yip http://www.blogger.com/profile/08286768587936088382 noreply@blogger.com : Day 1: 2nd Australian Positive Psychology and Well-Being Conference

Last updated: 2010-03-03T11:23:47Z


I attended the 2nd Australian Positive Psychology and Well-being conference in Melbourne on 12 - 13 February. Here are my notes for the first day.

Christopher Peterson and Nansook Park - Positive Psychology: An even-handed yet enthusiastic look at its past, present, and future

"Australians are like Canadians with humour." (Chris Peterson)

"Never say further research is needed unless you can say what that further research is." (Chris Peterson)

The value of Positive Psychology is about "breaking through the zero point".

It is not about focusing only on strengths and ignoring weaknesses but rather harnessing strengths and assets to solve problems and enhance well-being.

The pillars of positive psychology:
  • Experiences <- Current research emphasises this too much
  • Traits
  • Relationships
  • Institutions
"Critical thinking is important but you need to know what to be critical about." (Chris Peterson)

Two factor analysis of the VIA strengths Mind vs Heart and Focus on Self vs Focus on Others:


Parents with the strength of self-regulation are the strongest predictor of happy children.

Barrack Obama explicitly mentioned 23 out of the 24 character strengths in his inauguration speech. The missing one? Humour.

It's important to look beyond the happiness, health, and success of "I".

"Love is never having to say you're sorry. Science is having to always say you're sorry." (Chris Peterson)

Abraham Maslow bemoaned the fact that humanistic psychology became a "safety science", concerned only with celebrating itself, and no longer a "growth science", constantly challenging itself in order to improve. We should be vigilant to ensure the same thing does not happen to positive psychology.

Craig Hassed - Mindfulness - the multi-faceted diamond

"Any man who can drive safely while kissing a pretty girl is probably not giving the kiss the attention it deserves." (Albert Einstein)

Mindfulness is NOT distracting ourselves or tuning out, but rather tuning in.


Martin Fowler : Bliki: ToyotaFailings

Last updated: 2010-03-03T00:45:00Z


One of the arguments used to support the adoption of lean techniques in software is the success of Toyota. So do Toyota's recent quality failings undermine the case for lean software development?

One answer for this is to take a sense of proportion. Lean manufacturing techniques were the underpinning of Toyota's rise from an insignificant company in the 1950's to a global giant in the 2000's. By the 1990's other car companies, and many other manufacturers, were busily copying Toyota's techniques. The general sense is that copying these techniques did much to raise the overall quality of cars in the last decade or so. I would be very surprised if the recent problems at Toyota are enough negate that half-century of success.

But a better answer is to remember that Lean manufacturing is about manufacturing not software. The application of lean ideas to software development is a consequence of MetaphoricQuestioning. Lean ideas can help us come up with better ideas for software development, and as such are valuable. But in the end their usefulness lies with how they are used in software and they should be judged on their record here. Their history in manufacturing, both good and bad, is another industry.



Ola Bini : Destructuring extravaganza

Last updated: 2010-03-02T19:34:26Z


A few months back I added support for destructuring assignment and tuples to Ioke. Since Ioke’s assignment is just a regular method call, this was actually fairly easy to do. The end result is that you can do things like (x, y) = (13, 14). You can also do more interesting things, such as ((x, y), (x2, y2)) = [[1,2],[3,4]]. Notice that the right hand side is not a tuple anymore, but a list. Anything that can be turned into a tuple using the asTuple method can be on the right hand side, or an item in a recursive destructuring.

All this functionality makes code slightly more readable. But last week I decided to add support for eachCons and eachSlice, and suddenly I realized that destructuring would be very nice to have not only in the explicit assignment case, but also in cases where you want to pick apart the arguments to an enumerable or sequence method. So I added those, which means that suddenly lots of code becomes much more simple.

Short story, in all Sequence and Enumerable methods, at every place where you could put an argument name, you can now put a destructuring statement instead. Let’s take a look at an example:

Point = Origin with(asTuple: method((x, y, z))) points = [ Point with(x: 42, y: 14, z: -44), Point with(x: 20, y: 0, z: 444), Point with(x: 31, y: 646, z: 3), Point with(x: 456, y: 14, z: 12) ] distances1 = points consed map(obj, ((obj[0] x) * (obj[1] x) + (obj[0] y) * (obj[1] y) + (obj[0] z) * (obj[1] z)) sqrt) distances2 = points consed map( ((x1,y1,z1), (x2,y2,z2)), (x1*x2 + y1*y2 + z1*z2) sqrt) distances1 inspect println distances2 inspect println

This code first creates a Point that can be coerced into a tuple of x, y and z coordinates. We then create a list of Points with different coordinates. We then want to calculate the three distances between the four points. We do this in two ways, using the old method and then using destructuring. The method consed is a sequence version of eachCons. The default cons length is 2, so this will yield three entries with two points in each. We then call map on the sequence. We will get a List of two entries, where each entry is a point. Finally we use Pythagoras to calculate the distance.

The second version is very similar - the only difference is that instead of using the square brackets to index into the lists, we instead give a pattern. This pattern contains two patterns, and the variable names inside of it will be bound to the right parts of each point.

At least in my mind, the destructured syntax is much more readable than the original one. And remember, this works for anything that can be turned into a tuple, which means you can use it on any Enumerable - you can use it on a Pair (such as what a Dict will yield) or any thing you would want to add asTuple to on your own.



Marc McNeill : Are you prepared for the dip?

Last updated: 2010-03-02T12:06:26Z


So you are refreshing or rebuilding your website.  You are introducing new functionality and features, and sweeping away the old. You’ve done usability testing of your new concepts and the results are positive.  Success awaits.   You go live.   And it doesn’t quite go as you expected.  You expect that the numbers and feedback will go on an upward trajectory from day one, but they don’t.  What you should have expected is the dip.

Illustration of the dip

In October 2009 Facebook redesigned the news feed.  Users were up in arms, groups were formed and noisy negative feedback was abound.  A couple of years back the BBC redesigned their newspage, “60% of commenters hated the BBC News redesign“.  Resistance to change is almost always inevitable,  especially if you have a vocal and loyal following, you can expect much dissent to be heard.  What is interesting is what happens next.  Hold your nerve and you will get over this initial dip.  We’ve seen a number of projects recently where this phenomenon occurred; numbers drop and negative feedback is loudly heard.  But this dip is ephemeral and to be expected.  The challenge is in planning for this and setting expectations accordingly.  Telling your CEO that the new design has resulted in a drop in conversion rate is going to be a painful conversation unless you have set her expectations that this is par for the course.

Going live in a beta can help avert the full impact of the dip.  You can iron out issues and prepare your most loyal people for the change, inviting them to feedback prior to the go-live.  Care must be taken with such an approach in the sample selection o participate in the beta.  If you invite people to ‘try out our new beta’, with the ability to switch back to the existing site, you are likely to get invalid results.  The ‘old’ version is always available and baling out is easy.  Maybe they take a look and drop out, returning to the old because they can.  Suddenly you find the conversion rates of your beta falling well below those of your main site.  Alternatively use A/B testing and filter a small sample to experience the new site.  That way you will get ‘real’ and representative data to make informed decisions against.  Finally, don’t assume that code-complete and go-live are the end of the project.  Once you are over the dip there will be changes that you can make to enhance the experience and drive greater numbers and better feedback.



Marc McNeill : Bunch of grapes or bunch of arse?

Last updated: 2010-03-01T14:34:17Z


“We’ve got to have the ability to enable customers to share”
Random London Taxi driver spouting opinion on social media

“‘ere,  you say you’re in IT, whatcha make of this Facebook and twitter malarky? That Stephen Fry, what a tw@t, I don’t care that he’s just woken up and brushed his teeth. Now that QI, its a fix. He’s not so bright, he doesn’t know all the answers etc etc etc….  I’ll tell ya, Facebook and all that sh!t is a bunch of arse”.

“We’ve got to have the ability to enable customers to rate and review products”
Random UK customers in a focus group

Facilitator “So if I gave you all these user reviews for the product, or a review by Martin Lewis, who are you going to go with?”  Group: “Martin Lewis…  yeah, I trust him, no idea who these people who write reviews are… what’s in it for them?…  they are paid by the company aren’t they (cynical agreement etc)”

“Blackberrys are the business users phone”
Random teenagers in shopping centre talking about their mobile phones

“You’re nobody if you don’t have a Blackberry”  (Ummmm, aren’t Blackberry’s the business person’s phone?)  “You’ve got to have one coz of the Blackberry PIN for texting”

Sometimes you can get hung up in your view of the world, you make assumptions about the way the world works.  Yet it can be refreshing to go out onto the street and canvas ideas and feedback.  That may be as simple as striking up people on the street (people love to talk), or running focus groups for no particular research purpose other than taking the pulse of what people think.  Or it may be spending time on the shop floor.  Get out of the office for a day and have fun seeing your customers, consumers of your idea, in the wild.  I’m not saying you take the word of a taxi driver, a comment from a single focus group or an anecdote from a shopping centre as gospel, but it might make you think and spark some new, unexpected and contrary ideas



Martin Fowler : Bliki: BlueGreenDeployment

Last updated: 2010-03-01T14:25:00Z


One of the goals that my colleagues and I urge on our clients is that of a completely automated deployment process. Automating your deployment helps reduce the frictions and delays that crop up in between getting the software "done" and getting it to realize its value. Dave Farley and Jez Humble are finishing up a book on this topic - Continuous Delivery. It builds upon many of the ideas that are commonly associated with Continuous Integration, driving more towards this ability to rapidly put software into production and get it doing something. Their section on blue-green deployment caught my eye as one of those techniques that's underused, so I thought I'd give a brief overview of it here.

One of the challenges with automating deployment is the cut-over itself, taking software from the final stage of testing to live production. You usually need to do this quickly in order to minimize downtime. The blue-green deployment approach does this by ensuring you have two production environments, as identical as possible. At any time one of them, let's say blue for the example, is live. As you prepare a new release of your software you do your final stage of testing in the green environment. Once the software is working in the green environment, you switch the router so that all incoming requests go to the green environment - the blue one is now idle.

Blue-green deployment also gives you a rapid way to rollback - if anything goes wrong you switch the router back to your blue environment. There's still the issue of dealing with missed transactions while the green environment was live, but depending on your design you may be able to feed transactions to both environments in such a way as to keep the blue environment as a backup when the green is live. Or you may be able to put the application in read-only mode before cut-over, run it for a while in read-only mode, and then switch it to read-write mode. That may be enough to flush out many outstanding issues.

The two environments need to be different but as identical as possible. In some situations they can be different pieces of hardware, or they can be different virtual machines running on the same (or different) hardware. They can also be a single operating environment partitioned into separate zones with separate IP addresses for the two slices.

An advantage of this approach is that it's the same basic mechanism as you need to get a hot-standby working. Hence this allows you to test your disaster-recovery procedure on every release. (I hope that you release more frequently than you have a disaster.)

The fundamental idea is to have two easily switchable environments to switch between, there are plenty of ways to vary the details. One project did the switch by bouncing the web server rather than working on the router. Another variation would be to use the same database, making the blue-green switches for web and domain layers.

This technique has been "out there" for ages, but I don't see it used as often as it should be. Some foggy combination of Dan North and Jez Humble came up with the name.



ThoughtWorks is a global IT consultancy. We deliver bespoke applications, no-nonsense consulting and help organisations become agile.

ThoughtWorks, ThoughtWorks Software Technologies (Xi'an) Ltd, E-101, Xi'an Softwarepark, No. 68 Keji 2nd Road
Xi'an High-tech Development Zone, Xi'an, Shaanxi, P.R. China, 710075
T +86 29 8760 7301 F +86 29 8760 7380 E info-cn@thoughtworks.com

观点



激发您的思想

“观点”是ThoughtWorks的季刊,将为您带来我们最新的思想、观点和看法。

[ ]