Category Archives: Thoughts & Scribbles

Quantified Terror

So here’s an interesting thought. as part of the always on, always connected quantified self we can now measure terror. As I sit in my bulkhead seat of this RyanAir flight to Berlin, climbing out from the takeoff, I can watch in real time as my heart rate rises well above 100BPM, despite my deploying a barrage of tricks and diversion tactics to remain calm.

My rate spikes as the plane banks, my head studiously down, ignoring the fact that I’m in a pressurised tube hurtling through the sky in a display of what my brain feels to be Brute Force Over Ignorance.

And this state of mild panic actually me coping well. I can think straight enough to write. I don’t yet have that sinking feeling in the pit of my stomach. Clearly I’ve got better at flying.

Not great though. An elevated heart rate and nervous shuffling around at the airport for 15 minutes while waiting for my travelling companion registered as a full 15 minutes of exercise. As we settle into the flight my resting heart rate is now in the high 90s, low 100s

And for the next hour and however many terrifying minutes are left in this flight I can know, with data to back it up, that I do not fly well. Of course, I knew that before, but now it’s quantified.

There now follows a party political rant on behalf of the Common Sense Party

When my Dad died it fell to me to sort out his online presence. I sat down at his fancy HP Touch Screen Media Centre monstrosity and promptly demonstrated why full disk encryption is so vital.

Within 5 minutes I had full access to his computer, and everything on it. This included Outlook Express, which dutifully connected to his email account using the credentials it had handily stored away. 30 minutes later and I owned almost his entire digital life.

Once you have access to someones email, you have access to a huge number of websites they’re registered with. Don’t know the password? No problem, we’ll handily email you a link to reset it to something you do know via an email sent to the compromised account you now own. Oh goody!

But that’s OK, no one is going to steal your computer and get access to your email client. Maybe not (although you might just want to enable full disk encryption, just in case), but then perhaps someone like TalkTalk will slip up and release account details which give them access to your email – because, hey, remembering lots of passwords is hard and what’s the harm in using the same password everywhere?

Now lets just pretend that companies like TalkTalk need to suddenly start storing lots more personal information because the government said so. What’s going to happen here? Are you going to get a well architected, well implemented system with security being on of the basic tenants of its design? Or are they just going to ram something into production that does what’s required and then forget about it?

What we’re talking about is a data store that does nothing for the company’s business model, makes them no money, and is a cost to build and maintain. It’ll also be a treasure trove that hackers will want to target, if only to say they did. I have very little doubt that the whole thing will furnish me with a sequel to my talk on massive cockups in IT.

And this data store does what? It allows you to pin some extra evidence on the sloppy who, lets face it, probably have made enough mistakes to be convicted anyway. Anyone with half a clue and nefarious intentions can easily sidestep this store, flood it with spurious data, or both. Incidentally, anyone with half a clue and perfectly honest intentions can also sidestep the store. It’s very hard to tell the difference.

But it’s just metadata! Yeah… putting the word “meta” in front of it doesn’t make it OK. Happy for me to see your browsing history? Of course you are, you’ve got nothing to hide! What if I told you I could also see all those sites you went to in that incognito window you had open last night? Not so great any more is it? Still happy to hand over “metadata”? Then consider this: if the data is the results of your STD test, then the metadata is that you’ve had a test in the first place. I could go on.

It’s also dangerous. So perhaps your browser connects to a compromised server because someone has injected a malicious advert into an innocuous page you’re browsing. Perhaps that server also contains material the authorities deem to be something you shouldn’t be looking at. They now have proof that you were looking at it, but no context as to why. You’re simply the victim of a drive-by download, but the metadata convicts you of viewing forbidden data. Don’t try to argue, it’s all there in the logs, we know you’re guilty.

But it stops the terrorists! Ah yes, that old chestnut. We must all make sacrifices to our liberties, and to our rights so that we can Maintain Our Way Of Life, because otherwise The Terrorists Win. There is a brutal irony there. The only way it could get more ironic is if it’s the terrorists who hack all this data and use it for nefarious purposes… you honestly couldn’t make this stuff up.

