magpiebrain

Sam Newman's site, a Consultant at ThoughtWorks

p(update). The venue will be the “Olde Bank of England”:http://www.beerintheevening.com/pubs/s/66/660/ – we have the balcony reserved.

After a long hiatus, it’s back. I’d love to blame trips to China and Minneapolis, but in truth I’m just plain lazy. Format as before – a laidback drink/gossip with perhaps a few demos thrown in.

I’ll hopefully be arranging demos of “Selenium(Selenium – The opensource web testing tool)”:http://www.openqa.org/selenium/ and “Buildix(Buildix – project in a box)”:http://buildix.thoughtworks.com/, but as always feel free to bring along whatever projects you’re imvolved with that you’d like to demo.

Venue to be confirmed – stay tuned to “Upcoming”:http://upcoming.org/event/95915, this blog post, the “London 2.0 Archive”:http://www.magpiebrain.com/blog/category/web-20/london-20-meet-ups/ or the Google “ical feed(London 2.0 Events)”:http://www.google.com/calendar/ical/c7ilcesmkkn0e3bkirk4kgf5cc@group.calendar.google.com/public/basic.ics (I’m SO Web 2.0) for updates. Feel free to leave a comment to let me know you’ll be coming along…

I’m off for the next week, presenting at “Agile 2006”:http://www.agile2006.org/ in Minneapolis. I’m running a half day Lego XP Game session. In total some 15 co-workers will be in attendance (including “Chris(Chris Read)”:http://www.chris-read.net/, “Jez(Jez Humbe)”:http://blog.urbanguru.net/ and “Dan(Dan North)”:http://dannorth.net/ – god help my liver), so no doubt they’ll be lots of “ThoughtWorks”:http://www.thoughtworks.com/ swag and opinions flying around. If you’re attending feel free to say hi. I’ll be the one in the bar.

When I get back it’ll be all hands to the deck, organising the next two “London 2.0”:http://www.magpiebrain.com/blog/category/web-20/london-20-meet-ups/ meet-ups, a long term review of my “Palm TX”:http://www.palm.com/us/products/handhelds/tx/, more work for my nameless client and probably some prep for “XP Day 2006”:http://www.xpday.org/…

h3. A Happy Customer

I’ve been with my current mobile provider, “Orange”:http://www.orange.co.uk/, for at least seven years now – certainly for as long as I’ve had a phone. Up until recently I’ve been very happy with their service. I’ve had no problem with their coverage, the contracts are good, but most importantly the customer service has always been good.

The first hiccup occured last year, when it came time to renew my contract. I wanted the new (at the time) Sony Ericsson K750i – however virtually every other mobile phone company was making better offers than Orange. In the end I managed to get a trade-in deal for an old phone which just about made up for the difference, however I still ended up worse off than if I’d change provider.

h3. New Year, New Phone

This year, my contract is once again up for renewal. This time around I was after the new Nokia N80, and into the bargin I thought I’d get the kind of contract which would qualify me for the ‘free’ broadband. My current supplier, “Zen Internet”:http://www.zen.co.uk/, has been excellent – however they specialise in providing high-end, no-contention services for business and are a bit overpriced for my occasional home use.

Checking the Orange website, it seemed that I could get the N80 on an 18 month contract worth £30 or more – that would also qualify me for the free broadband offer. I phoned Zen, got my MAC code (used for broadband migration) and phoned Orange this morning.

h3. Problems, problems, problems…

Pretty early into the call, it’s clear that I’m not going to get what I want. When I aget told “With your account history, that phone will cost you £259”. £259? “But the site says £49!”. “Did you read the small print?”. It seems tha the figure quoted on the website is a minimum, and “other circumstances” can change this amount. The print really is very small.

I enquire why my account history as a loyal seven year customer who has never missed a payment means that I have to pay much more for a phone than I would if I jumped ship to another operator. At this point the helpful customer service rep says “I’ll see what she can do”.

h3. Bartering > loyalty

I get transfered to another person – let’s call her Tracey.

“So, you want to cancel your contract because you can get your phone cheaper elsewhere”?

