Sunday, 29 April 2018

Show & Tell and why it helped people be awesome

In a previous life, I worked in the Digital team at the University of Bath. For many years we ran a fortnightly Show & Tell event. It was awesome, people got a lot out of it and since I've gone through this a dozen times in the last couple of months I thought I'd write it all down.

The format was a little more formal than other S&T sessions I've seen - more like conference lightening talks. Each week there would be five speakers, each talking for around five minutes with some time for questions. The speakers usually spoke over slides, although they didn't have to do so, and it was supposed to be unpolished so preparation didn't take too long.

The crowd waits in anticipation for the start of Show & Tell

The meeting itself ran every fortnight and was open to anyone who had an interest in the work of the Digital team. Most speakers were from the Digital team, but we had guest speakers from across the university. This was a great thing for the Digital team - aside from showcasing the work we were doing to colleagues from around campus, it also put faces and humanity to the faceless mass of "the team". It helped us start build personal relationships with those whose lives our work was affecting. They could see the challenges we faced and hear the reasoning behind the decisions we made.

The attendees benefited for these same reasons. They found out about developments in a personal way and could ask questions, raise concerns and influence the direction of progress in a safe environment. Aside from this, I'm confident everyone who attended (and listened) learned something. We had such a range of topics - from typography to web application security - it would have been impossible to not.

@iris Showing and Telling on regular expressions
So far, pretty obvious. Treat people like humans and you foster community. Talk about stuff and people learn things. This misses the main benefit though - for the speakers.

There is an art to public speaking. It is an important skill for anyone who wants to be in a position of leadership and one that is quite difficult to practice. Firstly there is having the confidence to stand in front of a group and speak. People, understandably, find this very uncomfortable and avoid it which is very easy to do until suddenly not only you can't, but it's important you're good at it. By that point it's too late. Events like our Show & Tell give a safe environment to practice - an environment where it really doesn't matter if it all goes horribly wrong and others are around to bail you out if it does.

There is more to speaking than just having the confidence to stand in front of a group of people. Being an engaging speaker means having some vocal control to project well into the room, relaxing your body to give an air of confidence to your words and embracing the odd gimmick to keep things interesting.

Sean's first Show & Tell

Then there is the way your message is put across. That means structuring the story in an engaging way, thinking about what the audience wants to hear and in what order to clearly convey a point, and how to support that narrative with slides where necessary. These skills are about constructing an argument in a logical way and bringing your audience with you, especially when that audience may not share the same background and skills as you - such as explaining cross site scripting to a non-technical audience. They are very similar to the skills I mentioned when I wrote about blogging last month.

That's three benefits in without any mention of the subject of a talk. As I said in a previous post, being forced to speak regularly means constantly finding new topics and this makes you ask questions about ongoing work. What is happening? Why? Why is this interesting? These are good questions to be asking anyway for keeping the projects honest. Everything has a purpose - if not, why are you doing it? If the work is boring, what is the context? Someone cares about the thing you're doing and it is a very useful skill to be able to understand that perspective and be able to convey it to other people. Talking about your work also helps highlight the positives to you, which will help you be happier day to day.

Talking about any topic requires a certain amount of analysis of the subject. Although we kept our talks informal, there was still research to be done. Usually that was the depth of research required to deliver whatever underlying work was the subject of the talk and then the preparation became an opportunity for reflecting on the process. On a few occasions we gained a great deal of insight on something we were doing through preparing talks - in fact our content modelling process was formalised through an attempt to visualise it to others. Backwards at times, but effective.

I ran Show & Tell at the University of Bath for three years and in that time delivered more than fifty talks, on top of the intro and exit speeches each time. I had to learn how to pull a talk from nowhere, and I had to learn how to write that talk very quickly and how to prepare slides at speed (pro tip - if you draw on a white board it's different and interesting, and you don't need to prepare slides in advance). I learned how to face a room full of people without fear, and I learned how to fill space while others were setting up their presentation (aka stall in a semi-entertaining way) I'm not going to claim I'm an expert at any of the above, but I'm certainly better than I would have been without this practice. For a final benefit, I spoke about this at length at my last job interview - and yes, I did get it.

Nice work, Kelv

Friday, 30 March 2018

Why do I write a blog?

