Monday, 26 March 2018

The Continuous Delivery Maturity Matrix

The Continuous Delivery Maturity Matrix is a yardstick which against which you can measure your current processes. Ultimately this equates to how well you are able to deliver your projects.

Why is this a good thing? Well, once something is measurable, it is actionable.

The Matrix is split into rows (Quality Levels) and Columns (Aspects of Delivery). You should be able to give a Quality level for each Aspect based on your current development life-cycle. This can help us to understand where our weak points are, or why we may be unable to deliver consistently.

Image result for continuous delivery maturity
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
by Jez Humble and David Farley

The following is an extract from a piece that I wrote in 2012.

Delivery had been a big problem for us, but the matrix helped us to understand how we could make the delivery process more reliable and robust. I took a copy of the matrix and marked where we were against it (see above). Something had to change, and the matrix helped us to identify the adjustments that we we could make and also helped us to use an appropriate language with our line managers. Where we were regressive, we would take action to become repeatable. Where we were repeatable, we would take action to become consistent, etc.

Our improvement would not have happened without measuring against this matrix. It is my belief that after every project delivery we should grade ourselves against this matrix as part of the project review, learn the cause of failure and create actions to address this in subsequent project deliveries.

Please take a moment, have a think about your latest project delivery, grade against the matrix, and have a think of how it could have been less painful.

Remember, when it comes to software delivery: "If it hurts. Do it more frequently".
Understand the pain and address it.

Two books that should be on your book shelf.
Continuous Delivery
Continuous Integration

Sunday, 21 January 2018

Moving Xamarin's Android dependencies off your Primary drive

The other day I wanted to get the latest android SDK, but due to insufficient space on my primary drive this failed.

What follows is the process by which you can get from this situation into one where you can have as many SDKs and Android Virtual Devices as you want (as long as you have somewhere other than your primary drive to park it).

First, make sure you are fixing the right problem.

Just because our drive is too full to accommodate any more SDK artifacts or create a new AVD, that doesn't mean they themselves are to blame. So let's find out before we go any further.

Running a utilities like WinDirStat, TreeSize (etc) will quickly show you what your disk fillers are.
For me the biggest culprits were the android SDK and my AVD's (hence the blog post).

Moving the SDKs

Moving the SDKs is pretty straight forwards, in your IDE you will find the settings for Xamarin, including the location of the Android SDK's.

Visual Studio - Options menu.
  • Go to this location and copy the Android folder (containing the SDKs) to your secondary drive.
  • Update the reference in your IDE.

Once done, you should see that when you open your 'SDK manager'. The being used should now be the new one that you defined in the previous step.

  • Delete the original Android SDK folder from your primary drive, to free up some space.

Moving the AVDs

Let's see if we can make more room by moving those AVD files...

  • Add the following key to your environment variables
  • Assign it a value of where you would like your .android folder to live, eg.

If you want to use your existing devices, copy your existing .android folder from your primary drive to this location.

This variable will kick in after a restart.
You can verify that this change has been applied by Opening your AVD manager from Visual Studio and looking at the address at the top line.

Monday, 28 March 2016

The NDC Experience

Back in January, I was lucky enough to go to NDC in London.

This was a great experience, and one that I would recommend to any of my colleagues. So, to give them an idea of what it was all about, I gave a presentation on it. This presentation, including a Q&A session, lasted for 45mins, and was designed to pass on what I learned from going to NDC. It wasn't recorded, but I'm happy to share the slideshow (link below).

It was also a nice opportunity to use Prezi

Tuesday, 6 October 2015

Send me a picture, so I can remember


Sprint retrospectives are important. This may sound like I'm stating the obvious but please make sure that you have concise retrospectives.

The big benefits of a good retrospective include
  • Getting honest feedback on the progress of your project. 
  • Gauging the teams mental state. 
  • Strengthening relationships between the team members (after all, we are in this together).
If you are organising the retrospective, your biggest job is to help people to give open feedback. You can do this by creating an environment in which they are comfortable and giving them tasks that help elicit the information as opposed to directly asking for feedback on the sprint.

The following exercise describes one of the methods for garnering feedback.

Postcards from the Sprint

  • Before the retrospective
    1. Get (or make*) some postcards. Try to use a wide selection of destinations, 10 postcards of the east coast is not a good selection. 
    2. Get (or make**) some tokens. Make sure that these are easily identifiable (eg. Monopoly pieces).
  • In the Retrospective
    1. Ask all member of the retrospective to choose a token.
    2. Spread out the post cards on a flat surface.
    3. Ask the members of the retrospective to place their token onto the postcard that they 'feel' represents the sprint that we have just completed.
          - Wait for everyone to place their token - 
    4. Choose a token (not a person***) and ask who that token belongs to. Ask that person to describe in what way they feel that that postcard represented the sprint.
    5. Remember to say thank you. 

Why is this a good exercise

  • The postcards act as a starting point, whether that it is an association to the place, geography or a metaphor, the person is grounded by the selected image and merely needs describe a context.
  • Everyone gets to express an uninterrupted opinion and comment on the sprint.
  • The tokens are ambiguous, and therefore the running order is random.
  • Members choices are 'locked in' so there is no playing follow the leader when they are expressing their feeling.

