One way of running an agile team

At the Government Digital Service (GDS), we divide our work up into 3-month missions. We’ll give a multi-disciplinary team of about 10 people a particular problem to solve or a high-level idea of a piece of value to deliver within 3 months. We vary scope as we go, with time and resources being fixed. We build our understanding as we go, and change our approach as necessary to deliver the most value in the timebox. We’ll generally plan work to increase our understanding of what the right thing to do.

As Product Manager, my role is to make sure that we’re solving the right problems, and that we’re getting the most value from the work we do.

At the start of a mission, I set some clear overall goals for that quarter. Be upfront about what you’re not working on, so that everyone’s clear.

Work back from the end state you want to get to at the end of the quarter – e.g. migrating from one supplier to another, or launching a new feature that successfully meets its goals – and think about the things that will need to happen to get there. This will generate some milestones. You can start to build a high-level plan of what’s coming up in the quarter by mapping when you think you can hit these milestones. Do this with your delivery manager and tech lead, so that it’s sensible. It’ll change as you go, and that’s fine. I like to do this with post-its on a wall in the team’s space.

Within this structure, I like to work in weekly sprints. This means that you plan the detail of your work a week ahead. I like to run sprints from mid-week to mid-week, so that everyone knows what they’re doing on Mondays and Fridays, and those days can be kept free of meetings.

I run planning with the whole team – which is really important to build a shared understanding of the problems everyone is working on, across the disciplines. A day or two before the planning session, I’ll have a series of conversations to decide on the most valuable work to be done in that sprint. Some of these will be with my tech lead and delivery manager, others will be with the different specialisms in the team (e.g. user research, performance analysis or content design). The goal is always to check in with the big picture aims for the quarter, dive into any thorny questions we need to think about, or work to review in detail together, and then agree on what do work on in the upcoming sprint. Often this will be something already mapped out at high level, and now we start to consider the detail, but sometimes it’ll be something new.

These pre-planning conversations are a lot of fun, and a chance to think deeply about each of the disciplines in my team. They align us on goals and scope for the week – so we’re thinking carefully about how much is responsible to try and take on. In most quarterly mission teams I’ve been on, we’ve found estimating doesn’t work too well, as there’s lots of uncertainty inherent in a mission, and with a newly-formed team it takes a while to understand your velocity. So we rely more on gut feel, experience and the ability to iterate week-on-week if we felt a given sprint had too much work or not enough.

Once these conversations have finished, I’ll leave the different team members to write up cards to describe the work. I have a standard format I want cards written to – they need to have a ‘What’ and a ‘Why’ that anyone in the team could understand. But I don’t need to write the cards myself – it’s good practice for people to be able to communicate about their work, and it saves me time. If someone is struggling with writing cards to this standard, I’ll take the time to pair with them to iron this out.

The goal of writing these cards is to inform a robust planning conversation. Going into the team’s weekly planning session, we want clear goals and alignment on the big picture from each of the specialisms. The goal of planning is to think through the complexity of the work as a team, to really flesh out the detail of the cards – adding acceptance criteria, or thinking about how we might tackle a thorny technical challenge. But it’s also to build a shared understanding of what the other disciplines are working on – in a time-efficient way.

Ideally I’ll introduce some goals for the sprint, covering each of the specialisms. Probably tied in to the milestones for the quarter, that get us to our goals.

Once I’ve introduced the overall goals, and we’ve nuanced them if we need to, then we go into talking through the individual cards. I usually invite other people to introduce their own cards, and then I make sure that there’s a good quality converstaion on each card – making sure that by the end of the discussion we understand the value we’re trying to deliver, and have thought about the approach we want to take.

So this session is about sense checking, challenging, thinking about approach – but isn’t proscriptive about approach. The person who decides to work on the card takes the lead on that, calling on others for support if needed. Planning is very useful for being proscriptive in defining quality, and in adding acceptance criteria to a card. As with planning overall, making sure we know what we need to do is more important than how – the how is worked out in the ground.

How to create review apps in Heroku from Gitlab

A review app is a temporary application created to help you review in-progress code changes. You’ll use a review app because you’re working on a code branch and want to see what the changes will be like in a production-like environment, or because you’re reviewing a pull or merge request from someone else.

Gitlab doesn’t explicitly outline how to setup review apps with Heroku, but the Heroku API is well-documented, and it’s quite straightforward to get this up and running. You’ll need to set up a few environment variables. And make sure that the length of your branch name and your project name is no greater than 29 characters (heroku has an app name length limit).

To create a review app:

  1. The interesting things happen inside (Inside start_review_scripts.bash)
  2. Create a new app with a URL derived from the name of the code branch
  3. Get the right git branch, then push it to heroku.

YAML section on creating a review app in heroku via its API

To delete the review app:

  1. Delete the app

code snippet to stop review app. Use the hyperlink to access the full snippet

View this build pipeline in full.

Don’t worry about starting with a blank canvas

When starting a new project/product job, I used to worry about starting with a blank canvas. Now I’m more alert to the challenges of established systems.

Earlier in my career, when starting a new project I’d wonder: Where will I begin? How will I set up the right structures, ways of thinking?