Anyway, on a totally unrelated topic, who can recommend me a good VPN and some strong cryptography packages?

My coding role models

There were some interesting tweets the other day about programming role models when we were kids, or, more specifically the lack of them. The generation I’m talking about grew up with the BBC Micro, a computer that I credit for getting me where I am now. Growing up in the Middle East meant limited television and playing inside during the hottest parts of the day. Imagination and playing with friends staved off boredom, as did a fair few hours playing computer games.

I’ll be honest here, mostly I’d go round my friends house to play computer games. He had a Commodore 64 a much better games. Of the games I had for my BBC only Repton 2 and Elite were really any good.

Elite was, in some respects, the best game ever written. This may not be immediately obvious if you look at it in a modern context. The graphics are clunky, the sound is lo-fi and the game relied heavily on your imagination. Look at it in the context of what computers could do in those days and it was a technical tour de force.

As a young kid I was able to fly, trade and fight my way across thousands of planets spanning 8 galaxies. I could upgrade my ship and compete in what felt like a living, breathing universe. This was not a game on rails, this was a sandbox you could explore. Yes, you had to bring your own imagination, but as a kid of 10 I had that in bucketloads.

The fact that Braben and Bell were able to make my lowly BBC simulate all that was astounding for me. I wanted to know how. I was inspired to explore, and learn. And through that exploration I taught myself to program. It means that as the current incarnation of Elite pushes technical boundaries once again, I have a good appreciation of how it’s been done. I can also contribute to the community in the form of joystick maps and video tutorials. The very fact I could afford the gaming rig I use to play Elite: Dangerous is directly related to learning to program and taking the career path I did.

So I would argue there were programming role models when I was a kid. David and Ian, I salute you.

Why tech needs context

6am, and an alarm goes off on my phone. It’s time to get up for work. A discreet tap on my wrist at 7am from my watch alerts me to the fact it’s bin day. Today it’s garden waste, so the brown bin. 7:10, Another alarm on my watch: 5 minutes before I need to leave. Time to get my bag and put on my shoes.

I’m forgetful. I get caught up in things. And there is stuff that I really need to do at certain times. Like leave to catch trains. Or put the bins out. Mundane stuff, but important nonetheless.

But these things are contextual. And other than limited control over time and date I can’t really add context to them. I have 6 alarms relating to work which I can only limit to weekdays. I’d like to further limit them by special events (so only go off on weekdays that are not public holidays, and where I am not on holiday or otherwise out of the office). I’d also like to make them smart when it comes to location; “You are not at home, should I adjust your morning alarm?”

This leads to being able to schedule alarms to go off only if an event has occurred. Remind me to take out the brown bin every other week at 7am on a Monday, but only if I have put something in it since it was last put out. When I’ve done some gardening, “Hey, Siri! I’ve put some stuff in he brown bin”, and I know that I’ll get a reminder to put the bin out at the correct time.

Conceptually these are all easy things to do when considered in isolation, but become much harder when you start considering how it would work in the real world for all the different combinations people would want. Just knowing if it’s a public holiday can be confusing enough for me since my calendars insist on showing ones that are observed in Scotland but not England. Any system making informed decisions off this data would need to know about regional nuances like that. And that’s one of the simpler problems.

Smart reminders are coming though. I can envisage a time when I can just say “Hey, Siri! Remind me I need to buy some more tea for the office tomorrow,” and for it to know to remind me as I pull into the station that I need to deviate to a shop, plus tell me which is closest to my usual route. Then, knowing I paid using the company card, Siri will them prompt me when I get to the office to scan the receipt for my expenses.

We’re tantalisingly close, and I can’t wait until it starts becoming mainstream. In the mean time I’m just glad I managed to wake up on time the first day back after my holiday – I forgot to turn all my alarms back on, which could have been problematic.

Rural Internet

I recently changed both my broadband and mobile phone providers. The reason was simple: I wanted a faster, more stable connection, both at home and while out and about.

