Mark is a graph advocate and field engineer for Neo Technology, the company behind the Neo4j graph database. As a field engineer, Mark helps customers embrace graph data and Neo4j building sophisticated solutions to challenging data problems. When he's not with customers Mark is a developer on Neo4j and writes his experiences of being a graphista on a popular blog at He tweets at @markhneedham. Mark is a DZone MVB and is not an employee of DZone and has posted 553 posts at DZone. You can read more from them at their website. View Full User Profile

Developer Experience (#devexp) and the 5 minute experience

  • submit to reddit

My former colleague Ade Oshineye recently linked me to a post he’s written about Developer Experience (#devexp) which is described as:

[...] an aspirational movement that seeks to apply the techniques of User Experience (UX) professionals to the tools and services that we offer to developers.”

I think it’s quite an interesting idea and I particularly like two of the ideas suggested:

2. Focus on the ’5 minute Out Of Box experience’

The idea here is that if you provide a library, developers should be able to go from downloading to “Hello World” in 5 minutes.

4. Try to “design away” common problems rather than documenting workarounds

For instance if your users struggle with getting OAuth working then create abstractions that handle it for them rather than documenting the 6 most common problems or writing up the ‘simple 12 step process’ for getting it working.

I’ve written before about the value of the ‘checkout and go‘ approach for helping new developers get their machine setup and I think the aim should be that a developer just has to execute one line on the terminal and it should take care of everything.

This applies to more than just the initial setup of the environment. We should be looking to automate tasks which have a lot of manual steps and are therefore prone to error.

On a project I worked on last year it was taking people several hours to get their local Solr instances setup with production like data because the data needed to be retrieved from 4/5 different locations and then run through different extraction scripts.

Scripting all this helped to save a lot of time and it was actually quite fun to see it all getting setup automatically in front of your eyes.

One of the common things I see is people writing steps on a wiki for how to set something and giving links for where various artifacts can be downloaded from.

It’s much more useful to script that type of thing!

curl and wget give us a quick and dirty way of downloading artifacts and of course we can use Chef or Puppet if things get more complicated.

Despite all this automation there’s always seemed to be one manual step whereby the developer would have to go and download the setup script from a wiki or be sent it as an email attachment.

I came across a couple of neat ways of getting around this on two open source projects.

RVM makes use of process substitution to send a shell script to ‘bash’:

bash < <(curl -s

While Janus achieves a similar affect by piping to ‘sh’:

curl -o - | sh

We’re looking to do something like this on my current project so that setting up a new machine is as simple as running one line from the terminal.



Published at DZone with permission of Mark Needham, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Kathy John replied on Tue, 2012/02/21 - 1:12pm

The 5 min Hello World is great, our first impression with a new library will last. Abstractions are a nice idea as long as the number of possibilities is limited.

Can you say something else about the uses/misuses of Solr? I was reading about it some time ago and I was wondering if it would be a nice search tool to control the large number of documents I have currently scattered in my disk. Solr could be used for library management?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.