Contracting.. work.

I don’t like change. There, I said it. Never liked it much before and definitely not keen now.

But 2020 had other ideas.

Firstly, let me be clear – I’m writing this from a completely neutral, no prejudice point of view (you’ll see what I mean in a minute). I’m quite calm, supping a coffee and reflecting from a what feels like an objective point of view.

All that said, 2020’s first kick in the balls was being made redundant in March.

In the middle of a global pandemic.

Yeah, “thanks”.

Luckily, I went straight from being a permanent (ha!) employee of 13 years straight into being a contractor quite literally over night. Thank feck. There were a couple of weeks where I was sending out CVs and dealing with, shall we say, less than up front recruitment agents. But I was lucky. Despite not spending years cultivating a support network I managed to reach out someone who knew (of) me, and after a chat and a coffee (remember those?) we agreed a contract for work for what as been ten months now. It’s been fantastic. Great, local client and I think I’m adding a lot of value there.

But as with all contracting, nothing is certain, and I’m currently waiting for what I hope will be a contract extension.

Again, rather luckily, I was contacted by someone whose path I’d crossed back in 2019 and long story short I’ve started working with them too.

During all this employment change and worry I had my priorities readjusted when my daughter tested positive for COVID. Thankfully she was fine, temporary loss of smell and taste aside, and has subsequently flown the coup and started university. But it was a good reminder of what’s important.

This isn’t my first time contracting. I did it many years ago, for about 18 months. It wasn’t as much of a change then as I went from being a ‘big four’ consultant working on site for a local authority client to contracting directly with the client. With the blessing of the consulting Partner involved who quite elegantly said “There’s no point being a dickhead about this, as long as you don’t bad mouth us to the client I have no problem with it.” In theory I wasn’t allowed to leave then work for a current client, but I had no reason to bad mouth anyone, and as he said, I was leaving anyway so why not do it in a way that kept everyone happy.

Contracting feels a bit different this time around though. Last time I used an umbrella company who sorted out my tax and so on. Whilst not being as tax efficient as other approaches, it made life easier for me and kept things relatively normal. This time though, I’m set up as a sole trader for one client and have a limited company for the other. Not my choice, but it’s how they each wanted it arranged. So I’ve set up a limited company, a few bank accounts and spoken to an accountant. It’s all pretty straight forward actually. All I have to do is keep track of my work and send out (and occasionally chase) invoices.

Making things much easier are the facts that my clients are great, the work is varied and interesting and it feels like I’m adding more than enough value to warrant my rates.

But the biggest change is in how I feel. Rather strangely my stress levels seem to have dipped. My heart rate is about 10bpm less than it was this time last year and I don’t think I feel any work stress (other than ensuring there is some). Looking back, there was a constant stress that had been building for a year or two. Changes in my previous employers organisation chart resulted in a shift in my role and who I reported to. Based on my subsequent ejection I think it’s safe to say that neither of us was enjoying that particular arrangement.

But take all that away and it becomes a much more honest relationship. Does the client want to make use of the skills I have, and do they think I’m worth the money? It’s a simple, transparent arrangement which leaves a lot more mental capacity for getting the things that matter done.

Three Years

They say that 80% of success is just showing up.

It’s been almost three years since the last entry here which is stretching the notion of ‘showing up’ a teeny bit.

Needless to say, a lot has changed in the last three years. At one end of the scale we’re in the midst of an awful global pandemic and, at the other, I’ve changed jobs, our daughter has gone to university and the games loft has been completed.

Along with many others now faced with the increased sense of isolation owing to Covid, I’m hoping to reignite my blog in an attempt to feel a bit more connected with the outside world.

Software to Business

This article started as a rant (no, me?) about software development being too complicated nowadays and how the kids should get off my lawn. But it turned into more of an exercise in self reflection…

Many, many moons ago when I starting programming, the number of hops between me and the CPU was only two or three. When playing with Z80, 6502 or 68000 assembly language I had a small bunch of commands, a book that described the CPU and other chip features and how to poke them to get results and that was about it.

The skill was in being efficient, in working out how to build complicated things with simple tools. For example, if your chip doesn’t have the ability to multiply how do you do it? By using a combination of looping round a ‘add X to Y’ a number of times or by shifting the binary bits to the left which multiplied the number by the power of two for each shift made.

It was comforting to know that all the information was there in front of you in those couple of books and if you couldn’t work something it out it wasn’t because there was some piece of information missing. It was down to you.  With no internet.

Back then it felt like it was possible to truly understand the environment you were developing in. The commands were simple and well documented. And didn’t change. The computer architecture and chips available to command were also well documented and unlikely to change.





Aside – It’s just dawned on me that this is probably why whenever I start learning a new technology I always try to start as far down the stack as possible. Which is hard work given the number of layers everything has nowadays. It’s dependancies all the way down.

Peering over the top of my rose tinted specs for a second I can see that it took an age to write anything and it was hard to debug stuff. But things started simple and worked up, rather than starting complicated and getting ever more complicated as you tried to resolve things down to the metal.

Fast forward to today and I’m currently developing a project using the fairly standard Microsoft .NET web stuff with a SQL database at one end and ASP MVC at the other, and about half a dozen intermediate layers in-between.

The problem as I see it, is that each layer is in itself so complex that it could be a specialism on its own, yet to build anything useful needs a degree of competency in every layer.

Starting with the database I need to come up with a sensible data model that at least raises an eyebrow at the 12 rules of Codd and won’t hamper things later when it comes to saving and retrieving data. Then I need some way of reading and writing the data so I chose Microsoft’s Entity Framework ORM, and a sprinkling of LINQ.

