Introduction
A page about:
- What makes me tick: About Me
and further down some info about:
- How this site is delivered: About the Site
About Me
I'm married and have two daughters and a dog (as you can see on the home page) - we live in the Cotswolds.
My parents were both from Yorkshire (Batley and Barnsley) but they met and married in London and I started off in the South East. I was born in Sevenoaks and lived in Kent most of my young life with extended holidays in Devon - Christmas, Summer and Easter (my parents were lecturers). Sailing, fishing, kayaking and watching storms all featured.
These days I still enjoy kayaking and also enjoy mountain biking and hiking.
I am lucky enough to be in a career that I chose, to an extent control and that I still love as you can hopefully tell from this site.
My career has involved permanent and contract roles - I liked contracting for the variety, for the expectation put on you (if a contractor is no good they are typically straight out) and for the excitement of being 'dropped' into new situations.
People are often after a contractor because they have a challenging situation they need dealing with - dysfunctional team/department, dysfunctional surrounding environment, troubled projects. I have been given some challenges like this and think I have learnt a lot from sorting them out (see first principles below).
As you can see from my long running contract and permanent roles I am not afraid to commit and of course the long contracts indicate people value me. As a fairly extreme example of this not only have I had repeated renewals as a development manager but I've also been asked to stay on twice after my development manager role finished to sort out troubled projects - which in both cases I did against the odds.
Principles
Here's some principles that drive me and/or that I value...
1. Be expert in my role but also competent in the roles it touches on
I learnt relatively early on how valuable someone that can bridge disciplines. As an example one of my EAI project was stuck - we couldn't get the front end talking to the backend - the front end developer was convinced there was no problem with his code as was the mainframe developer - time passed and it was clear we were at an impasse. I brought in a consultant who knew "both ends" and within minutes some tweaks meant everything was working.
So with that in mind I have invested time and effort to become relatively expert not just in my role and the development technologies and methods used by my teams but also in related areas such as the PMO and infrastructure / networking I think with these added skills I can ensure my teams are truly effective and never get 'stopped'.
Here are a couple of examples as to how this has helped me and my teams.
Example: PMO Processes
On joining a company recently it was clear that PMs expected to have my developers allocated to them with little formality and that change to any agreed assignments was not documented - I recognised this as an issue because of my PM background and was keen to sort it out because it was having an adverse effect on the smooth running of my teams and hence their morale. I wanted to move this forward quickly and so wrote the draft process myself as my experience of escalating issues like this is that they are slow to resolve. The process would be owned by the PMO and it defined the responsibilities the PMs, PMO and resource manager had in a number of different situations. In circumstances like this I am very aware that by writing the draft process I was effectively doing the PMO's job for them - so I had to be sensitive about how I handled this so as not to upset them. I did this successfully the end result was that the process was ratified and adopted by the PMO and PMs and our management were very pleased the hole had been plugged.
Example: Networking Issues
On a development where we were moving the hosting of a mainframe payroll package to Germany we had interfaces back to UK to configure and test (and we had to be sure this testing didn't result in paying anyone!). There were, as you might imagine, issues around connectivity our people were comfortable our firewalls were configured correctly and the hosting provider was similarly assured - creating an impasse. I was relatively clued up on networking and firewalls and was able to sit with both parties and together construct and conduct tests to establish the problem. I think without my technical knowledge and determination the impasse would have lasted much longer that it did. I think also my proactive and collaborative approach inspired the teams to follow my example and work together to resolve any further problems.
2. Understand Things from First Principles
I like learning but I like to get under the covers so that I understand things from first principles. If you don't do this and something goes wrong you will be stuck. As an example if you take someone who relies on solving a problem using a formula or script and the problem mutates - the formula or script won't work and because they don't understand the thinking behind the formula or script they will be lost as to what to do.
So, for example when I took on a CMS project recently I knew (because I understand how CMS' work) that we could start adding content (eight hundred pages) to the CMS in a test environment even though we hadn't finished our design or coding. This is possible because CMSs are designed to preserve content even after coding or design changes. Obvious when put like this but requiring a mind set change if you are a non technical PM who doesn't normally utilise a test environment for 'production' content. So I altered the plan I had inherited to take advantage of this. This gave the content authors an extra month to add and tweak their content and learn about the CMS and ultimately allowed us to deliver on time. If we had left this activity until effectively UAT as per the original plan there is no doubt the project would have overrun on time (and budget).
3. Explain Why
If you want something doing or if you (or anyone else) writes a process that you expect people to adopt it's important to explain why you want that thing doing or why the process is written as it is. Without this you may not get the commitment you expect to completing the task and you may find that the process is repeatedly challenged - every time someone new reads it. I see this happening in organisations time after time. If you want a real world example of this consider all the articles in the press and the comments made and letters written when the hour changes in the Autumn - if only the original reasons for the change were readily available we could avoiding revisiting this dull topic every year or at least restrict the discussion to a few of the points in that document.
FAQs
What's your favourite joke?
A man walk into a bar with a giraffe - he orders two pints - one for the giraffe and one for him, they keep drinking for a couple of hours and then the giraffe slips from it's stool and falls to the floor. The guy gets up from his stool and goes to leave the bar.
The barman shouts to the man "Oi - you can't leave that lying there", the man glances back, as he exits the bar and says dismissively "it's not a lion it 's a giraffe".
What's your favourite (core) programming language and why?
I started of early - trying to program games in assembler as a hobby and moved on to writing Basic at school and Fortran and C at University. As a purist I loved the satisfaction of getting a fast, efficient, elegant C program fully debugged and working.
However the significant word in there is debugged - finding and subsequently debugging (often transient) issues caused by null pointers / overwritten memory was never a lot of fun.
I moved onto VB and SQL and enjoyed the relative ease of coding and the productivity that arose from that (and the way VB protected it's memory).
Things then gradually became more complicated - the beginning of EAI and the Internet saw me working on PC / mainframe client server and early B2B developments. As an application architect I designed an application framework that was used by thirty or so programmers at AXA (and that won a UWE design prize).
With the arrival of the web my cosy world of using one language had well and truly disappeared to be replaced by the plethora of technologies we now use - in some ways it seems like we have taken a step back.
Coming up to date I use C# as my tool of choice if I want to develop a web app and use VBA extensively to produce MI and the like as part of my role.
I'm quite comfortable with assisting my team through any technical issues. I routinely spot issues in seconds that have been tripping the less experienced up for hours, I can suggest ways round problems - different technologies that my developers may not know of that can move them forward, new technologies hold now fears for me and if a problem is really thorny I feel comfortable leading our efforts to replicate, understand and sort it out.
Performance issues are typically another none issue for me (I don't worry about them any more) - I understand at a application / machine / network level what is going on and am comfortable advising strategies that will increase performance.
I can understand and program in just about anything and have as you've seen on my c.v. have the highest level java certification. I think, a bit like spoken languages, once you know several languages it's easy to pick up another and I find (increasingly) the new ones are all variations on a theme.
I kind of like C# and the way Visual Studio environment protects you from the 'mess' of what it takes to deliver a web app in .NET and provides you with everything to support the development lifecycle. However, at the same time I dislike the reams of auto generated code that are produced and that seem like an accident waiting to happen. It feels a bit like the control has been taken away from you - it's also interesting to note that .NETs dominance from a few years ago appears to be being eroded in favour of java, JavaScript and python.
Anyway, what we all really want from a language is simplicity and productivity and with that in mind I'd have to pick out the relatively recent rise of python and node.js as significant.
I am working on making these my favourites.
About the Site

Hosting
This site is hosted at my home on servers within a soho server cabinet - who's idea was that????
The cabinet houses:
Netgear ADSL 2+ Modem - The gateway to the internet, giving 16Mb/s download and 1Mb/s upload.
Netgear Firewall / Router - Bridged to the modem and acting as the defender of the DMZ.
Lenovo M92 Server - Like all the servers this is running Microsoft's hypervisor - Hyper-V - this allows me to run multiple virtualised servers on each physical server. This one is within the DMZ and hosts just one virtual server which runs IIS (with ARR) on Windows Server 2012 as a reverse proxy re-writing incoming requests (URLs) for this site and forwarding those requests to the IIS web server running within the internal LAN. Companies run reverse proxies as a way of minimising the function that is exposed in their DMZ.
Netgear Firewall / Router - This second firewall acts as a gatekeeper to my internal LAN - protecting the servers in case the DMZ is compromised.
Lenovo M92 Server x2 - These are located within the internal LAN, they both have 16GB RAM and SSDs. They run as separate virtualised servers: Domain Controller, Web Server (IIS), Database Server (SQL Server), SharePoint and various flavours of Linux.
Patch Panels - One for the DMZ and one for the internal LAN.
Power Bar - So I can easily power cycle any components.
KVM Panel - Seven HDMI sockets on the left and five USB on the right link to my servers and desktop computer. Two HDMI cables running from my two monitors and a single USB cable running from my keyboard / mouse (via USB hub) can be quickly plugged in to the right socket for the right machine allowing me to interact with any of the machines and for example view output from one on one monitor whilst working on another using the other monitor. This is a far more flexible and reliable setup than using a KVM switch.
FAQs
Why did you go for self hosting when cloud hosting would be far simpler to achieve and cheaper?
I wanted to have the experience of setting up what is effectively a small datacentre (see Principle 1 above) and also to develop a site using SharePoint. Its not been easy, but I have learnt much from this exercise and am very happy with the result.
Future steps - I am, putting a copy of the site on Linux / Apache on AWS and will put another copy on Azure. I span up a Linux VM on Datacentred the other day (to look at OpenStack) and was really impressed with how easy it all is - click a button and a few seconds later you have a freshly built VM that costs pennies a day. I also installed and populated a datawarehouse on Azure in a few minutes! The setup you see to the right cost a couple of thousand pounds - so I may sell my setup and go cloud.