In practice I’ve found that generally you inherit structure, process, documentation. And even if you don’t, you will come in to an established culture with a set of expectations and values (which you likely won’t fully understand straight away).

So actually the challenge is generally more about understanding what’s been done already and why, and working out what needs changing.

I’ve come in to organizations and been initially relieved at the structure and scaffolding in place, only later to realise that there might actually be some quite big problems with those cultural norms or established processes.

Did they start with user needs?
Is their conceptual approach to procurement the right one?
Are the governance ventricles predicated on the right foundations?
Are there cultural warning flags associated with some of the ways of working?

Worry less about what is missing and more about what is present but wrong. Your toolkit of techniques will help you build anything that is missing – the bigger challenge is assessing, challenging and changing what’s already there.

10 tweet summary of NFP Tweetup 32 – Getting off to a good start

Here’s a 10 tweet summary of last night’s NFP Tweetup. I wasn’t actually able to attend the event, but that’s no barrier to summarising the best material from twitter 🙂

Innovation and failure – Luke Williams, RNLI

Set up organisation-spanning structures to keep an eye on trends:

Formal approval processes often take longer than tech implementation work:

How to decide whether to jump a trend:

  • Where is this trend in its lifecycle? Has it peaked? Which other organisations have taken part?
  • Can we relate it to our organisation?
  • What time/resources do we need to make it happen?
  • How do we make it authentic to the trend?
  • Does taking part present any risks?

RNLI are using chatfuel.com to build a Facebook bot.

Tips for getting buy-in for an idea:
https://twitter.com/LondonKirsty/status/823963605737607168

Writing a digital brief – Jonty Sharples, Hactar

Headline structure for a digital brief:
https://twitter.com/MrNathanMurray/status/823966911654404096
Start with the user need and then think about the product. Not the other way round.

Digital Transformation approaches and language – Joe Freeman, Breast Cancer Now

Some resources on transformation recommended by Joe:

View story at Medium.com

View story at Medium.com

Eat Sleep Work Repeat podcast

Transformation but not as you know it…

Digital transformation is mostly about culture and ways of working, not technology

Tactical tip: fundraising events teams are usually very receptive to new ways of working to help them reach their goals:


(This has been my experience too.)

Two tools for measuring how well your organisation is doing digitally:

Digital Maturity Matrix

A spreadsheet to assign jobs to sprints

If you’re following an Agile project management process, and know your development capacity, I’ve made a spreadsheet that automatically assigns a prioritised backlog to sprints, and gives ETAs for each job. You’re welcome to download this semi-automatic-sprint-planning-spreadsheet. (ODS format)

The spreadsheet uses a macro to automatically allocate jobs to sprints.

You need to tell the spreadsheet:

  • How many hours each job requires. (This could be changed to story points if that’s how you work.)
  • Your prioritisation of work – i.e. you need to rank the jobs in descending priority.
  • When your sprints start and finish; and how many hours you have in each sprint. (There’s a separate tab for this)

This spreadsheet could make your life easier by:

  • Saving you time allocating jobs to sprints.
  • Saving you time in updating information when details change (e.g. you add new high priority jobs and want to see how this affects the eta of various pieces of work)

The spreadsheet allows you to answer questions like:

  • When will job X be completed?
  • Is it worth expediting estimation of this small job so that we can fit it in to the next sprint?
  • Why aren’t we working on job Y yet?

If you know the number of hours (or story points) required for a job, and you have an ordered prioritisation, just press the button and jobs will be assigned to sprints.

The basic logic is: For each sprint, start from the top priority job that hasn’t yet been assigned. If there’s room, put this job in this sprint, reduce the number of hours available in the sprint, and write down the estimated delivery date for that job. Then look at the second highest priority job and see if there’s room for it in the sprint. Keep going down until you run out of hours remaining in the sprint.

Then move on to the next sprint, and do the same thing again. Continue until you run out of sprints.

This tool can help when you have a large backlog of development work. The ideal is, of course, to not have a large backlog. A backlog of development work incurs inventory costs: Understandings of requirements fade, developers move to different tasks, internal stakeholders have to be kept updated, motivation and excitement around each job diminishes.

This spreadsheet is shared under the MIT License.

How to view the number of unique visitors to a page, or set of pages, in Google Analytics

You can see the number of unique visitors to your site as a whole in Google Analytics’ Audience report. But if you go to Behavior > Content Drilldown, to view a particular page of set of pages, you can only see “unique page views”.

Unique page views is a different measure to unique visitors. What a nuisance.

So the solution is to create an advanced segment in the Audience > Overview report, which includes the pages you want. (Inspiration taken from this comment by Rendy.S)

Let’s say I’m interested in the information section of the www.mind.org.uk website. All of this content lives inside the /information-support/ section.

So If I wanted to create a segment to look at unique visitors to this part of the site, I’d use a regular expression like this: /information-support.*
The . and the * at the end combine to mean “plus any number of any other characters”. i.e. this will match any URL that starts mind.org.uk/information-support

regular expression example for a site section segment in google analytics