A few years ago I decided to put a bit more effort in to my blog and commit to writing at least one post every month. This is my third year of that routine and so probably a good time to reflect and ask myself "why do I do this?"

First question - why write at all? I am (or was) a mathematician and a programmer, neither of which really requires written English, right? Well, me, allow me to disagree with myself. My career as a developer has been spent working on projects with other people. Whether through documentation, presentations, Slack, proposals, or whatever, a key part of that job has been clearly and persuasively expressing my opinion in writing. Now I'm working in a leadership role it is even more important - at a recent leadership event I listed "being able to write" as one of the most important skills for someone aspiring to do what I do (as an aside, I still feel weird thinking that I'm now in a job to which people aspire, but anyhoo).

Like any skill, writing requires practice and self-critical analysis. Everyone may have a novel in them, but not everyone can get it out in a form others would care to read. I write this blog as a way to practice putting together ideas into a coherent narrative and placing them on a page in a way that flows relatively well. Clear writing requires clear thinking; crystallising ideas into something that can live outside one's own head, and that is a great way to turn ideas into something that can be made real.

Practice takes time, and that is one of the reasons why I'm still using Blogger as a platform. I certainly could move it to some other hosting platform, run my own thing, or whatever. However I have finite time and lacking an amazingly compelling destination I know I could spend hours fiddling with templates and different technologies. Hours I could be spending writing instead.

Ok, but why share? I do not kid myself that I'm an influential blogger. With a couple of exceptions, I get between 100 and 200 readers per post and if I'm honest with myself, most are likely bots. I could write these posts in Google Docs and they'd never see the light of day, however, the motivation for writing something in public is much stronger for me and I do have occasional conversations with people who read my posts and have gotten something from them. Even if it's only one person, that is one more than if I'd locked it away.

I started tweeting when I put up a new post about the time I started writing regularly and I still find it very difficult. I actually find sharing my writing terrifying and starting to post it on Twitter was a big deal for me. These days I use that added pressure to ensure I proof read and think about what I'm saying, how I'm saying it, how others might read it out of the context of my head, and so on. All useful self-critical tools, as mentioned above.

So, why the monthly cadence? Back when I was working in the University of Bath Digital team, I organised a fortnightly Show & Tell event at which five speakers would talk for around five minutes each about something vaguely related to work. It was an excellent way of sharing knowledge both inside and outside the team (it was an open invite) and building a community for those interested in the web. There is a whole post on why this was great and the good it did, but for this post I want to focus on the frequency.

The most common excuse I got from potential speakers was "but I don't have anything to talk about". Of course they always did have something - the details of their current project, some inside information about their particular job (easy in our case as we had a wide range of disciplines and who really knows what a designer / content person / developer does day to day) or something they had been researching recently were the simple options - but to realise this was worth a 5 minute talk meant thinking about the detail of that thing and why it was being done and then realising why that might be interesting to someone else.

A monthly schedule triggers the same process for me. The mental commitment gives me encouragement to write something, and then I need to think of something to post about. It makes me think about what I have been doing, or develop my thinking about something that has been rattling around in the back of my mind. More importantly it makes me consider whether any of this is vaguely interesting or useful to others, and if so how to structure a story around it.

Take this post, for instance.

Wednesday, 28 February 2018

Magic happens

I use the phrase "magic happens" quite frequently when giving an overview of something technical. For example, if I'm trying to explain the concept of the client / server model I might talk about how a web request is routed from a client to a server where magic happens and some HTML is returned as a response. This isn't supposed to be condescending - it's a shorthand for "this is a black box where something else is going on, but talking about it will draw our focus away from the thing we're talking about here". Unremarkable, but the phrase got stuck in my head the other day and while turning it over it made me think about how learning has changed for developers.

When I was starting as a developer I hated magic. I dug into these black boxes and learned a great deal around the problem until I had a good working knowledge of hosting, networking, etc etc. At the time, you pretty much had to learn this stuff to get a decent local dev environment running. This was before frameworks like Rails made it relatively easy to run up a complete environment with a couple of console commands, and a long time before cloud hosts like Heroku allowed the application to be run in the wild with little more effort. Consequently, there was a huge technical barrier to entry for those learning to program. A barrier that now much lower.

