Jake Hall

Software Developer and Infrastructure Guy.
Always looking for ways to improve everything. Views are my own!

Read this first

Going fast & keeping track of releases

It’s important in our world to release as often as possible to production. This means we get to move quickly, try new things, and then get results for the business quickly.

One of the issues with moving quickly can be that, with increased automation, there can be more reliance on tools and it’s easy to forget to approve a production deployment.

We use a pipeline that looks something like this:
Release CI Pipeline.png

We’re doing Continuous Integration and Delivery, but not quite Continuous Deployment. We continuously deploy to our lower environments, but not production quite yet. As you might expect, our master branch is deployed to our development and pre-production environment automatically, but can sometimes get stuck at the manual approval step.

In order to check where we’re at, I’ve written and Open Sourced a quick script that will check how far behind production is on each repository. Take a look...

Continue reading →


What’s in a version?

Building distributed systems in using a microservice pattern is hard. At my company we’re always looking for ways to automate any manual processes, or anything that is difficult. Computers don’t make mistakes, but humans aren’t infallible. The more we can rely on a machine-led process, the more reliable a release process can be. This is the journey of versioning and releasing for one of our projects.

In the beginning…

We’re using Kubernetes, with Helm to manage our deployments. We started by using the SHA1 Git hash as the version number, it’s pretty unique and means there’s no manual intervention required by a developer to “bump” a version number. It’s automatically “bumped” by git every time we squash and merge a pull request to master!

Each of those merges to master, triggers an automatic build and push the code to both the dev and preprod environments, it then waits for approval...

Continue reading →


What the Ops is NoOps?

Our industry is not shy about inventing new terms to describe what new things they’re doing.

We have DevOps, which is all about the culture shift from the old style of writing some code, then throwing it over the wall for some guy to run in production for you. As the Project Phoenix novel outlines, this rarely works, so DevOps is about moving the development team and the operations team closer together, to improve communication and collaboration, allowing deadlines to be shared rather than fought over.

For me, NoOps takes “moving the dev and ops teams closer” to the next level. Every developer should deploy, and regularly.

Photo by Thomas Kvistholt on Unsplash

So what is NoOps?

For me, it’s important that Developers don’t speak to Ops anymore. That’s because they are the Ops team too. There’s no dedicated Ops person on my teams, each individual developer has the knowledge and access to do deployments as regularly as...

Continue reading →


Thoughts on a Hackathon

santander hackathon

So I took part in my first Hackathon at the weekend, I wasn’t sure what to expect but I thoroughly enjoyed it - enough to write down a few thoughts.

The whole event started on Friday, where we were reintroduced to the challenges and have an opportunity to do a fire pitch. I drew the short straw on our already formed small team of three, so I threw our idea into the fray.

It turned out that another team had a very similar idea to ours, and they approached us to perform the fastest hackathon team merger (or was it an acquisition?) of all time.

IMG-20180321-WA0001.jpg

Friday night, myself on stage doing the fire pitch

We were given access to an Open Banking sandbox to use the new Open Banking APIs which are being made part of UK Regulations this year. This basically allows a banking customer to give access to their data to a third party.

So we’ve got some data, and we’ve got a challenge: fix credit...

Continue reading →


Why do a code review?

Code reviews are an integral part of the teams that I work on, and recently I was asked what value they added versus the time they took. Here are a few thoughts about why they are absolutely vital to any software development project.

What do I mean by a code review

To us, a code review is the final check by the team that the change being delivered has the following attributes, before being merged into the main branch:

  • there are no obvious issues with logic
  • follows agreed best practice, and coding standards
  • code is understandable, maintainable and clean
  • all automated tests are written, and have the necessary coverage
  • the acceptance criteria on the ticket have been met

How do we do code reviews?

In order to gain the most from our code reviews, we try and stick the following…

  • Two other people to review each pull request (PR)
  • Picking reviewers that will have the most impact
  • Adding...