I explain to Tracey that actually I _don’t_ want to cancel my contract. I ask why I can’t get the phone for £49. I’m told:

“That deal is only for new customers”.

I counter:

“So you reward new customers, not your existing ones?”.

I point out that by moving to a new provider I can get a much better deal.

“I don’t want to leave” I explain, “but you’re making it very easy”.

Tracey’s first counter offer is a contract of £25, with the same minutes as the £30 package I looked at, and the phone will only cost me £9.99!

“Great! Does that include the free broadband too?”.

“No sir, you need a contract of £30 or more”.

“OK, so can I have the original £30 contract I wanted?”.

“Yes, but that will mean you’ll have to pay £259 for the handset”.

“Hang on, are you saying that if I pay £25 a month I get the phone for £9.99. But If I pay £30 a month – for the same inclusive minutes – the phone will cost me £259. How does that work?”.

Then there was a pause, and I realised I’d hit paydirt.

“Well, I can offer you a £30 contract with more minutes, and you will qualify for the free broadband too”.

Which of course I accepted.

h3. Rules, rules, rules…

I had been the victim of a rules engine. A few years back I did some work for a credit scoring company. I’d helped on a generic scoring system. You defined custom rules based on customer data, and you offered them a product at the end of it. The product might be a loan at a certain percentage rate, it might be car insurance with a certain premium, or it might be a handset at a certain price.

Orange are clearly using a rule-based system – it may even be the same one. The problem is they score the fact that a customer is new over a loyal customer. The sad reality is, that their scoring system probably isn’t wrong for them. If the rules are wrong, they’ll loose money and they’ll change the scoring. And Orange are not an exception – all mobile phone companies seem to reward new customers over existing ones.

When I get through to Tracy, she may of provided an overide to the automated rules. What is more likely is that Orange only offer the good deals to those people who jump through hoops. Given the choice between loosing me and giving me a good deal, they’ll go for offering me a deal everytime. This in itself is a form of Market Segmentation – Joel has a “good essay(Joel On Software – Camels and Rubber Duckies)”:http://www.joelonsoftware.com/articles/CamelsandRubberDuckies.html on this. Orange have sold the expensive handset and crappy contract to the people who cannot be bothered to kick up a fuss. Now they’ve sold a (slightly less) profitable package to someone who is willing to go to some effort.

h3. A sorry – but profitable – state of affairs

Sites like Martin Lewis’ “Money Saving Expert”:http://www.moneysavingexpert.com/ show that my experience is far from unique, and Orange is certainly far from being the only company who do not go out of their way to reward loyality. Martin shows that by shopping around and by bartering you can save a fortune. The reality of the current state of the consumer market is that loyal customers are viewed as nothing more than a captive audience who can be used as a cash cow. Those of us who shop around will continue to save money – while those that don’t will continue to get taken advantage of.

So if you dont’ like the deal your being offered, it pays to shop around – or at least threaten to do so.

p(update). _Update_ Chris Read has “more on Buildix”:http://www.chris-read.net/?p=8 over at his blog.

Our Build Monkies have been hard at work – and “Buildix”:http://buildix.thoughtworks.com/ is the result. A Live CD (powered by KNOPPIX) which contains a working Suberversion Repository, “CruiseControl”:http://cruisecontrol.sourceforge.net/ install, “trac”:http://www.edgewall.com/trac/ and example build scripts.

Run it as a Live CD, install it straight on to a machine, or even run it via VM Ware. Check in your source code, CruiseControl picks it up and will build it, and Trac will… well, track it. There’s even a trac plugin which displays your CruiseControl builds in trac’s timeline.

Buildix has been designed to get your project up and running quickly. Right now much of it is focused around building Java code, but with your own build script this could as easily be used to build any code you want. And version 1.0 is only the start. Rumours are the next version will contain “CC.Net”:http://sourceforge.net/projects/ccnet/ running under Mono for you .NETers, and I can’t believe a version supporting Ruby and Python development will be far behind.