This is in no way a post about how the kids today have it easy, or any other such nonsense. It's a musing on what new developers are learning and what that means for the older generation when it comes to mentoring the next generations (amusingly, my spellcheck wants that to read "tormenting the next generations"). It is now conceivable to have reasonably experienced developers (ie not juniors) who are highly competent, having worked in Rails environments pushed to cloud hosting, who have never had to worry about how anything under that works. No knowledge of linux, networking or other things from the sysadmin world. This has a significant impact on debugging problems and system design, which has a knock-on effect on production costs, maintenance and out of hours support rotas.

On the other hand, and before us more experienced folk feel smug, this focused learning means these developers are likely far better at the core language than we were at the same level of experience. If true, they will be better at their jobs than we were (for a narrow definition of "better", granted). However, it will also stunt career progress as a developer wanting to take the lead in designing or building a system generally needs a wider understanding of the subject area. Skills I learned early on were far less useful while I was a mid-level developer but that knowledge was pretty much essential when I moved into more senior work. This is a key area where our responsibility as more senior people comes in - it's not just juniors who need space to learn things.

In my experience, there is another benefit of this focused learning. Good developers who have learned their particular subject in-depth are aware of the edges of their knowledge. They are aware where, for them, "magic happens", and are capable of explaining that well. I'm not advocating siloed thinking or working, but learning how to define and articulate your problem space is an important skill as a developer - one that people who know everything (sigh) sometimes fail at. It's particularly helpful when discussing work and solutions with other, non-technical disciplines such as product and delivery managers.

Also worth remembering is that we learned around the subject out of necessity and back then it was much easier to get a really solid overview of everything. "Everything" has context of course - how many of us studied machine code, chip architecture and instruction sets, memory rings and so on? Some did, of course, but by no means all. Our window of learning took in what we needed. These days there are many more layers of abstraction in the hosting world as well as many more layers of complexity with SCSS processors, Javascript frameworks and transpilation, and on and on and on. The world today is far more complicated and while we may (MAY) have kept pace with new innovations, that is not the same thing as learning it all at once - especially since change continues to happen.

I have a feeling we're going to be seeing a lot more magic happening as the industry matures. We'll have more black boxes and more abstraction of important concepts - indeed making use magic components is a core part of cost saving strategies. Why on earth would you run up your own virtualisation environment when services like Linode exists, for instance? We are going to need to be increasingly aware of how we talk about technology - not just to those outside our discipline, but to those inside too. We're going to need to put an increasing amount of effort into making sure the next generation can get on - either by learning what they need around the subject, or by shaping our organisations to celebrate the new learning.

Sunday, 18 February 2018

Return of Notes from a Gaming Table

It's back!

A million years ago, before I started posting my writing on Twitter, I used to write a gaming blog. For the last two years "restart gaming blog" has been on my list of New Year's Resolutions. Well, today I am restarting it. Behold: a new post on Notes from a Gaming Table.

And that is all.

Saturday, 27 January 2018

From the darkest depths

I very rarely talk about my mental health. This isn't because I don't think it's important - when it comes to other people, I encourage them to talk and will happily lend a friendly ear if one is desired. I am, however, a hypocrite. Over the last year have I dabbled in burn-out, depression and what was, on reflection, probably chronic stress. At this stage I could probably write a book about how these things manifest for me, however this post is about climbing up after pulling myself clear. Apologies for the turns of phrase - I'm not a doctor and everyone's experiences with mental health are different. One of the reasons I don't talk about myself is the fear that someone who suffers with "proper" depression will call me out for just being a bit sad. I don't think that's the case, but I'm certain other people have a harder time with it than I do.

Anyway, this is about recovery. At rock bottom I needed a trigger to realise quite how bad things had become. For me, this was an argument with someone I hold very dear. It made me re-evaluate what was important in my life and decide that pushing ever onward was not an option - that I was threatening something inviolable. By this stage I had already put at risk my physical and mental health - neither things I am happy to lose for sure, but the slippery slope is not steep and it's easy to put something "at risk" without realising quite how much so. At this point several things happened at once, but the main thing is I pulled myself out of life and work. I then spent a week more or less asleep.