Increasingly our lives are revolving around a strong internet connection, and there are certain aspects of my job I can’t even do without being online. Everything is in the cloud; local storage is becoming little more than a cache. And yet, living in Rural North Norfolk 4g coverage is spotty, 3g is rare and GPRS (or even the dreaded No Service) is not uncommon. Even my fibre optic broadband tops out at 13mb/s.

I was on the train with a colleague of mine the other week. They stated that “it’s amazing how useless a laptop is without an internet connection”. I found this to be quite amusing. Perhaps it’s because I’m old enough to remember a time before The Internet and constant, near ubiquitous connections, that I find my laptop (and iPad, and even phone) perfectly usable offline. Unfortunately I am little hamstrung when it comes to looking up information, which can be a practically constant need if I’m trying to do development – hurrah for Dash and offline documentation.

This near ubiquitous connection is a problem though. Too many services assume constant connection and become problematic at best when you drop offline. It annoys me that I have to use the iPad version of Trello on the train because the website doesn’t support offline properly. It’s annoying me to the point where I may actually write a native Kanban style app for OSX as an excuse to learn Swift.

There is still a need for offline version of apps, tools and utilities, but that need is shrinking. In some respects that’s turning those of us who can’t be online constantly into second class netizens.

Look mum, I'm on TV!

Keep calm, and look like an idiot ;)

Those who have met me will know that I’m not exactly shy when people start asking me questions. I will happily dominate a discussion and will talk at length on subjects that I’m comfortable with. I appear confident when doing public speaking because I generally pick subjects I know well, and I have a pre-prepared script that I can work from.

Turns out, however, that an unscripted interview in front of cameras is a completely different beast. I was interviewed for the Mustard Business Extra show today which, while not an unmitigated disaster, wasn’t exactly my finest hour.

It seems that what I thought was my “look calm, relaxed and cool” pose is actually my “look really uncomfortable and unnatural” pose, and my usually eloquent verbiage was replaced with slightly halting babble.

As I was answering the first question my brain was having the following monologue:

“OK, say something articulate… no! Articulate, you idiot! OK, now hit them with your expansive… er… list of… things you say – dammit, words! Vocabulary even! Too late, keep going… OK, you’re waffling now, bring it to a close. Now to make a strong point about… what was the question again?”

With the large number of YouTube videos I’ve made I have finally become comfortable with listening to recordings of my voice, but I’m still not comfortable watching video of myself so tomorrow nights airing could be a tad excruciating. It doesn’t help that I thought it was a talking head setup so I rocked up in shorts. Good thing you can’t really see my battered old shoes 😀

Shit happens

Shit happens. It’s a given. Anyone who tells you otherwise is either lying, or trying to sell you something. The difference is how you deal with it, and also how those around you deal with it.

I needed to take a day off work today. The timing is appalling, but couldn’t be helped. Shit happens, you don’t get to control when or where. Now, I’ve worked at various places and I think its fair to say that all of them would have let me have today off1, however most of them would have come with guilt, or assurances of being contactable, or some other way of letting you know that this was being done grudgingly and that you should somehow be happy about it.

Thankfully the attitude is very different at Rainbird. We are there because we want to be there. If I can’t be there today, I can’t be there. Simple as. They’ll manage (and they did). My request for a day off was met with “Absolutely, go, we’ll sort something out”. No guilt, no power plays, just understanding and accommodation.

This is, as far as I’m concerned, the only attitude you can have. Shit happens, and you have no control over what, or where or when. Sometimes people can’t make it into work, for whatever reason, and you just need to deal with it. This bullshit attitude of presenteeism that seems to be going around isn’t helpful. Engaged and motivated employees will actively want to be at work If they’re not, it’s not because they’re slacking off, It’s because they can’t be, or their presence won’t contribute anything, or because turning up may actually be detrimental to others.

I’ve had flu – actual proper flu, not Manflu – twice. It’s hideous. My first bout was caught from a manager who came back from the Far East with Hong Kong Flu; you know, the variant that was in the news for killing people around the turn of the millennium. He decided he was far too important to be at home ill, so came into the office and had meetings with people to “catch up”. He wiped out the majority of the team for about 2 weeks. The damage his few hours in the office caused could easily be measured in man months. The kicker is that all the meetings could have been done by phone; or even handled by subordinates and peers.