So if you ever want to view the number of unique visitors to a particular page or pages in your website, create a custom segment and user regular expressions to target the page(s) you’re interested in.

Can I embed tweets in emails? No, because of JavaScript and iframes

A tweet is an individual message posted by someone inside the twitter social media platform. An embeddable tweet is a version of this message that can be copied and used outside twitter. Embedding tweets is a great feature, allowing conversations and ideas to be spread beyond twitter’s walls, and is great for curation and analysis.

But the way that twitter have constructed this feature means that you can’t embed tweets in emails.

Why is this? You can’t display embedded tweets in emails because embedded tweets require:

  1. JavaScript
  2. iframes

Both of these features are blocked by most email clients for very sensible security reasons.

So an embedded tweet that should look something like this:

… ends up looking like this instead:

#ed473 this is really thought-provoking. @anildash on gender privilege & social networks: The Year I Didn't RT Men. https://t.co/qZXGCdv545

— Bonnie Stewart (@bonstewart) February 13, 2014

This isn’t nearly as useful or pretty.

So what can I do instead if I want to embed a tweet in an email?

Lots of people simply share tweets by taking a screenshot of the message, and then pasting it to wherever is needed – eg into a powerpoint presentation.
This solution could work in the context of sending an email: take a screenshot of the tweet you’re interested in, trim to size, upload somewhere, and add in to your email. For extra credit, make the image a hyperlink to the original tweet.

This solution isn’t ideal – it’s manual, laborious, and cannot be easily automated. The information about the tweet will become outdated as more people share or retweet it, or reply to it. Worse, it’s not possible to actually interact with the tweet in this setting, nor is this option at all accessible (unless you are very diligent with your alt text).

Okay then, come up with something smarter

I haven’t created anything better, I’m afraid, but here’s one idea to investigate:

If our aim is to take the useful features of embedded tweets – aesthetics and functionality – and to get them into email, I think that Twitter’s “Do you know…” emails could help:

a screenshot of an automated email from twitter suggesting some accounts I might want to follow

You could take the inline HTML from these emails (I’ve copied the HTML code here) and use them to style up embedded tweets in an HTML email. You’d need to check in with twitter’s brand policies though, as this may not be within their terms of use.

3 quick points I learned from Google’s Digital Analytics Fundamentals course

Google’s Digital Analytics Fundamentals course started gently, introducing some good overall concepts about measuring objectives, but soon ramped up the difficulty so that experienced users would probably learn something too. Here are three things I’d like to share with my team:

  1. A “bounce” is a session with only one interaction. Bounce visits are assigned a time on page and a visit duration of zero.
  2. Goal conversions can only be counted once per visit. Ecommerce transactions can be counted multiple times per visit
  3. Visitor flow behavior report can show you events as well as page views.

Some user experience information streams I’ve subscribed to today

Today I’ve spent some time reviewing which RSS feeds I subscribe to. I’ve decided that I’m missing out on user experience material. So I’ve been hunting out some streams of UX inspiration and ideas.

I’ve added the following feeds to my RSS subscriptions, and will be reviewing their usefulness over the next couple of months:

  • Smashing Magazine UX design category
    Feed address: http://rss1.smashingmagazine.com/feed/?f=uxdesign-std
     
  • UX Magazine
    Feed address: feed://feeds.uxmag.com/uxm
    I’m slightly wary of this one – will the content just be stripped down teasers for paid material? Will the focus be too long-form and specific for my needs?
     
  • Gizmodo’s user experience tag
    Feed address: http://gizmodo.com/tag/user-experience/rss
    This one was a little harder to find the RSS feed for. I didn’t have to do any filtering like I’ve done with other RSS feeds, but I did need to manually work out the URL. I followed this guidance to generate the URL I needed – you just need to put /rss at the end of the tag’s URL.
     
  • UI Patterns
    Feed address: http://feeds.feedburner.com/UI-patterns-com
    UI design patterns are standard solutions to common design problems. This site discusses them and also collates examples.
     
  • Elements of design
    Feed address: http://feeds.feedburner.com/ElementsOfDesign
    A showcase of different design patterns. The RSS feed itself shows latest additions to the example gallery.
     

How to embed a flickr tag slideshow on your website

If you have a set of photos uploaded to flickr, all with a certain tag, here’s how to display them in a slideshow on your website:

The steps outlined in the video are:

  1. Head over to flickr.
  2. Go to your photostream, and click on one of your photos that you’ve tagged with the tag you want to display.
  3. Scroll down, then click on the tag you want to display in a slideshow – eg dailycreate.
    http://www.flickr.com/photos/martinlugton/tags/dailycreate/
    ie http://www.flickr.com/photos/YOUR_USER_NAME/tags/A_TAG/
  4. Manually add “show/” to the end of the URL (without the quotation marks).
    So in my case, the URL I want is: http://www.flickr.com/photos/martinlugton/tags/dailycreate/show/
  5. Go to this link, which will load up a slideshow.
  6. Click on ‘Share’ at the top right, then click on ‘Customise this HTML’.
  7. Specify the width and height options if you want to, then copy and paste your code onto your website.