It took a month of doing almost nothing to start feeling vaguely right and slow the destructive cycles. Some of that was spent at home, some was spent with my parents and family. During this time I started programming again. Weird statement for someone with my job, but my role no longer revolves around making things. This is fine and acceptable, but one of the difficult parts of shifting into more strategic work is that you lose the emotional kick of being able to look at that thing you built today. Starting it again in my spare time gave me the chance to set goals and achieve them. I could look at my work and be proud of the progress I was making. I could give myself little kicks of positive emotion.

I wrote a lot of code over Christmas.

With some kind of positive feedback loop in my life, I started asking myself what makes me happy. If I walked away from my current life and started again, what would I do? Why do I want to get up in the morning? When I managed to pull back and analyse my life I was still lacking any real reason to want to engage with the world. My way of dealing with that is to directly face that question and pick it apart until I have the beginnings of an acceptable answer. I'm a middle class human living in an affluent country - I am aware that I have done well in the lottery of life and so I have options that are not available to others. I should be able to find a positive place.

I'm not going into the details of this, but suffice to say I am still working for the Civil Service. For the moment, my long-term goals are still in-line with working there. There are plenty of interesting challenges which will keep me engaged and enthused and which I hope I will approach in an effective and useful way. As an aside, this is the point I want to remind people that "no feedback is good feedback" is a terrible way of treating your colleagues. By all means say if something is bad, but if someone is doing a good job make sure they know. We shouldn't find our sense of self-worth through our work but while we seek enlightenment many of us do. Admittedly, I feel a bit of a rat writing that here as I know a few of my colleagues occasionally read my blog so if that's you tune this bit out and mutter something about fishing for compliments.

That gives me a direction for my life for the moment, however it doesn't help me much in the immediate future. For the short term I need to put some positive things in my life or remove some negative things. These need to be short-term, or at least have tight feedback loops. I'm not in a position to start a six month project that will only make me happy at the end. One of the key things that makes me unhappy at the moment is the deterioration my physical well-being, a combination of my weight and fitness. This is dangerous as losing weight can be soul-destroying. Given I'm living in London I decided to adopt something of a Londoner mentality and throw some money at the problem so I'm giving Alevere a try and so far I'm pleased to say that it is working. I can use my goals within this programme as a framework to trigger other nice things. I'm not sure what yet, but I've just started writing D&D again so I may well treat myself to props or whatever at key milestones.

I can also use the same milestones as a trigger for new, positive behaviours. Deciding these up front means that when the time comes I don't have to think so much and make it far more likely I'll get on and do. Hopefully that will let me ride any emotional wave and keep going, instead of stopping, losing momentum and having to restart again. For instance, I'm going to go back to Yoga when I reach a particular target weight. I haven't decided all of these things yet, but just thinking about what I can do is a positive exercise in and of itself. The timescale for all this is about three months so hopefully by the end I'll have rebuilt a positive life and figured out how to make myself happy in a non-destructive way.

I'm not better yet, not by a long shot. I am, however, moving away from the dangerous place I was in a couple of months ago. The word "triggered" is used far too much in modern parlance, but I can definitely say I know some of my own trigger points and still see them affecting me. Less so now, but the road to recovery is not short. I'm incredibly grateful to the people who have supported me in various ways through this time.

I'm writing this as a note to myself in the future. Maybe it'll be a me who is having a difficult time again and needs to remember that there is a turning point. Or maybe it's a me who is thinking back and wondering what the fuss was about - hello future me, you were not overreacting. If anyone else finds it helpful then I'm glad and please do reach out if you'd like to talk.

Sunday, 31 December 2017

The year that was, 2017

Time to once again take stock of the last 12 months and that leads to an important question about 2017. Was it worse than 2016? For me, the answer is yes. Assorted burn-out issues have resulted in a significant decline in physical and mental health and a marked reduction in making things. That is something to fix for next year. Looking at the positives, I've survived a year in a new job and city and I've managed to catch up with a lot of friends from The Past. I've also managed to do Some Things, albeit Fewer Things than I'd have liked. Still, it hasn't all been Killing Floor 2 and Ultimate Chicken Horse.

  • 12 posts on this blog (13 including this one)
  • wrote a short story
  • another year of the Year in Pictures site, up to 15 photographers
  • over 385 contributions to various projects on github
  • completed GMing a 2 year 5th ed D&D game to great critical acclaim
  • got back in to playing D&D online
  • started planning a new regular game
  • created the university of bath RPG (post to follow on this)
  • went on a photography course to learn how to use my camera properly
  • 55+ pictures on my instagram account
  • loads of photos on my flickr stream
  • attended some cookery courses
  • updated my website and Gareth's website
  • lots of work with build pipelines and hosting
  • plenty of game recording, with sadly little to no video editing
  • a bit more voiceover work

