Me-too brochureware banking

A neat bit of observation from Marc McNeill at Dancing Mango.

Me-too brochureware banking.

The sad thing is that the more business which use such “me too” approaches, the more others also copy. This may be through laziness, cheapness, or a sense that this is somehow the best way. In fact, I feel a compulsion to go and re-layout some of my own websites into this pattern …

Call me Master


It’s been roughly a twelve year journey (I started my first module in November 1998) but I have finally completed my Master of Science (MSc) degree with the Open University. Strictly the “award date” for the qualification itself seems to be 31 July 2010, but the university have informed me that I have passed all the requirements and am eligible to book a place at a graduation ceremony.

It’s taken so long that I’m not quite sure what to do now. Perhaps some completely different study; perhaps look into the possibilities for a PhD; perhaps no study at all (!).

TDD: Driving from the assertion up

I’m doing quite a lot of agile and TDD mentoring at the moment, so such things are always floating near the top of my mind.

A recent article from Mark Needham presents an interesting view on how to construct code within tests, and the impact that might have on how tests drive design of code.

REST and versioning, a more concrete example.

There’s an interesting discussion going on at The Wisdom of Ganesh in which Ganesh Prasad and “Integral ):( Reporting” (presumably the “JJ Dubray” mentioned in the article) are trying to work out some issues around versioning, REST and SOAP. This post is also referenced and commented on at infoQ.

In the 14th comment to the original article, JJ calls for a real-world example – this is a good idea which should help ground the discussion and diffuse the temptation to communicate in abstract principles. In the spirit of this request, I will describe an example based on problems I faced in a previous job.

The first version of the system we were working on consisted of a server component, coded in Java, which provided remote services to several client systems. Each of the client systems was a Java web application, responsible for providing customer-specific web pages and navigation using the services and content provided by the central server. For some customers there would be just one instance of the web client, for others with greater load there would be several.

The server system was responsible for managing products for sale, including descriptions in multiple languages, format and compatibility meta-data, thumbnail images in several sizes, prices in multiple currencies. As well as access to individual items and collections, a search facility provided a way to discover or look up products. The server also managed customer details and purchase histories, and handled both delivery of content and general messaging (by email and SMS) during the purchase process. The client systems were responsible for display and navigation of a product catalogue, customer branding, “shopping cart”, login/logout, and everything else a user experiences.

The API between client and server included ways to list products by category, fetch details of specific products, search using a variety of criteria, make and cancel purchases, fetch and update user data and so on.

I suggest this should be a reasonable system on which to base a discussion – it embodies similar concepts to many other systems, and is neither trivial nor impossible to build. Interestingly, both SOAP and REST versions of the interface between the clients and the server were implemented at different points in the life of the product.

So, on to versioning. It seems to me that there are several kinds of changes which might require versioning. I will list a few here, but I welcome suggestions for others I might have missed.

  • The first deployment of the system worked with only a single currency. The move to multiple currencies was a potentially major change in the interaction between client and server, even though each client works only in a single currency.
  • The customer for one client implementation required the provision of extra services, specific to their market, which were not required by (and should not be available to) other clients.
  • The initial version of the search facility returned data for all matches, with paging through the results implemented entirely on the client. When there was a lot of data in the catalogue this became an unacceptable performance bottleneck, especially as results beyond the first few pages were hardly ever viewed. An alternative approach was suggested where a client would request a specified page (of a specified page size) from the search results. This required changes in both the search request and search results.
  • A new source of products introduced the idea of collections. Items in a collection could be purchased individually or as a bundle. Viewing a collection while browsing, searching, or in a user’s purchase history, should allow a user to “drill in” to the collection to view the items within it. Items located while searching should indicate how to purchase the collection, as well as how to purchase the individual item.

Is this a useful amount of detail for a scenario? I have my own experiences of working with this system and the choices we made, but I’d love to read any suggestions for how you might handle any of the transitions above in a live system with multiple client systems deployed, many of which can not be changed easily or often, and a server full of historical purchase data. Procedural remoting approaches (SOAP, XML-RPC and Java RMI etc.) and resource-based approaches (REST) are all welcome.

Two good videos

Monday was a bank holiday, so I found a little time to catch up with some of the web videos in my queue.

First I watched an inspiring session from TechCrunch Nordic which likens achieving an “exit” for a startup company to dating. Fun, and with a strand of truth.

TechCrunch Nordic – Tommy Ahlers from Mike Butcher on Vimeo.

Anyone running a startup, or thinking about it, should watch this one.

Second I watched a presentation ostensibly about Kanban and “single piece flow”, but really about much wider issues in planning and managing software development. I found the approach presented particularly interesting as it correlates very well with where my thoughts are at right now.

This video is best watched at infoq, to see both the presenters and the slides

Anyone working in software development, or managing a software project really needs to watch this one.

James Carr Feels GREAT to Pair Again

I guess its is a common problem for software developers with a day job as well as out-of-hours projects, but it can be hard to get around to spending time on the out-of-hours stuff.

I read with interest that James Carr sought out someone to pair with and found it a useful and enjoyable experience. ( James Carr » Blog Archive » Feels GREAT to Pair Again. ) It occurred to me that perhaps this is what I need, and by implication, perhaps this is what you might benefit from, too.

So I have an open offer. If you like the idea of spending some evening or weekend time pairing with me, please get in touch. Obviously I’d like to make some progress on some of my own projects, but I’m also very happy to spend time on your projects, too.

There’s a fighting chance that the commitment of an appointment with someone else might get both of us motivated and productive, and that we both might learn some good stuff along the way.

What can we work out together?

Another inspiring talk from Kathy Sierra

Kathy’s talks are usually very good, and this one is no exception. This fit really well with a business idea I’m working on at the moment and prompted a whole new way of thinking about it.

Freja – a JavaScript framework for in-broswer MVC applications

This looks really neat. A small JavaScript framework for setting up and running a single-page XML/XSLT application which fetches model data and view definitions from a server and combines them using JavaScript controllers. Once the data and views are loaded the application can run with no server latency, limited only by the ability of the broswer to process XSLT and JavaScript.

Freja – CSScripting.

My personal preference would probably be for models in JSON rather than XML and a view template language a bit more developer friendly than XSLT, but this seems a good implementation nonetheless.

What Every Developer Should Know About URLs

A nice summary of the complex landscape of RFCs that define URLs. I knew the great majority of it, but the official support of “;” as a parameter separator, and the ability to have mid-path parameters as well as query parameters looks very interesting.

What Every Developer Should Know About URLs.

Using DropBox and Ubuntu One for backup

Ever since I read Joel Spolsky’s password management article from 2008, I have enjoyed using Dropbox to synchronize files between my various computers. Recently I found a page of tips aimed at using the service as an automatic backup of important files, rather than just for transfer between machines. You get 2GB of free “cloud” space when you sign up with the service, which is enough for quite a lot of stuff.

Using DropBox to backup instead of sync

The recent launch of Ubuntu One has added another cloud data service with a generous free storage limit. Although the client software only runs on Linux at the moment I’m fully expecting Windows and MaxOSX clients to appear soon. The same tricks described in the Dropbox article could just as likely be used with Ubuntu One.

Lemma – a processor to “cite” source code code in documentation

This looks interesting. A way of transitively including code examples from current, tested, code into documentation. In some ways it’s in the same vein as Knuth’s “Literate Programming” and its associated tools, although it does not quite go as far in abandoning the structure of code in favour of the structure of readable documentation.

Lemma – Introduction.

VirtualBox 3.2.0 Beta 1 released

Just yesterday I was discussing with colleagues about what might happen to Sun’s VirtualBox virtualization software. I use it a lot, and have become somewhat worried about its future now that Sun has been acquired by Oracle.

If this email announcement is anything to go by, then the future looks pretty good:

[vbox-announce] Announcement: VirtualBox 3.2.0 Beta 1 released.

Building a Twitter Filter With Sinatra, Redis, and TweetStream

I’m still collecting resources for a potential Sinatra/Redis project and this looks like a useful tutorial:

Building a Twitter Filter With Sinatra, Redis, and TweetStream @ DigitalHobbit.

How to Write a WordPress Plugin

This blog runs on WordPress, and makes use of several plugins from the WordPress plugin repository. However, the time has come for me to look at writing my own WordPress plugin.  Here’s some links I have found

How to Write a WordPress Plugin | Devlounge.

WordPress Codex: Writing a Plugin

HookPress for WordPress

WorkSnug – is Augmented Reality really the best way to find a desk?

The web is full of location-based startups at the moment, struggling to stand out in an increasingly crowded marketplace. WorkSnug seems to be one of them, pitching itself as a way for the modern “urban nomad” to find places to work. I have been in this situation myself a few times – time to kill in an unfamiliar location and looking for somewhere to plop down with a laptop and a decent coffee (and ideally a network connection) so I guess the basic idea has value.

However, the approach taken by WorkSnug seems odd, and somewhat flawed. They make a big deal of the Augmented Reality nature of their service – the ability to “look through” an iPhone screen and see labels on nearby buildings indicating the location of likely workplaces. This is just a crazy way to approach the problem. Think about it. To successfully find this sort of location using this sort of interface will only work when all of the following things are true:

  • the mobile device knows the current location
  • the mobile device knows the current direction (in 3D space, it seems!) of view
  • workplaces in the local area are registered with the system
  • the user is looking in a direction where there are registered workplaces
  • the user is near enough to registered workplaces that they can be projected on nearby architecture

Arguably the hardware and infrastructure may be able to provide the first two of those conditions, and in the (unlikely?) case that the service takes off then we might achieve the third point. But the last two are the killers. Are the WorkSnug folks really imagining streets filled with laptop-carrying execs twirling like dancers while holding their iPhones aloft just on the off-chance that they might catch a glimpse of an office with a spare desk?

Fundamentally it’s a problem with data density. In areas so densely packed with eligible workspaces that they might be visible using such an AR approach, finding one is not really a problem and the solution is not very valuable. It’s in the areas where working space is harder to find (suburbs, small towns, rural areas, industral areas, …) that this kind of service has value, but these situations are exactly the ones where Augmented Reality makes no sense.

By all means run a registry of workplaces, and show them on a map with details of how to get there, but give up on the AR, please.

Oh, and also give up on the pretending that the service is busy by scrolling a bunch of pregenerated activity messages on the home page. It’s been many times before and just makes the creators of the service look like liars and charlatans.

My pet’s name is too short

A nice little article pointing out flaws in so may of those website “security questions”.

My pet’s name is too short

In addition to the points raised in the article, I always get cross at sites which offer a set of “security” questions all of which are either (a) obvious from a bit of searching such as place of birth or first school, or (b) very likely to change such as favourite pet or sports team.

Sinatra Turns 1.0

I’m not really an eager version-watcher, but I do have a soft spot for the ruby web framework Sinatra. It’s nice to see that the Sinatra team are confident enough to give it a “1.0″.

Deceptive Simplicity: Sinatra Turns 1.0

Kent Beck on Agile and Lean for startups. A must-watch video

Kent Beck, rightly well-known for Extreme programming, Test-Driven Development and jUnit gave a really thought-provoking talk at the Startup Lessons Learned Conference in San Francisco on April 23, 2010.


Watch live video from Startup Lessons Learned on Justin.tv

If you are at all interested in software and/or startups, this is well worth a viewing.

Via Energized Work.

The Opposite of Waterfall is Pond – A Metaphor for Agile

You have to love a good analogy. Here’s one which takes the notion of a “waterfall” development process literally, and contrasts it with a pleasant day out on a serene pond.

The Opposite of Waterfall is Pond – A Metaphor for Agile | Agile Blog: Scaling Software Agility

My favourite snippet:

Eventually, we find a place that everyone agrees looks nice and we pull the boat up on shore. Our project is complete in a way that we couldn’t have predicted exactly because we’ve never been on this particular pond before. We’re ready to set out again just as soon as we’re done with the picnic. In Pond, you always have a picnic at the end of the project.

All of which makes me smile. Back when I was working on an agile project where releases were named after ducks and other wildfowl, I proposed at one point a component named “pond” (standing for “provider of necessary data”) shared by all the deployed ducks.

Ah nostalgia.

JSONView add on for Firefox

Dynamically-generated JSON is bread-and-butter to modern AJAX development, but it can be irritating and slow to pick through a compressed lump to try and work out what’s really going on. Finally, I got annoyed enough to install a Firefox plugin to “pretty print” JSON (with expand-contract handles) in a browser window.

JSONView :: Add-ons for Firefox.

In general it’s good at what it does. It would be nice to have a few more options, such as a way to tell it what mime-type(s) to consider as representing JSON, and enough intelligence to ignore common “wrapping” JavaScript such as a variable assignment.

Useful.