Huge kudos has to go to the team – Tom Sulston, Chris Read, Julian Simpson, and Jez has probably had a hand in there too. My contribution has mostly been heckling from the sidelines. If you fancy giving it a go, grab the ISO from the “main site”:http://buildix.thoughtworks.com/ – it’s freeware so there is nothing to stop you. And if you need more convincing, they’ll be a demo at the next “London 2.0 meeting”:http://www.magpiebrain.com/blog/category/web-20/london-20-meet-ups/.

I’ve been struggling with configuring a password protected Resin-deployed JMX application on windows recently. This is being blogged in the hope that Google will pick this up and make the process much simpler for someone later on.

These instructions assume you are using Resin, but should work for any container.

h3. Enabling Password Protection

Starting Resin secured using a password is pretty simple. Firstly, start Resin with the following properties:

com.sun.management.jmxremote.port=
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.password.file=
com.sun.management.jmxremote.access.file=

Next, you’ll need to create @jmx.access@ file, like so:

joeblogs readwrite

And a @jmx.passwd@:

joeblogs password1

p. jmx.passwd needs to be secured such that only the user running the Resin process can access the file. On Linux or Unix, this is simply a case of running @chmod 400 jmx.passwd@. However on Windows this is more involved – the “five step process(How to a Secure Password File on Microsoft Windows Systems)”:http://java.sun.com/j2se/1.5.0/docs/guide/management/security-windows.html required to secure the file is rather baroque, and worst of all makes running JMX applications secured in this manner rather hard for development teams, as this has to be done each time the file is checked out. I suspect a “Calcs”:http://www.ss64.com/nt/cacls.html or “SetAcl”:http://setacl.sourceforge.net/ script could be folded into the build, but it really shouldn’t be that hard. I suspect Sun want us all to use SSL instead.

h3. Programatically working with password protected JMX

This “sample from sun”:http://java.sun.com/j2se/1.5.0/docs/guide/jmx/examples/Security/simple/client/Client.java shows how to work with your newly password-protected JMX app:

public class Client {

  public static void main(String[] args) {
  try {
      HashMap env = new HashMap();

      String[] credentials = new String[] { "username" , "password" };
      env.put("jmx.remote.credentials", credentials);
      JMXServiceURL url = new JMXServiceURL(
         "service:jmx:rmi:///jndi/rmi://localhost:9999/server");
      JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
      MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
      String domains[] = mbsc.getDomains();
      for (int i = 0; i < domains.length; i++) {
         System.out.println("Domain[" + i + "] = " + domains[i]);
      }

      ObjectName mbeanName =
          new ObjectName("MBeans:type=SimpleStandard");
      mbsc.createMBean("SimpleStandard", mbeanName, null, null);
      // Perform MBean operations
      [...]

      mbsc.unregisterMBean(mbeanName);
      jmxc.close();
    }  catch (Exception e) {
      e.printStackTrace();
    }
  }
}

In my post, “The Five Variables of Project Management”:http://www.magpiebrain.com/blog/2006/06/25/the-five-variables-of-project-management/, both “Marty”:http://www.magpiebrain.com/blog/2006/06/25/the-five-variables-of-project-management/#comment-1790 and “Richard”:http://www.magpiebrain.com/blog/2006/06/25/the-five-variables-of-project-management/#comment-1800 used the term ‘quality’ rather than my prefered term ‘process’. I didn’t do a good job of justifying the term process in the post, so felt a follow-up was in order.

I felt that an example would help explain my thinking. To use a not-that-theoretical situation, let us imagine a project, where the average piece of functionality takes one day to implement, and 1/2 a day to create a user-interface test. Let us also say that on average, each piece of functionality introduces 1/8 a day worth of bug. The QAs believe that too much time is being spent on automated testing, as they end up checking everyhting maually anyway to pick up problems with the automated tests. The team decides to try not creating automated acceptance tests which drive the UI, and instead create functional tests which drive the domain model rinstead, which is quicker. As a result development is faster, and the increased speed of delivery outweighs the increased bugs picked up during manual testing.

What we’ve done is is change the _process_ to increase delivery speed. What we haven’t necessarily done is decrease the final quality of the product.