Retrospectives should not feel like a chore and it is not a cull-able step in the process. So keeping people engaged at this stage is important. we've managed it all sprint and by Jove we'll keep them engaged in the retrospectives too!!

* How to make a postcard: Find a royalty free picture, resize it, print it, cut it out, laminate it.
** How to make a token: (see 'How to make a postcard' above).
*** Not a person: We want to disassociate any feeling of singling out, identifying or alienating individuals when eliciting unbiased feedback, hence the tokens.

Saturday, 27 June 2015

When is a valid win32 application, not a valid win32 application

What happened

Recently I've needed to upgrade an application to use 4.0.3 of the .Net Framework. The upshot of this was that the application was no longer XP compatible.

Not a valid win32 application

This was un-expected, there isn't a compatibility issue with XP and this version of the framework. However, upon inspection, the compiler had marked the application as being for Vista OS onwards. Explicitly set this to XP and the application is once more a valid win32 application.


This is how it was done.

  1. We inspected the application.exe header using dumpbin. This is a Visual Studio command line utility.
  2. Here we could see that it was targeting /subsystemversion 6.00 which is Vista, considering the change we made, this is neither desired or required. Ideally we would ask the compiler to mark this correctly for us, but msBuild doesn't expose this switch. So instead we would need to change this post compilation.
  3. So we added a build step to adjust this flag after compilation. For this we used editbin. Another Visual Studio command line utility. To set the

    editbin.exe "$(TargetPath)" /SUBSYSTEM:WINDOWS,5.01 /OSVERSION:5.1

You can use DUMPBIN to examine COFF object files, standard libraries of COFF objects, executable files, and dynamic-link libraries (DLLs). You can start this tool only from the Visual Studio command prompt. You cannot start it from a system command prompt or from File Explorer.

You can use EDITBIN to modify object files, executable files, and dynamic-link libraries (DLL). You can start this tool only from the Visual Studio command prompt. You cannot start it from a system command prompt or from File Explorer.

Specifies the minimum version of the subsystem on which the generated executable file can run, thereby determining the versions of Windows on which the executable file can run.
Specifies the execution environment that's required by the executable image.


Monday, 18 May 2015

Setting up

Whether you are setting up a development workstation or swapping jobs, you probably want to make sure that you have all of the gadgets and utilities that make your work life easier which may not be on the default machine image supplied to you.

That is where posts like this come in. You'll find that most development blogs will have a post of this nature, where the author lists some of the cheap or free productivity tools that they have found useful.

Here is my list.

It's like notepad but better; tabs, tab persistence between sessions, find in all tabs, and that's just the tabs!! You can even define your own language syntax to create custom document highlighting (if you want).

Resolve sharing violations by removing a troublesome lock that another process has on that file. For example: "Hmm, I can't delete this folder, and even though nothing and no-one should be using it." - Unlocker to the rescue, albeit a dangerous and crude one. If this sounds abhorrent, try investigating the issue using ProcessExplorer (mentioned later in this post).


Okay so you'll have this one already, but non-web-devs often forget about it. Press F12 when you are using your web browser and you'll find a whole range of tools here for the web developer. From performance monitoring to browser emulation, JavaScript debugging and CSS editing. There are so many useful items in here that people often neglect.

Provides a GUI for Windows Installer packages. Not only does this tool highlight validation issues, it also allows you to edit and save the new package.

This tool will parse your Windows Installer log files to help you identify issues with the installation and suggest solutions. It beats the hell out of searching for 'Return Value 3'

A lightweight XAML WYSIWYG editor. Keep things simple.

Compresses to 7z, TAR, ZIP and more, Extracts from 7z, TAR, ZIPm RAR and many more. If you've never tried it, run a comparison between the compression ratio of 7z compared to ZIP, you'll be pleasantly surprised,

This is a great productivity tool. It'll be interesting to see how quickly the new .net compiler helps the Visual Studio community close the gap, but at the moment you'll want to be using this plugin.

Decompile dot Net assemblies to C#. Sometimes we all get a little bit nosey.

Historically the Microsoft Windows search isn't very good, but this flexible tool will quickly search for files matching your search pattern.

Another from BareMetal Software, this time a log file parser. This tool will show log entries in real time, highlighting different types of entries based on keywords.

ASoft - DotNetVersion
An easy way to find out what versions of .net are being used on a client machine. The beauty of this tool is that the clean interface means that any tom, dick or harry can use it and even download missing versions directly.

An easy to use file and folder differencing tool. Run a comparison against up to three directories for differences or missing artefacts. Drill into files to analyse the differences.

Find out about a process currently running on your system. Target processes with the cross-hair or search the running processes to find out the ID of your target process, and what resources they are using on you current system. If you didn't like the Unlocker utility, mentioned above, you may prefer this tool as a means for finding what process has a lock on your file.

Create and manage powershell scripts

And if that list has whet your appetite; checkout Scott Hanselman's list, it's much better than this one :)

All items listed are downloaded and used at your own risk. I have not been involved in the creation or hosting of any of these utilities and cannot make any guarantees over there safety. Please review all terms and conditions on the named applications and licensing before installing.

Thursday, 7 May 2015

Sorry about that...

I decided to change employers, which has kept me a little bit busy.
Now that is done, and I'm settled in, I'll continue blogging.

ps. If you're voting today, vote for the good guys.