Next my application needs some overall approach to using data objects, so do I use the repository pattern or not? What about dependancy injection to allow for unit tests etc.? There are loads of choices there too; Ninject, Castle Windsor, new built in stuff in ASP Core? Again, there are many books on each individual option.

What about the web stuff? I kept it simple and used the standard MVC Razor HTML templates, based on the Bootstrap library. CSS? Sure, but do you want to use LESS, SASS, or whatever the newest tool is for building it? What about being responsive – you know, so it adapts to smaller mobile devices automagically? Best go read up on that too.

Javascript, a language in it’s own right is unavoidable. But if that’s too concrete for you, how about coffeeScript or TypeScript that are their own languages but ‘compile’ into javascript? Again, there are many books and online tutorials in each and every option within each layer.

And so on.

Oh, and if that’s not enough, what about hosting in the ‘Cloud’? Solutions like Amazon’s AWS or Microsoft’s Azure could help, but each one is a career in itself with associated books, courses and conferences. If you know it all by now, don’t forget the container options like Docker or the concept of ‘serverless’ code which has already become out dated in the time it took me to type that, being ousted by FAAS. (Functions as a Service).

And that’s skipping a few layers and options along the way, including the language itself, C#. And the IDE Visual Studio.

And then factor in the notion that each option within each layer has it’s own development cycle which can mean monthly releases to keep up with across all of them.

And it’s not limited to web development. I did a bit of iOS coding a while ago, initially drawn to it by the fact that it was a smaller domain with a known, limited set of target hardware. (I think it was around iOS6 that I started). Now that space has exploded in complexity with numerous device capabilities and sizes, operating system functions and library APIs. There’s even a new language, Swift, to learn.

I’ve been pressing buttons for a living for long enough to know I’m never going to master each option within each layer. There’ll always be someone who’s spent more time focusing on a particular option and will make me feel dumb about it.

Instead I spend time keeping up with the bigger picture. In my job as part developer, part sales, part solution architect I can use all my button pressing experience to help de-risk our projects and work on the bigger techie / commercial pictures. Whilst I’m doing that I can take comfort in the knowledge that those developers who have more experience of the details within each layer will do a better job of those aspects than I could.

Thinking about it as I proof read this article, it seems like I’ve got from one end of the software business, namely the machine code, all the way to the opposite end; the business. Software->Business, if you will.

To illustrate the change, here are the books I’m currently reading.


Under(steer) Control

After playing Gran Turismo Sport with six-axis tilt steering on the PS4 controller I was impressed at how well it compared to using my Logitech G29 steering wheel. Great I thought, I can play Project Cars 2 downstairs on the sofa and not have to re-arrange my office to set the wheel up all the time.

Then I tried to actually play PCars2 like that.

Jeez, how can it feel so bad compared to GT Sport?

And so began the long and tedious process of changing the settings, trying it out, swearing, going back to the options, tweaking again, saving, trying… repeat until rage quit. Wait a few days then start again.

I spent ages doing this. So long in fact that a game update was published in the meantime ( that added a new option – Opposite Lock Assist.

After much reading and experimenting I found out two things…

  • The opposite lock assist is related to the Speed Sensitivity setting. (Ok, this wasn’t hard to find out – it’s right there on the settings screen)
  • The Speed Sensitivity settings don’t feel the same for all cars.

The second point was the key. I’ve had to change the speed sensitivity setting depending on the performance of the car I’m using. Between road cars and GT4 class, it feels great with the settings specified, but anything faster than that and even at slow speeds the steering doesn’t respond quickly enough or far enough to allow the car to make tight turns.

For now I’ve settled on these settings as a decent compromise, presented here for others to try and so I have a record of them for when I inevitably make things worse by tinkering again later.

Steering Deadzone    5
Steering Sensitivity    37
Throttle Deadzone    0
Throttle Sensitivity    15
Brake Deadzone    0
Brake Sensitivity    30
Clutch Deadzone    10
Clutch Sensitivity    25
Speed Sensitivity    75
Controller Damping    60
Controller Vibration    100
Minimum Shift Time    0

G29 Wheel (-y good) Fix

This is how I fixed my Logitech G29 steering wheel whose left paddle shifter was intermittently unresponsive. If I pulled the paddle say 10 times, it would register the click about 3 times. Not good when it’s the downshift in a racing game.

I’ll cut right to it…

Step 1
Take the wheel off the spindle to access the micro switches. There are loads of step by step videos on Youtube. It’s just 6 screws from behind the wheel, then the circle of bolts on the front around the logo. Oh, and unclip the short ribbon cable connection the wheel to the hub.

Mine seemed to be stuck in the bottom right of the red rotator switch (as you look at the wheel) but it was just a small clip inside that unclipped when I took a brave pill and pulled it harder.

Step 2
Once you’ve got access to the micro switches that the paddles click, spray contact cleaner into the switch. I used the gap around the ‘clicky’ bit that sticks out under the metal spring lever.

Step 3
Gently bend the metal spring out away from the plastic switch body so it needs a bit more force to click. Not sure this is 100% necessary but it makes it feel a bit better when used.

Step 4
Put it all back together. Job done.

That fixed it for me, but obviously your mileage may vary.

And just in case you’re America – Any disassembly you perform is on you. I’m not responsible for any damage you may cause, warranties you may invalidate or injuries you may cause to yourself or others. And if it doesn’t work, that’s not on me. If you don’t agree with any of that, then leave the screwdrivers alone and walk away.