What can Spring do to help me secure my application?

Adding a security layer to Spring projects


This article is aimed at developers with a solid understanding of the basics of Spring and web security. It marries up the two concepts, concluding with a worked example of using Spring Security with Spring Boot.


Spring Security is centred round two core concepts:

  1. Authentication: Verifying you are who you say you are.
  2. Authorisation: Once we know who you are, what are you allowed to do?


Authentication is handled by the AuthenticationManager interface:

public interface AuthenticationManager {  Authentication authenticate(Authentication authentication)
throws AuthenticationException;

This can be implemented differently depending on…

An introduction to caching principles

Increasing application speed using caches


This article is aimed at developers with a reasonable understanding of how the internet functions, contemporary application architectures and AWS.

It will cover what caching is in a more general sense, the motivation behind using it, and then deep dive into specific implementations.


A cache stores previously used or computed data in a high-speed data store to make it more rapidly available than in the main storage layer. Generally we would use hardware such as RAM.

For example, we may have a preferred takeaway saved as a favourite on a delivery app. Rather than search…

An introduction to Kinesis using Apache Camel and Spring Cloud Stream

Streaming and its integration with Spring


This article is aimed at developers with a reasonable understanding of Java and Spring, but no experience whatsoever with AWS Kinesis, Apache Camel or Spring Cloud Stream. It will explain the role of message brokers, introduce Kinesis and conclude with a worked example based on Twitter data.


Message Brokers

Message brokers act as an intermediate between a data producer and a data consumer, responsible for routing, validating and transforming their input.

The benefits of using a message broker are decoupling the producer and consumer, maintaining a queue, providing reliable storage, managing the transactions and guaranteeing the message delivery.

Automated container deployment, scaling, and management

Containers for the masses


This article is aimed at developers with a basic knowledge of Java and Docker looking to understand how Kubernetes fits into contemporary software development.

We will aim to cover containerisation, container management and the basics of Kubernetes, finishing off with a worked example using AWS’ Elastic Kubernetes Service (EKS).


In Software Engineering we have code and we need somewhere to run it. Sometimes this will be on our local machines, sometimes a server, perhaps somewhere else. However, we need to make sure wherever we run it, it runs in the same way. …

Creating an amazing space for audience participation!

An introduction to moderation at the BBC

At the BBC, we put audiences at the heart of everything we do, so it’s important they feel they have a safe space to interact with all of our online products. Whether it’s a child uploading a picture for their favourite CBBC show, or an avid fan of current affairs sharing their thoughts on the latest breaking news story, the BBC is built to give a voice to everybody.

At the core of this is moderation. As text, pictures, videos and audio are submitted by the public to the BBC, we need to…

Demonstrating an approach to system design


This article is aimed at engineers interested in looking at how another developer may approach system design. It is not at all a definitive method, more a way of generating an approximate first draft architecture.

We will be borrowing the example problem from educative.io, and following a reasonably similar technique to generate our design.

It assumes you have a reasonable grasp of architecture, and in later stages AWS. However, even without those you should be able to get the gist.


Initially, let’s look at our problem statement.

The System to Design

We own a website, shorturl.co.uk, which provides…

A Simple Guide to Complexity

Charting relative complexities


This article acts as an introduction to complexities for engineers. However, it will be most useful to developers who already have a rough grasp of the area, and are looking for more of a refresher on some of the core techniques and terminology.


‘Big O’ is a measurement of how time relates to input variables. To explain, let’s take an example. We have an algorithm that walks through an array, printing each element. If n is the size of the array, then we will take n steps. Therefore our complexity is O(n).

Let’s take another…

How are they related?

Heap of Logs!


This article is aimed at developers looking to be introduced to the heap data structure. We will begin by defining a heap, then exploring priority queues and the two structures’ relationship.

It will help if you are familiar with trees and queues, as they will underpin our heap representation. For a quick refresher try my tree article here, and my queue article here.


A heap is binary tree with two extra sets of constraints:

  1. Shape: All levels of the tree must be filled, except for the last one. …


Stacks, queues, when to use!


This article is aimed at engineers with a small amount of programming experience, who are looking for their first introduction to stacks and queues. Alternatively it can be used by more experienced engineers as a light refresher on the subject.

It will help if you have seen graphs before, as we will be using them to demonstrate some of the applications of stacks and queues. We also use linked lists for our queue and stack implementations!

If you need to brush up on either of these subjects, you can use my article for graphs here, and my…

A first step in graph theory

Lorra, lorra graphs


This article is aimed at developers with a small amount of experience implementing structures such as linked lists and trees, but who would like to continue their learning into graphs.

I will use Java, but the concepts should be approachable by engineers familiar with any language!


We begin by introducing the concept of graphs. A graph is non-linear structure — unlike linked lists, queues, stacks and arrays. It consists of nodes and edges, as demonstrated below.

James Collerton

Senior Software Engineer at the BBC

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store