The right tool for the job

Everyone seems to be doing agile these days. Not everyone is being agile however.

There is a big difference between employing the rituals of agile and really applying the agile manifesto values such as having working software that users can get benefit from every step of the way. This graphic describing how Spotify build products illustrates the point:

Copyright Spotify - Negative view - a car gradually being built from chassis upward; positive view - different modes of transport from skateboard to bike to car

The image is powerful and intuitively rings true, but there are a few deeper points – possibly unintended – that are worth exploring.

The key message from the diagram is that there is more business and user benefit from having something that can be used every step of the way, and feedback from real usage will help to shape an end result that users really need.

This is an hugely significant point for agile projects, but I argue that this benefit is dependent on how well understood the problem domain and proposed solution is, as to whether this holds true, and the key thing is to pick the right method for the problem at hand.

The ‘not like this‘ approach arguably costs less if we are building a car (to deliberately take the analogy a bit too literally). Cars are a well understood product, with generally incremental improvements to a well understood design. The ‘not like this’ approach is well suited, as every single production step is focused on building a car, without distractions or rework. In the agile approach, between the later steps a significant amount of the product needs to be thrown away or reworked based on the lessons learnt from the previous step. If you’re absolutely clear of the required end product (a car in this case) in a well understood domain, and cost is a critical factor then this kind of incremental waterfall approach is arguably the way to go.

The ‘like this‘ agile approach could transpire to be less costly if the problem domain is poorly understood and the real need is unclear. Usage may identify that a bicycle does the job well enough, and avoid over-engineering (and over-pricing) the solution. Or perhaps step 4 reveals that the user really needs to use the vehicle in rough terrain; so a quad bike would be a more appropriate final goal and you can change target at this point. By comparison, if you’re building a car using the first approach, you might not discover that what is really needed is a quad bike until the product has been launched and you’re inundated with unhappy users for whom the car is the wrong answer.

To summarise: for novel and poorly understood requirements, concentrate on exploring the user need whilst delivering working software using agile techniques; for well understood deliverables and problem domains, use more ‘industrial’ techniques such as LEAN to deliver as efficiently and effectively as possible. The trick is then to identify which ‘mode’ you’re in, and also when and how to move from one mode of development to another.


Getting used to a new Mac – Keyboard shortcuts

It’s a bit of a shock to the system getting used to a Mac after years on Windows. So much muscle memory to relearn on well practiced shortcuts for instance. Keys that no longer exist. A trackpad that does all sorts of weird and wonderful things. I’ve put together a quick summary of a few regularly asked questions and things that I’ve learned that will hopefully be useful to other new mac users. This post focusses on keyboard shortcuts.

There are new keys to use for shortcuts. Going from the bottom left there are:

  • fn (function) – normally used with the f keys. By default the keys do the actions marked on them (e.g. F10 to mute), and press them with function held down if you actually need F10 in an application
  • ctrl (control)
  • alt – also called option, and with the icon ⌥ – is used in shortcuts and can be used with letter keys to enter unusual characters or accents.
    command – is used in many shortcuts

So some simple shortcuts to get going:

  • Delete – fn-backspace
  • Cut/copy/paste is the same as on windows but using command – command-c command-v etc instead of control
  • Move to end of line or start of line – command and left arrow / right arrow
  • Move a word at a time – option and left arrow / right arrow
  • Page up / page down – fn and up arrow / down arrow
  • Exit application – command-q
  • Close window (e.g. if you have multiple word documents open, this will only close the current document not all of them) command-w
  • Save – command-s
  • If you’ve maximised a window to full screen and can’t get out, escape works with most mac apps. If it’s not working with Notes / Office then command-control-f will restore it to normal
  • Lock pc – function-power. The wifi connection may drop after a while though.
  • Launchpad to open an application is F4 by default
  • Spotlight search – to search for files, applications and anything else is command-space