Let’s pick another example. We spend a month or so gathering requirements. Then we spend a month or two developing requirements, only to find the customer has changed their mind – business priorities have changed. We then have to spend time undoing what we’ve done. We decide to change our _process_ by spending only a week gathering requirements followed by two weeks of development. This means we reduce the chance of being affected by our customers changing their mind, and if they do we only have a a couple of weeks work that could be affected, rather than a couple of months. The net result is that we deliver faster – we’ve changed our process to increase delivery speed, but we haven’t changed the quality of the final product.

Changing process _can_ affect quality, but changing process is about more that _just_ changing quality.

p(update). Update: Picked up on a thread on “TheServerSide”:http://www.theserverside.com/news/thread.tss?thread_id=41092, so there may be some more discussion over there.

In my experience (and more so that of my more experienced colleagues) there are five variables over which you can exert control to decide when – and with what functionality – you can deliver your software.

h3. Scope

In simple terms, if you deliver less functionality, it will take you less time. The problem is that often the decision as to what _not_ to deliver happens during the development process itself. This means that prioritisation of functionality from the outset is important. if half way through you need to cut scope, but the only stuff you have left is the stuff your users simply *must* have, and you spent the last three months delivering things they’d only _like_ to have, your options are limited. Priorities can change, but core functionality tends not too – concentrate on delivering that and you’ll make it easier for yourself in the long run.

h3. Time

Typically the thing over which technical people have the least control (anecdotally it seems as though the go-live date for software is defined more by sales and marketing than by need), but you can decide to deliver later to get what you want.

h3. People

Adding more people to a project _can_ make it faster – to a point. However in software adding people very rarely tends to result in a linear increase in productivity. Hiring the right people can be more efficient, but is far from easy.

Some organisations take the ‘lots of dumb people being told what to do by one or two smart people’ route, others the ‘a few smart people all knowing what to do’. I’m sure most of us (myself included) believe we hope for the later. I’ve certainly seen examples in the consultancy world where an organisation with a lower charge rate but lots of people ends up costing much more deliver than a small number of people with higher charge rates.

h3. Process

Reworking one’s process in order to be more efficient is an obvious thing to do, but hard to achieve. Depending on the flexibility of your organisation changing your process might not be easy, even if you know what it is to change. Changes mid-project – for example in order to deliver faster – tend to be limited, small changes. Retrospecitves can be a good tool for identifying what the team thinks is required, but don’t discount seeking outside help – someone from another team might have a different take on things.

A far more common type of process change occurs when people make what is often claimed to be short-term sacrifices in terms of software quality to deliver on time. Changes could involve writing less developer tests, spending less time performing manual tests, stop pairing, or spend less time ensuring consistent technical vision. When these changes really are short-term, and time is set aside afterwards to repair the damage done, this may be a viable technique. However those organisations which tend to drop quality in order to deliver faster tend to use this technique more than any other, and frequently never spend time playing catch up – leading to a team spending most of their time running from one disaster to another.

h3. Risk

Risk Management is something I’m personally becoming aware of. Making sure you have situations in which potential risks can be raised is important (a daily stand-up might be one). Periodically risks should be assessed, in terms of how likely they are to occur, and also in terms of how much damage they can create.

Some risks can be mitigated, some eliminated entirely, and others cannot be addressed by you. In any case once prioritised in terms of likelihood and potential damage, they can be mitigated or communicated to your business sponsor accordingly.

I’ve just got back, and here are some useful lessons.

Lions, Forbidden City

h3. Getting a Visa is easy if someone does all the work for you

I think it also helps that we have a office there too. I did very little other than give someone my passport, fill in an A4 form, and get some passport-compatible photographs. Only the latter was painful.

h3. Getting flights is easy if someone does all the work for you

Although checking in at Heathrow terminal 4 is another matter. I understand why BA recommend getting there three hours in advance – it took me over an hour to get into departures! The “Heathrow Express”:http://www.heathrowexpress.com/ is excellent though.

h3. Currency

Is called the Yuan, but normally simply refered to as RMB (China Yuan Renminbi). Taking large quantities in or out (5000 RMB is the limit, which is about $600) is a no-no.

h3. Power Adaptors

