Wednesday, July 16, 2008

How do new ideas spread?

I've recently been studying how we change the way that we develop software. This links in with the broader question of how innovations spread. The best-known book on this is Geoffrey Moore's Crossing the Chasm, which explores the obstacles faced by high-tech innovation.

Crossing the Chasm is an influential and readable book, generous in its acknowledgements and full of good stories, but it has no bibliography. For sixteen years I've been looking for the book that introduced the technology life cycle. Moore refers to it but never names it.

I think I've found it in Diffusion of Innovations, by Everett M. Rogers. It's now in its fifth edition. Its examples are extensive and compelling, and it has an extensive bibliography. Best of all, it includes a checklist of the key attributes of innovations. Rogers calls them
  1. Relative advantage
  2. Compatibility
  3. Complexity
  4. Trialability and
  5. Observability
These perceptions largely determine the rate at which we adopt an innovation, so anyone in the business of change needs to study them carefully.

Diffusion of Innovations is a scholarly work, and needs more time to read than Crossing the Chasm. For me that time has been well-spent.

SPA2009 open for session proposals

SPA2009 is now accepting session proposals, and some have already arrived.

If you would like to present at this unique conference you'll find the call for proposals on the SPA2009 website.

If you want to attend the conference, consider proposing a session. As a session leader, you will
  1. have fun
  2. polish your communication skills
  3. improve your profile in the industry
  4. and get a substantial discount!
You'll be helped by a supportive shepherding process. SPA shepherds are experienced presenters and many of them have coming to the conference for years. The shepherds can help you develop a successful session that takes full advantage of SPA's interactive format.

The deadline for submissions is 6pm on Monday 15th September 2008.

Saturday, July 12, 2008

miniSPA2008 and cfp for Spa2009

I spent yesterday at miniSPA2008. MiniSPA is the free one-day taster for the annual Software Practice Advancement conference. Lots of new faces yesterday, as well as old friends. It looks as if we'll get lots of new session leaders for next year's conference, which is great.

Session leaders get a significant discount; for the next conference, one of them will pay nothing! Details on the SPA2009 "lead a session" page.

If you're new to leading conference sessions, a supportive shepherding process will help you to hone your skills. Quite a few big names on the conference circuit cut their teeth at SPA.

Whether you're an expert in the making or a hardened veteran, make sure you get your proposal in soon. Submissions open on Monday, and the deadline for submissions is 6pm on 15th September 2008.

Monday, April 28, 2008

TiddlyWiki to MindMap converter

Knowledge is my stock in trade, and I use TiddlyWiki and Mind Mapping a lot.

Like all Wikis, TiddlyWiki is a great tool for capturing ideas and facts in text and linking them to other relevant topics. It's not so good at showing you the big picture.

Mind Maps (tm) are a great way of presenting the big picture, but programs like FreeMind and MindManager (tm) only show the notes for a single branch at a time.

What if you think of each tool as giving a different view on the same data? Then you could get the best of both worlds.

There's already a hypergraph extension for TiddlyWiki which allows you to see a visual representation of wiki contents but I prefer a more conventional Mind Map that I can edit.

I'm currently experimenting with a simple Python script which converts a TiddlyWiki into a FreeMind Mind Map. The converter works well for small wikis and I'm currently researching how best to structure larger maps.

The converter isn't ready for prime time yet, and documentation is minimal, but it's evolving fast. If you're interested please drop me a note ( at romilly dot cocking at gmail dot com) and I'll send you a copy.

Friday, April 25, 2008

History meme

Mom, Tim made me do it...

romilly@samba:~$ history | awk
'{a[$2]++}END{for(i in a){print a[i] " " i}}'
| sort -rn | head

106 ls
96 sudo
52 cd
22 nano
16 man
16 find
16 exit
13 chmod
12 cat
10 scp
and, on the Virtual server that hosts samba,

romilly@pc031:~$  history | awk
'{a[$2]++}END{for(i in a){print a[i] " " i}}'
| sort -rn | head
111 ls
78 cd
76 sudo
32 exit
23 top
21 ping
18 df
13 du
11 scp
11 man

Tuesday, April 15, 2008

Layers considered harmful: design to interfaces

Mark Dalgarno recently published an excellent summary of a session presented by Steve Love at ACCU.