You can also use shortcuts for window management on Mac. This works a bit differently to on Windows. You can switch between applications, or you can switch between open windows within an application (e.g. between multiple spreadsheets open in Excel)

  • Command-tab to switch between open applications
  • Command ` (back-tick) to switch between windows within an application

To configure keyboard interaction further, go into system preferences (the cogs icon on the dock), select keyboard. In the shortcuts tab I enable full keyboard access for all controls, this allows tabbing through menus, which is familiar from Windows. You can also control a variety of other keyboard preferences here.

Some more advanced shortcuts that I use fairly often:

  • Take a screenshot to desktop – command-3
  • Take a screenshot of a selected part of the screen, to desktop – command-shift-4, then select the area to grab.
  • To move between browser tabs (works in FF and Chrome) alt-command and left arrow / right arrow

Also you can create your own shortcuts. For example I regularly want to create line connectors and angled connectors in Keynote. To do this, go to system preferences -> keyboard -> shortcuts and choose app shortcuts. Click the + symbol to choose which application it is for, then type the exact name of the menu item (e.g. Angled Connection Line) and pick your shortcut. It isn’t clear if there is any warning that you’re overwriting an existing shortcut, so it’s worth testing the ones you want to use first. I created shift command and a, l and d, for angled line, straight line and curved line for instance.


Wardley Maps

At a work event last week, I was pleased to see a slot about Wardley Maps, a technique that I’ve been reading about for a while. Wardley Maps can be used to help understand systems in a different way than just as boxes linked with lines, by including x/y axes to position each component based on its evolution and position in the value chain.

This allows a better visualisation of the makeup of they system and in particular which bits are novel and well suited to agile, and which are commoditised where a waterfall or ‘as as Service’ approach may suit better. The primary intention is for companies engaged in strategic play to consider how their product compares with competitors to then plan competitive moves, understanding the points are where they are more commodified than the competition and can attack on pricing, or open source something to disrupt the market etc. but in generally its a useful tool for understanding the landscape.

These maps have been pioneered by Simon Wardley and are being enthusiastically adopted by organisations including GDS. They are often known as Wardley Maps.

Simon’s blog is a very interesting read. A few posts for further reading:

As an aside he is quite impressed with IBM’s recent strategic play

And here’s a couple of example Wardley Maps to be going on with:


Transport for London on Apps vs. Websites and APIs

A recurring question is whether to have a mobile app, or a mobile friendly website or both. The view from the Government Digital Service is that the most important thing is to have a mobile friendly website using responsive design.

“Stand-alone mobile apps will only be considered once the core web service works well on mobile devices, and if specifically agreed with the Cabinet Office.and only to approve use of apps”.

Similarly, Transport for London (TFL) have recently posted about how they haven’t created apps, but instead have a mobile friendly website and also make their data available using APIs (Application Programming Interfaces). These APIs allow TFL’s data to be used by private companies and individuals who have created over 200 apps using this data; much more than TFL would have had the resources or inclination to create.

They’ve followed the principles of open data:

“Why open data?
• It’s public data – as a public body, our data is publically owned.
• To extend reach – ensuring as many people as possible have the widest possible access to travel information.
• For best use of the transport network – enabling choice of the most effective journeys.
• Economic benefit – the small companies who make apps with our data generate highly skilled jobs and wealth.
• Innovation – thousands of developers work on designing and building apps with our data, meaning great innovation emerges”

TFL acknowledge that the private sector will cherry-pick the easiest and most profitable apps, so they then use their website to provide a fully comprehensive set of information that is available to anyone with a web-browser, regardless of whether they have a smartphone or not.

This combination of open data via APIs to encourage private sector innovation and a comprehensive mobile friendly website to provide an overall service to all users seems like a pragmatic approach, is in keeping with the Government mobile strategy and hopefully provides food for thought for public sector (and indeed all large organisations where the ‘crowd’ will help to create innovative apps) when creating their own mobile strategies.


The HTML 5 anchor tag: download attribute

The humble anchor tag. It’s the lynchpin of the web, allowing links between pages. Surely there’s nothing to improve here?

Well, one problem I encountered today is how to put a link to a resource (mp3, pdf or similar) and make sure that when the link is clicked it isn’t rendered in the browser but instead is downloaded. It turns out that HTML5 allows us to do just that, by adding the download attribute to the link. If the attribute is set to a value, that will be the filename of the download.

To force a download:

<a href="myfile.pdf" download>Download your file</a>

To set a filename:

<a href="myfile.pdf" download="mydownloadedfilename.pdf>Download your file</a>


More on Microservices – Martin Fowler article

Martin Fowler expands on what a microservices architecture is all about.

A lot of the concepts are similar to SOA, so I’m gradually trying to understand what the practical and philosophical differences (and similarities) are. Here’s one:

When building communication structures between different processes, we’ve seen many products and approaches that stress putting significant smarts into the communication mechanism itself. A good example of this is the Enterprise Service Bus (ESB), where ESB products often include sophisticated facilities for message routing, choreography, transformation, and applying business rules.

The microservice community favours an alternative approach: smart endpoints and dumb pipes. Applications built from microservices aim to be as decoupled and as cohesive as possible – they own their own domain logic and act more as filters in the classical Unix sense – receiving a request, applying logic as appropriate and producing a response. These are choreographed using simple RESTish protocols rather than complex protocols such as WS-Choreography or BPEL or orchestration by a central tool.

Also I’ve been pondering services granularity and RPC vs the coarse grained calls of SOA. In this regard microservices seem closer to the SOA approach if anything:

In a monolith, the components are executing in-process and communication between them is via either method invocation or function call. The biggest issue in changing a monolith into microservices lies in changing the communication pattern. A naive conversion from in-memory method calls to RPC leads to chatty communications which don’t perform well. Instead you need to replace the fine-graining communication with a coarser -grained approach.

Are microservices made of the clear design principles of SOA but without all the heavyweight implementation details of SOAP, WS* standards, XML and all the rest of it. More reading needed!


Microservices by Paul Downey at GDS

Paul Downey at the Government Digital Service shares a interesting and visually appealing view of a proposed microservices architecture. The mix of web, APIs and systems of records looks sensible to me. Funny how we’ve gone from fine-grained RPC style webservice calls, to the coarse-grained services of SOA, back to ‘microservices‘ over the course of a few years (at least where I work …).

I do find myself wondering if the business function of the services that are exposed in a micro-architecture is actually much different from a well defined SOA service. Either way, being freed from the painful overhead of SOAP / WS-standards surely makes it much easier to contemplate building or integrating with a microservices architecture!

Microservice architecture


Unilever sustainability statement


An impressive environmental statement from Paul Polman, CEO of Unilever, muses on the limitations of our current capitalist approach and considers how we can sustainably build on this.

Unilever have stopped quarterly reporting of results, the drumbeat the dictates the short-termist march of the modern American corporation. They also claim to have changed from the relentless focus on shareholder value to satisfying “the demands of consumers and customers and to serve the needs of the communities where we operate”.

They close with a call to arms to other businesses to follow their lead. Impressive stuff indeed.

The Guardian also have an interview with Paul Polman exploring these themes.

In these days of the 99%, a growing equality gap, short-term outlooks in business preventing long term strategic thinking and wider sustainability challenges around resources and energy, this is encouraging to see. I hope these words are backed by actions, that the market doesn’t crucify them, and that other companies are brave enough to be the first followers


Installing IBM Worklight 6.0 on Windows 7

I installed IBM Worklight 6.0 following the instructions on the IBM Worklight installation page

Generally my focus is on web-development and on delivering a ‘one web‘ experience using responsive design to allow a website to adapt to whatever device is accessing it (N.B. the one web article is great, make sure to read it at least once!). I do recognise that there are cases where ‘mobile apps’ are preferred either for access to device features, offline behaviour or just because that is what the customer wants.

In these cases I’d rather create a hybrid app that is basically using my familiar web-technology such as HTML, CSS and Javascript, but running in a container, rather than create a native application. This allows the app to be much more portable to other platforms and also saves me from having to learn several more languages and technology stacks. IBM Worklight is a product for creating these kind of hybrid applications, building upon the Apache Cordova / Phonegap technology, so this seems like a good choice of platform to experiment with hybrid apps. Disclaimer – I work for IBM.

The instructions were mostly simple and straightforward, but I hit a couple of unexpected errors, so I thought it was worth noting them in this post.

First of all you need to download the correct version of Eclipse. It needs to be Juno 4.2.2, and it needs to be SR2. The eclipse download page when you click on Juno first of all shows only SR1 downloads which is really confusing. This led to errors later on when trying to install Worklight. This is the link you need: Download Eclipse Juno SR2 and then you want ‘Eclipse IDE for Java EE Developers’.

Eclipse then doesn’t need installing, once downloaded it just needs to be unzipped to a directory and you run the .exe to launch it. You do need to have a Java runtime or SDK installed in order to run Eclipse. One of my PCs I didn’t have to do anything here, for the other I installed the Java 7 SDK from the Oracle website

The Eclipse Marketplace allows you to install Worklight. Once Eclipse is running, go to Help -> Eclipse Marketplace, Search for Worklight and click install.

At first I got the error below about dependencies. This is the same error I got when using Eclipse SR1. This time it seemed to be caused because I had put Eclipse in a directory that needed admin access (C:\Program Files\). Once I moved it to a different directory in a less protected location the installation then went fine. I was then able to move onto the tutorials on the IBM site to get the traditional HelloWorld application running.

This is the error I got both when using Eclipse SR1 and when I had Eclipse in a directory that needed admin rights:

Cannot complete the install because of a conflicting dependency.
  Software being installed: IBM jQuery Mobile Tools (com.ibm.webtools.jquery.tools.feature.feature.group
  Software currently installed: Eclipse IDE for Java EE Developers (epp.package.jee
  Only one of the following can be installed at once: 
    Eclipse UI 3.103.0.v20120521-2329 (org.eclipse.ui 3.103.0.v20120521-2329)
    Eclipse UI 3.103.0.v20120705-114351 (org.eclipse.ui 3.103.0.v20120705-114351)
    Eclipse UI 3.104.0.v20121024-145224 (org.eclipse.ui 3.104.0.v20121024-145224)
  Cannot satisfy dependency:
    From: Rich Page Editor - jQuery extensions 2.0.0.v20130523_1421 (com.ibm.etools.rpe.jquery 2.0.0.v20130523_1421)
    To: bundle com.ibm.etools.rpe.mobile.patterns [1.0.0,2.0.0)
  Cannot satisfy dependency:
    From: Mobile Patterns 1.0.0.v20130508_1207 (com.ibm.etools.rpe.mobile.patterns 1.0.0.v20130508_1207)
    To: bundle org.eclipse.ui [3.104.0,4.0.0)
  Cannot satisfy dependency:
    From: jQuery Web Tools 1.0.100.v20130523_1421 (com.ibm.webtools.jquery.feature.feature.group 1.0.100.v20130523_1421)


Quit dreaming big and start achieving

via @zeldman

A great article
on the always reliable A List Apart on how to achieve your aims, rather than being deterred by over-ambitious goals. The to it all, paraphrasing it to keep the carrot just far enough in front of you to keep on moving onwards and upwards. Set a target that’s just about manageable if you stretch yourself a bit, achieve it, rinse and repeat.

The article includes a great example of Nishant Kothary’s experiences on the Internet Explorer team. At the time, I noticed and was impressed with the improvements in community engagement from the team: it’s interesting to hear the inside track on it.

Older posts «