Australian one’s should work – but even if you don’t have them, most power sockets seem to take American adaptors too.

h3. Overnight flights are a good idea

My outbound ten hour flight departed on Wednesday afternoon, and I arrived Thursday, thereby minimising Jet Lag. The flight on the way back was OK, but I got my ass handed to me by Jet Lag – NASA reckon it can take up to one day per time zone to get over it, and I crossed about 15!

h3. I either need a new camera or more skill

As “these photographs”:http://www.flickr.com/photos/samnewman/sets/72157594158965922/ will show.

h3. Our chinese colleagues are very young

They’re also very smart and incredibly well organised. They arranged an agile conference for 500 people, and I struggle to manage an away day for 50.

h3. Five days isn’t enough

Which really goes without saying – I’m looking forward to going back. Hopefully next time I’ll be able to visit our Xi’an office and spend some more time getting to know everybody.

I’ve been asked this question about a googilian times, and so thought it worth a blog post.

So how exactly do you get rid of annoying (browser) popups on your computer?

h3. Turn off windows messenger service.

This is typically disabled by default, but it’s worth checking. I believe some ISP’s will even filter this traffic out – some don’t The windows messenger service allows computers on a network to send each other messages, however it doesn’t stop spammers sending you messages. Turning it off though is quite easy, as “this article(itc – How to Disable Windows Messenger Service)”:http://www.itc.virginia.edu/desktop/docs/messagepopup/ shows.

h3. Download a Spyware finder

Many nasty programs that for unknown reasons aren’t caught by virus checkers can be responsible for causing popups. Lukcily the two best programs for finding and removing them are free. “AdAware personal”:http://www.lavasoft.de/software/adaware/ and “SpyBot”:http://www.spybot.de/ both do a great job. AdAware is my current favorite purely because it has a slightly nicer interface.

No matter which one you download, make sure you update it, then run a scan, and remove anything it finds. I’d suggest running this once or twice a week

h3. Make sure you run Windows Update.

Assuming you’re running Windows XP the latest service pack 2 includes a firewall which may help things. The updates will also fix security holes in applications like Internet Explorer which will allow spyware to be installed in the first place. If you don’t have Windows XP, consider a free personal firewall like “ZoneAlarm(Free, Personal Firewall)”:http://www.zonelabs.com/store/content/catalog/products/sku_list_za.jsp?dc=12bms&ctry=US&lang=en&lid=nav_za

h3. Stop using Internet Explorer.

IE has some security holes which can allow dodgy programs (likely to cause popups) to run on your machine. Instead consider getting “Firefox”:http://www.mozilla.com/firefox/ or perhaps “Opera”:http://www.opera.com/ and using those instead (both are
free). These browsers also have code to stop websites from trying to open new windows when you browse to their sites.

h3 Get an up to date anti-virus program

If you don’t want to buy something, grab “AVG Free”:http://free.grisoft.com/doc/1. If you want a commercial one, I can recommend “Panda anti virus”:http://www.pandasoftware.com/. Make sure which ever program you’ve got is set up to scan often and automatically download updates.

h3. Change your OS

An extreme measure! I run both Windows and OSX – I’ve taken the steps above and don’t get any popups on my Windows machine, but I’ve never had to worry about popups at all on OSX. Moving to OSX probably isn’t an option for most people, but if you are looking for a change you might want to consider it. As an aside there has yet to be a single documented example of a virus in the wild affecting a computer running OSX. That’s not to say it won’t happen, but compared to the number of Windows viruii out there it can be considered the safer option.

NYPD Blue

You heard me right. After years of being ignored by the only people with the rights to show it (thanks Channel 4), the Best Cop Show In The World Evar, “NYPD Blue”:http://en.wikipedia.org/wiki/NYPD_Blue, is back on in the UK – this time on UK freeview channel “More 4”:http://www.channel4.com/more4/.

Now I only hope that unlike the West Wing we haven’t missed a series, and that we’ll get to see series 10 through to the final 12th with some regularity, rather than the gap of a year or three that we’ve come to expect from it’s treatment at the hands of channel 4 thus far.