I’ve even once had the misfortune to be speaking to one pretentious prick who actually used the words “He better be dead or dying” to describe the acceptable set of circumstances I could give for a colleague and close friend not being in the office that day. Being able to deliver the news that said colleague was in fact killed in a paragliding accident the previous week yielded little more than demands for who was going to take over the project. I hung up on the guy.

The fact of the matter is that no one is indispensable, and if they are then it’s your fault for letting them get to that situation. If an engaged and motivated employee can’t work on a day, it’s because they can’t work that day. If an unengaged and disgruntled employee is so critical to operations that you can’t have them out under any circumstances then you’re already stuffed.

1 I know people who have worked at places that would have denied a holiday request for this

It’s always about the money

I was asked an interesting question today regarding which job should someone go for. The options in question were for a “boring” product, but with a good team, and for an “interesting” product, but for rubbish pay and the possibility of a full time job after a period of a few months.

As far as I’m concerned the above scenario really only has one choice, but in the conversation that followed it was pointed out that there are a few students out there who are unsure what path they should take when it comes to accepting Software Engineering job offers out of university. What I’m providing here is an expanded version of the advice I gave today. Caveat Emptor and all that.

Lets look at product first. I’ve worked on a product that, in its original incarnation, was a putrid, rotting corpse that sucked the very life from your soul. This was due to the hideous way it had been barfed into existence and the ridiculous choices that had been made in terms of architecture, language and structure. It quite literally broke two consultants while we were doing the analysis.

That exact same product, rewritten, re-architected and generally done properly was actually quite nice to work on. As a product it was as boring as hell, but as a job I had more fun there than I did on my next job which was, in theory at least, a much more “interesting” product.

As far as product (or service, or whatever you’re being employed to program) goes you really only care if it’s something sensible that’s going to continue making the company money (and therefore allow you to continue being paid), and that it doesn’t do something that you find morally reprehensible. You may also find, as I did when working in London, that your morals become somewhat malleable as the salaries increase.

So product is much less important the technology. Make sure it’s the technology you want to be working with. If the code has been around for any length of time, it’s going to be a steaming pile of crap. Deal with it. If it’s new code you’ll be involved in turning the nice new codebase into the steaming pile of crap that it’s destined to be. Such is the nature of most development houses. Either way you’ll have some days where you get to write little gems of code that make you proud, and others where you’re having to bludgeon some hack into the code just to make the damn thing work. May as well be swearing at a technology stack that you enjoy and doesn’t fight you back.

Team is also very important. You need to work with these people day in, day out. If the team is comprised of people that cause violent thoughts due to their behaviour and nature then walk away. In generally moving jobs every 2 years in IT isn’t going to raise any eyebrows, but can you really tolerate these people for that length of time?

So you’ve narrowed it down to a shortlist of things you are happy to work on, using technology you want to use, with people who won’t cause you to go postal. I’m going to assume you’ve already weeded out places that are too far away, or are otherwise impractical. You’re now left with the final thing: money.

Pro tip: up to a certain value, it’s always about the money.

If you’re stuck, go with the company that will pay you more. Money may not buy you happiness, but it sure as hell helps mitigate a lot of stress. Not having to worry about your next pay check, being able to afford treats, holidays away, shiny new kit, all these things can make life much easier.

Now you’ve made your choice, if you find yourself kind of wishing you hadn’t picked that place, strike it from the shortlist, start again.

Oh, and as an aside, anything that you’ve been promised is worthless unless you’ve got it in writing. Something in writing trumps vague verbal promises every single time.

The Hour of Code, a musical analogy

When you look at it objectively, musical notation is a completely alien language. It’s limited symbol set is written in a considerably different fashion to spoken language, encoding information that is only implied at in normal prose.

Despite the alien nature of music it is not considered something to be afraid of. Most people have a basic grasp of the different symbols and, while they may not fully understand exactly what is being represented, would be able to point out symbols denoting notes, and time signatures.