Continue reading →


Instant Slack Feedback

How do you get instant feedback from your colleagues on Slack? Perhaps it’s just a simple question, where shall we go for lunch? Or when shall we organise an event for.

There are a few poll Slack Apps available on the directory, but I wanted to see how easy or otherwise it would be to use the Slack API, to build my own our team. Slack also recently released Message Buttons and these new message attachments seemed like the perfect way to user responses to a poll.

Turns out you can easily put something together over the course of a day.


So what’s in a Slack App? You currently can have incoming webhooks for specific channels, this allows you to post messages from an external server into that channel using the specific hook URL you’re given.

You can also have commands, these are things like /poll or /invite jake. Slack will send you a HTTPS POST command with the command and the...

Continue reading →


Importance of Networking

I love talking to new people. Finding out what they do, where they do it, what they find interesting and the two most important things - if there’s anything in there that I can take away to improve my life or projects with or vice versa (if I can help them with anything).

Regularly I draw on my network in order to help others achieve their goals. Most recently I was presented with the most ambitious goal I had yet to take.

Canadian Flag

One of my closest friends and colleagues at work would like to move to Canada within our company. It’s well known that it’s hard enough to move ones base office, but to move a base office to one that’s located in a different continent?

A quick flick through my network presented me with a very senior HR manager, who may just be able to help. One quick email later, and we’ve been asked for a CV and a preferred location in Canada.


One other such example is...

Continue reading →


Encouraging big business to adopt development best practice

Myself and a colleague at work have managed it.

Well we are on the first step of a long road to adoption but I’m pretty happy so far! We’ve managed to persuade our part of business to pilot a Gerrit & Jenkins Continuous Integration environment. The director of this section has already said he will mandating it once we prove that it’s battle ready.

This means that all projects within our section will have to give us a good reason why they cannot:

  • move from SVN to GIT.
  • implement mandatory peer-code reviews.
  • use an AOSP style Verified+1 flag from Jenkins, thus changeset cannot be merged if it cannot be built.

Or they will be force to take up best practice (it’s best for a reason right!).

So the next steps are to set up our first project on the system, it’s a very distributed project with developers from three countries involved - which makes the peer-code reviewing even more...

Continue reading →


Mondo Event Webhook - Transaction.Created

I’m one of the lucky few to have a Mondo Card. At the time of writing it’s in open BETA, so anyone can apply but the waiting list is huge (80k+ last time I looked) and only 11k cards are in circulation.

Mondo

I’m not going to go into detail about why Mondo is so great (it’s widely documented…) - but what I will do is delve into one of the components of their API. Yes a sorta-bank* with an API - I’m so excited to see what they (and other developers) can do with it! Mondo are maintaining an awesome-mondo github listing - check it out for inspiration.

For me - one of the most powerful parts of their API is the webhook feature. Head over to developers.getmondo.co.uk and you can register your own webhook to receive events.

At the moment the only event is the transaction.created event documented.

I’ve thrown together a quick PHP script that accepts the JSON POST value, parses this data, then...

Continue reading →


Today is International Backup Awareness Day

Of course, that’s the joke. Everyday is International Backup Awareness Day. You should go and check your backups now. It’s OK - I can wait… I should probably go and check mine too.


You have backups right? As I mentioned in a previous post Zero to development of an idea, I have a little dev box that I love to use for my little side projects. Now there’s no point in setting up a separate backup strategy for each of these as they are all so small it would be infeasible to maintain.

Instead I go for a multi-faceted approach.

  1. Use Git repositories to store the code in BitBucket. That way they’re on my development workstation and on a cloud host (and one would hope they backup).
  2. Use Amazon Web Services - Simple Storage Service to save my entire /var/www/html directory to a bucket for safe keeping.

Here’s how I make it work:

   s3cmd sync -r /var/www/html/ s3://bucketname/backupwww/
...

Continue reading →