I don’t remember exactly how old I was, but I was possibly as young as 5, when my family bought a BBC B with loads of games on tape (!) from my (older) cousin. I think he was selling it all so he could buy a guitar.
I actually worked with him on a software project many years later, paid work whilst I finished my PhD, but it’s only in the last few years he’s not been in a band. Now he works on music production for Children’s TV programmes.
He’d written his own game called Fireman Fred, like Chuckie Egg, and a text-based School Adventure — you’d got locked in at Computer Club and had to escape before midnight or you got dragged off to become… a teacher!
There were many challenges, including Wally’s socks, which according to some graffiti, could destroy the world.
Of course we had Manic Miner and Elite too; I was too young to be able to dock (no auto-docking computer like on the Speccie) so my brother did that, and I did the ‘grind’ doing the dull flying bits (I had to pause it if I got attacked).
My Dad had his own software company, though tellingly he wanted us all to stay away from the industry — he always said we should study French and Law instead. He did go on to do an Open University Law degree in his retirement — to find out why he’d been paying lawyers all that money through his career.
When I was a bit older, I remember visiting his office in the holidays and getting paid 10 or 20p for each 1.44Mb floppy disk I formatted using MS-DOS.
I tell this anecdote at the start of my talks, but I was reading Michael Feather’s Dealing Effectively with Legacy Code at my parents house some years ago, and he clocked the book and said “Legacy Code? I never wrote any other sort”.
I’m an Engineer. I have a different set of skills to all the Computer Science grads in the industry, and whilst occasionally this has held me back — I got refused an interview because my CV said I was working towards Chartered Engineer status, D’uh. Sadly you get people over-promoted into management that want clones of themselves.
Having a range of diverse skills, not to mention backgrounds, gender, etc, makes a better team.
Whilst my wife is the proper Engineer in the household (Chartered and everything) I practice Software Engineering. My approach to solving problems is different to others around me, until a few years ago I was an undiagnosed Systems Thinker.
This is because of the different degree I did.
A higher degree
As I’d done a Year In Industry (a work placement with some training) before starting my first degree, when I finished it, I knew what work was like and was quite happy to stay a student for a few more years.
There are two types of Phd, one is where you join an existing research programme, and you work on a project given to you, or at least a logical part of the existing programme; the other is where you spend some time reading round lots of different areas and then look in to something that interests you.
This can be a lot more blue-sky research. Mine was like that.
After six or 9 months of looking in to Telecommunications (ATM, TCP, IP4, IP6), I’d found some papers that fascinated me, on Ant-Based Routing, written by HP in 1989. So I set off to look at how you might detect steady-state and congestion and adjust the control system to compensate.
I also found some amazing papers on using a technique called Q-Learning to play Backgammon. This is now what is powering the startup Prowler.IO, based in Cambridge. Some of the Wikipedia page was still written by me last time I looked.
So my PhD was in Telecommunications Networks, with a foot in AI. I worked closely with some people at York University Computer Science department.
At the time it was way out there — at conferences people were considering 3x3 grid worlds. I was applying stuff to a Telecoms Network. I might even be feasible these days.
I started working for a Technical Consultancy, and played most roles in a software team — Test (Manager), Business Analyst, Business-Technical-link, Data Analyst. My first career highlight role was because I was on a fantastic Can-Do attitude team. I still reference the shared values we had — No Surprises, Open and Honest.
After, I spent a year on re-engineering an recipe application for Unicode. It worked out the order of ingredients on a label and tracked allergens through ingredients; jam can be more than 100% strawberry!
In my next role I worked with Jeff, now Redgate’s Head of Engineering. It was Jeff that introduced me to the world of Agile — he recommended James Shore’s book The Art of Agile Development; one I still refer to and recommend. It wasn’t a pleasant work environment though, so we both escaped…
Agile and Clean Code
I had a couple more “Permanent” roles after that. Where I grew in to taking on Design and Architecture decisions (I’ve never been crowned Architect and see it as a dysfunction anyway). I also got sent on a Certified Scrum Master course with Craig Larman, at the last moment. If nothing else this gave me an extraordinary good reading list, I’m still working through years later.
I also had my worst Boss. I’d had a previous one but that was because the whole organisation was set up for the cat to kick the mouse; whereas here he did it of his own accord. We actually had quite a high-performing team, unless he was in the room when the atmosphere would be sucked out.
But the most significant thing to happen was I was given a copy of Robert (Uncle Bob) Martin’s Clean Code.
I’ve spoken about this in my talks also, but it gave me my Personal Brand — @TheCodeCleaner. When I struck out by myself as a Contractor, it described what I did very well.
I turned dead codebases round, into something that delivered value. Multiple times. There is a stereotype for Contractors and it’s not a good one. Someone in a team I was leading said to me:
“You’re not like a normal contractor, you actually care about the code”
There are and were very few places I would have gone Permanent again. The variety of projects, flexibility and ability to stay apart from politics are great when you’re a Contractor.
But my wife prefers the steady income.
I’d admired Redgate for nearly 10 years from afar and knowing many employees in that time.
And when I joined, Redgate felt like a home from day one. Partly because of the number of people I already knew that worked there, and some that had left but had left a mark. But also because of the values alignment.
Whilst I’d led teams and been quite senior, as a contractor you don’t really get to do line-management so it was a gap on my CV. So strategically and tactically it’s been a great move.
I had got to the point where I assumed I would never work for Redgate due to a technology accident many years before.
So, what are my Top Tips?
Always be learning; don’t be the Expert Beginner who achieves things through Brute Force and in isolation. Read, watch, attend, practice.
Know your language and build-tooling. In Java Joshua Bloch’s Effective Java was the benchmark. I’ve not quite found the equivalent in C# yet, but I’m working on it.
Differentiate yourself with a focus on quality and Technical Excellence. Don’t do “Quick Hacks”, or if you do, go back and fix them asap. Read up on Clean Code, watch Kevlin Henney videos. Write Clean Code. Refactor to it. Do it.
Understand the process. Read up on XP, Toyota, Lean, The Pheonix Project, DevOps. Aim for XP and Continuous Delivery, Pairing if not Mobbing. Build automated pipelines with at most single manual decision points. Have them produce easy to use containers. Simples.
Understand how to relate to people, even if not leading or managing. Read The Responsibility Process, Radical Candor, The 5 Dysfunctions of a Team, Situational Leadership in the One Minute Manager series. Learn about Psychological Safety. Learn about Coaching, Facilitation and Leading.
Understand the bigger picture, the commercials, complexity, Cynefin, Wardley Mapping, strategy.
But remember to enjoy it.
Be awesome to everyone.
And be more Dolphin ;)