With the exception of some very exceptional (and esoteric) languages, computer programming is considerably less alien than music. Based, as it usually is, in the traditional symbol set of the English language and mathematics, much of what is presented is instantly recognisable, even if it is not understandable. Despite this computer code, and software development in general is seen by those outside of the field as ‘scary‘ and ‘impenetrable‘.

It’s my belief that the reason for this is the relative age of the two mediums. Modern musical notation has been around since the Middle Ages giving it time to enter into the public psyche. Music itself has been around since the dawn of humanity and is understood at an innate level. Computers, computer programs and software development is new. New enough that there are people alive today who predate the first digital computers. It’s that newness, and unfamiliarity that is the source of the fear, and much if the irrationality that goes on around computers.

One area where this irrationality seems to be cropping up is around the change in ICT curriculum in UK schools. Teachers are now going to be teaching algorithms and computer programming to pupils from the age of five upwards. The whole Year of Code debacle and the misconceptions being spread by the Hour of Code haven’t helped.

Let’s put the record straight. Let’s stick with our analogy of music, which we can all understand at a basic level, and explain what’s really going on here.

The Hour of Code

I am a complete novice when it comes to music. I did some lessons on the recorder at school some 3 decades ago. In my adult life I’ve played with sequencers a little, and messed about with GarageBand. I am not a musician by any stretch of the imagination. And yet, sitting with my daughters xylophone, with all of 8 badly tuned notes, I’ve taught myself a few basic ditties, mostly the opening bars, or choruses of nursery rhymes.

In one hour I could teach you these basic tunes. With a little bit of Googling and some preparation I could related these tunes back to musical notation and show you how the notes on the xylophone relate to the notes on the page.

We could possibly even go further, if you were interested, and teach you how to play those tunes in GarageBand on my iPad with digital instruments that contain more notes, and which are properly tuned.

If you were motivated enough you could probably go to Google yourself and teach yourself these basics without my help. Even a child could attempt it.

This is the hour of code. It’s not teaching children to become professional software developers. We’re not trying to develop the next poster child for tech here, we’re just introducing the basic concepts of computers and programming. We’re drawing a square using Scratch, we’re learning how we could change that to be a triangle. We’re whetting our appetite and seeing if this is something that grabs us, interests us and is something we may want to take further.

Parents, teachers, and to a large extent, children, can all teach themselves with a little bit of time. With an hour set aside to really get into it, and a bit of prior preparation by a parent, it’s something that you can learn together. How far you go is up to you. Maybe you stop at a square. Maybe you work out how to do a triangle. Maybe you put a triangle on top of a load of squares and call it a house. It’s up to you.

The Year of Code

Let’s imagine the government has decided that knowing how to play a music instrument is important. Music is becoming a bigger part of our daily lives and they start an initiative to get us to try playing an instrument. They change the curriculum to introduce music from an early age and they encourage people to get invoked through “The Year of Music“.

Ignoring the fact that we already teach music, I don’t think there would be the same concern that exists around The Year of Code. No one would be expecting us to turn out virtuosos. No one would be expecting people to get to a level where they could become professional musicians. In fact, very few people would be deluded enough to think that, using just the initiatives provided by The Year of Music, they could become a professional musician. Yes, it may well start them along that journey, but there would be a lot of hard work after that to get to the required level.

Exactly the same holds true for computers, programming and software development. We’re talking about teaching people the basics of programming; the very fundamentals. We’re getting people to have a basic understanding of how computers work and how we can interact with them over and above just being a user. We are not training up professional software developers overnight. Those who eventually end up down that route will need to work hard, and learn a lot more.

ICT, Algorithms and Programming

We already teach music in schools. At the point where it ceases to be a mandatory subject we expect little more than the rudimentary ability to play a simple instrument. This is epitomised by the amount of humour and jokes aimed at the typical School Concert. No one is expecting the London Philharmonic, at best we’re expecting something recognisable.