I also hung up my abacus, finishing my time as a church treasurer and member of our church council with a financial presentation to the congregation. I've continued running the sound desk in the same church.

Resolution count: 3.5/10 - better than 2016. Still bad.

This coming year I'm going to try undoing the problems of this year - most notably fixing my health and writing more. I'm also starting a new role at work and I'm going to be spending more time going to see friends from university who have disappeared a bit. Here we go...

Thursday, 21 December 2017

Hosting a Rails App on Cloud Foundry - first impressions

From time to time I have been known to write a bit of code and whenever one writes a web application, there is always the question of hosting. I've done my time in Ops and I can certainly deploy an application to a VPS and run the surrounding infrastructure to make it work - however, that all sounds like more work than I'm willing to put in. This is the world of Cloud hosting and I'd like to spend my time writing applications, not deployment scripts. What I want is something I can throw code at and have it sort itself out but for my own projects the price needs to be low so I'm not spending a ton of money every month on my own games.

This is an interesting niche as I don't have the same requirements for my own stuff as I would for professional hosting. Initially my requirements were:

  • Very low monthly cost
  • Rails 5
  • Database (probably postgres)
  • Ability to hook it into some kind of CI (ideally Codeship, as I'm already using that)

For my own projects I'm not that bothered about high capacity, or extensive DR. These are great, but are also expensive.

I'm going to end up on Heroku, because the free tier appears to do everything I want and more. However along the way I tried out Cloud Foundry so I thought it worth writing up how I got started.

Easy stuff first


signed up for an account then created an org and a space on the dashboard. I also created a database within the space (no binding - it's better to do that with a manifest). This was all achievable via the web interface. The postgres service has the option of a free database, limited to 20mb storage.

Next, I installed the command line interface and logged in (cf l), choosing the space as the default.

Preparing the application


A Rails 5 application needs no additional configuration, beyond migrating it from sqlite to postgres. The easiest way to tie the application to the production database is via a manifest file. Mine looks like this:

---
applications:
- name: yip-helper
  random-route: true
  memory: 128M
  instances: 1
  path: .
  command: bundle exec rake db:migrate && bundle exec rails s -p $PORT
  services:
    - yip-postgres

The name becomes part of the subdomain on deployment. The memory is kept low to keep the costs down for a personal project. The service listed should match the name of the database created in the space, above. Stick this in the repository so it can be used with the CI later.

Now the application should be ready to deploy with a simple cf push.

Continuous integration


I use Codeship, and their docs worked fine for me with two modifications:

  • I dropped the CF_APPLICATION envar from the script as it's defined in the manifest file
  • My first deploy failed as it couldn't find the required gems - subsequent deploys worked fine, despite a warning about including the .bundle dir in my repo (which I didn't)

Problems


This all works with minimal fuss, however I'm going to end up going back to Heroku. I originally discounted it because it didn't play well with Docker (a requirement I've since abandoned). Also:

  • Heroku encrypts traffic for free on their own domain, whereas Cloud Foundry doesn't have this option. I can pay $20/month to use my own domain and cert but this breaks my first requirement. I can understand them charging for additional domain hosting but honestly, securing their own subdomains should be a given.
  • The Cloud Foundry free tier database is tiny. Paying for a database adds a lot to the monthly costs - this is true of all the hosting options I looked at - so a useful free tier offering is important.
  • Heroku is better supported. In Codeship, for example, there is a plugin to support it whereas Cloud Foundry requires a custom script. It's a simple one, to be fair, but it's symptomatic.
  • The Heroku tooling and web interface are nicer. Again, unsurprising given how much longer Heroku has been around. The Cloud Foundry tools are fine, but the doing the same things with Heroku is just easier.

So there it is. These are just my experiences, based on not a lot of time and with the intention of hosting for a personal project.