Hey, Hi, Hello.

My name is Derek Graham and this is my personal blog.

In my most pretentious moments I like to think of myself as a writer of speculative fiction for computers (what people normally call a "programmer") or a "legacy code archaeologist" (someone who has to make sense of long dead codebases).

In real life, I'm a software architect working for a very popular business software company in the North East of England. I can't be sure that the opinions I have expressed here are my own so they definitely don't represent the views of my employer.

For the last few years I have been working mostly on .Net, React and Azure Cloud projects. I have been involved at almost every level of software development over the last 25+ years from individual contributor, leading a development team, management: of humans and projects, and spend a fair amount of time mentoring early-career software people. My experience ranges from real-time motion and process control in high reliability, 24-7 environments to commercial applications using .Net, Javascript and React, C & C++ as well as a wealth of other languages. I enjoy delivering simple, clean and maintainable code and the cleaning, refactoring and general "gardening" needed in bringing legacy systems back to a manageable state.

I co-organize NE Bytes, a monthly .Net community get-together hosted in Newcastle-upon-Tyne. I also speak at developer events and conferences like DDD North.

I am an Extreme Programmer, an Infrequent Sketchnoter, a Collector of Programming Languages, a Speaker, an Ensemble Programmer, and a Test-Driven Developer. I am a second-year mentor for cohorts attending training at the "We Think Code" non-profit in South Africa and a STEM ambassador specialising in micro:bit hackery.

My main areas of interest are in using agile methods to help improve what we ship, test-driven development, unit testing, continuous and deliberate learning, visual thinking, design and, of course, code.

A Note on Code Samples

I've had a few comments about some of the code samples you will find here. Lots, if not all, of the code is a reflection of my mentoring activities in the community. Examples are often not intended to be as efficient or elegant as they could be, rather to stimulate discussion for improvement, they can be intended to explain concepts or algorithms to less technical people (python, microbit, processing) or the starting point or results of a learning hour session. Feel free to use and adapt them for your own teaching. Do not use them for evil.

A Note on Sharing

I've had a few requests from people wanting to use sketchnotes or graphics from my site for non-commercial uses. I try to make sure all posts that contain any "art" work are marked with a creative commons licence:

If you follow the link to creative commons, there is a section that describes what you can and cannot use the material for. In short:

  • Don't use it to make money
  • Credit me for the work
  • Build upon it, if you like
  • Share it

Not part of the licence but I'd also really like it if you would let me know, by email or tweet, what you did with it or how it helped you.


The information in the weblog, or blog, is provided "AS IS" with no warranties epressed or implied. Code may not compile if you do not keep up payments on it or fall into technical debt. No monads were harmed in the making of this blog.