Even at GCSE level, the flawless performances of a professional, and a complete grasp of music isn’t expected. Yes, there are exceptions, those who are naturally talented and gifted, and those who have put more effort into practicing and learning, but they are an exception, not the norm.

As you go through A-Levels and Degree level the subject becomes more specialised with students concentrating on specific aspects of music and specific instruments. No one is expecting a student to leave education being fully versed in all instruments and all styles of music. Yes, they will have a broad understanding, and a lot of theoretical knowledge, but specialities will vary. From there, their professional careers could be very different.

It’s exactly the same for the new ICT curriculum. Schools will be teaching the foundations of computing, of algorithms and of programming, but absolutely no one expects students to be at a level of competence where they would be employable by the time the mandatory ICT education ends. They will simply have a grounding in the subject, an understanding of what it is that those who do do IT professionally actually do. Even at university level the gap between a Computer Scientist graduate and a professional Software Developer can be quite large so we simply should not have any expectation of a generation of expert programmers resulting from this initiative.

What we will have is people in other roles, in other industries who better understand what software is and what it can do for them. They can better appreciate when a problem is difficult and expensive, or time consuming to solve via software, and when something should be quick and easy. The gap between IT and the rest of industry will start to close, and that can only be a good thing. And that, that is what the Year of Code is about.

So yes, you can learn to code in an hour. And yes, you can teach yourself how to code. And yes, we should be teaching students how to code in school, but let’s not get carried away here. The difference between that and professional software development is the difference between my clumsy renditions on my daughters xylophone and a skilled, paid musician.

I am not a developer

I am not a developer anymore” – Me, last night

This (probably not so) startling statement was made by me at yesterdays Norfolk Developers meeting as part of a discussion about the Developer to QA ratio in my team. Actually, the statement is probably more accurate if you change it to “I am not a professional developer anymore“. The reality is I’ve not done any real development at work for about a month now. I’m a manager. I don’t code, I… well, that’s the thing. I’m not so sure what I do any more.

Developers make the worst managers” – Me, c.2003

History has taught me that developers are not good at management. Don’t ask my why this is1, it’s just something I’ve observed during my career. It’s by no means a hard and fast rule, but there is a strong correlation there.

This doesn’t bode well for me. If you’ll excuse the WoW2 analogy: I feel like I’ve gone from being a level 60 Developer with Epic gear to being a level 1 Manager with noobie kit. Oh, everyone says I’m doing a wonderful job, but this is still the honeymoon period and I’ve yet to cock anything up.

Yesterday I… erm…” – Me, 9:00am most mornings during the standup meeting

Part (most?) of my problem revolves round the fact that I no longer produce anything. As a developer I can point to a list of git commits and say “I wrote this code“; I can point to a feature and say “I implemented this“; I can point to a bug report and say “I fixed this“. My job is now meta. I liaise, guide, advise and facilitate while others do the actual work. Hopefully while doing this I add value.

For a long time now I’ve kept a private work journal detailing what I’ve done during the day. It’s proven to be useful on more than one occasion and now my job is much less tangible it helps keep track of what it is I actually do. There is a blissful irony here though: I’m now so busy doing… whatever it is I do during my day, that I don’t always have time to note it down at the end of the day.

Have you tried pairing a QA and a developer together?” – Chris Oldwood, last night, 21:00

One thing I learned being a developer is that peer review is A Good Thing™, and that you can learn new things from the most unlikely places. It’s part of the reason why I am so candid about our development processes at things like nor(DEV): and SyncNorwich, warts and all; the feedback you get is invaluable.

The discussion that ensued after Cat Landin‘s talk last night on why developers are so bad at testing gave some really valuable insight into fixing some of the problems we have in our team. Sometimes all it takes is someone unencumbered by the politics, culture and mindset of an organisation to point out simple, but effective fixes.

After last night I have a number of “bug fixes” for our processes. Lets hope they’re as easy to refactor as code.

1Trust me, if I knew I’d be cashing in on “How to go from Developer to Manager” courses and books.

2World of Warcraft – and also from 5+ years ago, I’ve been clean a while now.