The talk offers a critique of the traditional doctrine that architectures should be layered. Instead, Love proposes a style based on designing to interfaces. That's music to my ears: it's exactly the approach we take in our new TDD with jMock2 course.

Love's presentation is available as a pdf. The first half consists of visuals alone; the second half combines the same visuals with notes.

Sunday, April 06, 2008

Testing Hibernate-based Persistent objects without Spring

Nat Pryce just pointed me at an excellent article on Testing Persistent Objects Without Spring by James Richardson.

It shows both the integration test and the code under test.

Lots of good ideas/good practice.

Friday, March 28, 2008

Testing RIAs with WebDriver

If you need to test Rich Internet Applications from Java, take a look at Webdriver.

Things I like about it:

  • It uses real browsers to run the tests, quirks and all
  • It's got a literate testing interface based on Hamcrest and inspired by LiFT.
Here's a very simple example.It's doing simple tests on a static html site:
public class HomePageTest extends HamcrestWebDriverTestCase {

protected WebDriver createDriver() {
return new HtmlUnitDriver();

public void testHomePageHasTitleAndHeading()
throws Exception {
.with(text(containsString("Cocking and Co."))));
.with(text(equalTo("Agile Application Development"))));

This won't quite work out of the box, as there is no heading finder, but adding one is easy:

public class HeadingFinder extends HtmlTagFinder {
private final int level;

public HeadingFinder(int level) {
this.level = level;

protected String tagDescription() {
return "heading level "+level;

protected String tagName() {
return "h"+level;

public static HeadingFinder heading(int level) {
return new HeadingFinder(level);

It's fairly new, but there are now pre-built binaries available.

Tuesday, March 25, 2008

Category Theory/Haskell learning group in London

Peter Marks organised a BOF (Birds of a feather) session on Category Theory at Spa2008. To my surprise about twelve of us turned up. We discovered a shared intuition (bizarre though it seems) that Category Theory will somehow shape the next big thing in application development. Less surprisingly, we also discovered a common enthusiasm for Haskell.

We want to build on this. Most of us are based in London, or can reach it easily. We plan to meet regularly (about once a month) to explore these ideas and to help each other to learn.

I'll post more about this as soon as we have a date and location for our first meeting.

Spa2008 retrospectve

I'm back from Spa2008, and my head is buzzing.

I felt this was the best Spa conference in recent years. As chairman I'm biased, but I'm not responsible for the quality. That's down to the programme chairs (Eoin Woods and Ivan Moore) and to Andy Moorley who organised things perfectly.

I went to (and really enjoyed):
  • Mirror, Mirror on the wall - why me? Chris Cooper-Bland and Portia Tung
  • Thou Shalt Integrate by the Sweat of Thy Brow... Robert James and Eoin Woods
  • The Need for Speed Paul Dyson and John Nolan
  • Awesome Acceptance Testing Dan North and Joe Walnes
  • Spanish Guitar Recital David Harvey
  • Is Software Practice Advancing? John Daniels and friends
  • A few things I learned in 50 years of programming L Peter Deutsch
  • Big Ball of Money, Big Ball of Mud: Economics and Legacy Code Michael Feathers
  • Closing the Knowing Doing Gap Allan Kelly and Lise Hvatum
Now it's time to start thinking about Spa2009!

Tuesday, February 26, 2008

Fewer, better people

I've just read Martin Fowler's post about the Cheaper Talent Hypothesis. It's an issue that most of us have encountered.

If you're in IT, feel underpaid, and think that you're above average (as > 50% of us do), you'll have wondered why you aren't rewarded in keeping with your worth.

I suspect the main reason that good developers are undervalued is that most people think that software is easy to write. Since many IT projects fail, the implication is that we can't very good at what we do.

The conclusion is false because the premise is false. Writing good software is one of the hardest things that people do. I'd love to find some way to allow non-developers to find that out for themselves.

IBM used to run introductory programming courses which included a session called keep the alien alive. The instructor played a dumb alien who obeyed spoken instructions literally; the class had to tell him/her how to drink a glass of water. It was surprisingly hard to do, and the instructor usually got soaked. But it really brought home the fact that programming is hard.

How could we update this for the 21st century?