Knowledge: Tech Blog

Where we share our thoughts on technology and design.

Latest Articles

Nicholas Wolverson

Deploying PR branches with Gitlab review apps and Elastic Beanstalk

I describe setting up feature branch deployments with Gitlab's Review Apps and AWS Elastic Beanstalk. This gives a fairly straightforward means of setting up automated deployment of PR branches, but I discuss some issues I encountered along the way.

Matthew Amos

JavaScript Monorepos

I found splitting JavaScript applications into separate packages within a single source tree difficult, until I found a tool called Lerna.

Dave Ogle

JavaScript Closure

In this blog post I'll be exploring Lexical Scope in JavaScript and answering the question "What is Closure?"

Bartosz Jedrzejewski

JVM Roundabout - Microservices

JVM Roundabout is a meetup in London where all things related to JVM are discussed. The February edition of the meetup focused on microservices. I had to be there!

Thomas Clarke

Generic Platforms - The Rule of Three

When is it time to make something a generic re-usable class? And how do you manage the additional complexity of a generic solution? A potential solution lies in an incremental approach.

Laveena Ramchandani

Testing with Cognitive Intelligence

I have written about something that I found very interesting, Cognitive intelligence. My blog will contain information about cognitive intelligence,the benefits of testing with cognitive tools, what sectors currently use this, available platforms and finally if cognitive intelligence will take over a tester’s role.

Charlotte Roberts

Why Women Make Great Testers

Women often possess traits, skills and experiences that lend themselves to critical and sometimes overlooked aspects to being a great tester. This article will explore why and how these predispositions are necessary attributes to excelling in the field of testing.

Frank Hubin

How much does a story point cost?

How many times have you heard that from a client? Usually, a sponsor, or a traditional project manager embarks on a tirade: “Back in the day, we would use ideal engineering man-days as a benchmark. Then the work would be estimated in hours, which would then be fit into ideal...

Ross Rhodes

Machine Learning with Scikit Learn

Machine learning (ML) has become an increasingly popular field of Computer Science. In the past few years I've found myself working with ML to categorise large sets of data, and Scikit Learn for Python has proved itself to be exceptionally good for the task. This post walks through a simple example of Scikit Learn to categorise handwritten digits.

Graham Odds


Last week, designers from across the globe gathered for the annual Interaction conference. Here are some of my thoughts and takeaways from the event.

Robat Williams

Dealing with NPM shrinkwrap merges and conflicts

Conflicts sometimes arise when merging two npm-shrinkwrap.json files from different source control branches. Git might be able to solve some of these - but should you let it, and what should you do if it can't?

Nicholas Wolverson

(Multi-stage docker) in docker as CI Sledgehammer

With an objective of building some docker images on cloud CI infrastructure I introduce one build-template sledgehammer I've been using recently, multi-stage docker builds running in docker-in-docker host container, with examples of AWS CodeBuild and Gitlab CI, and musing on other options.

Laurence Pisani

Three Steps to Improving Customer Experience Through Testing

Taking the time upfront to consider the focus of your testing can pay dividends. It shouldn’t just be a priority to test early to decrease the cost of fixing issues, it should also be a priority to test in the right way from the start, to ensure we are meeting the needs of our users.

Chris Price

Another reason to use noopener - A deep dive into renderer process allocation

In highly-visual, rapidly-updating, multi-window, buzzword-laden apps performance is a big concern. With WebWorkers, SharedWorkers and ServiceWorkers we have a number of options for moving complex scripting tasks off the critical path. However, rendering can be more of a dark art. In this post I'll dig into how one browser (Chromium) uses renderer processes and how you can use this knowledge to your advantage.

Bartosz Jedrzejewski

How to use Java Optional correctly

Java Optional has been around for a while now. It is a pity that this language feature is nor used more often by developers. This is a simple demonstration of how to use it correctly.

Thomas Clarke

Rules and Values

A discussion of how companies develop rules in line with the values they hold, and how to deal with situations where those rules obstruct you from your job.

Dave Ogle

Looking At R

In this quick look at the R language and tools I'll look briefly at the syntax of the language and have a go at creating a few charts with a data set.

Ross Rhodes

Exploring Dynamic Programming

First introduced to me as “upside-down recursion”, dynamic programming is a technique used to write efficient algorithms to solve a wide range of problems, often replacing recursive approaches. Having met many examples in the past few years, this post explores three applications I’ve seen for the benefit of those new to the technique.

Dave Ogle

Apache Storm Taster

A quick look at Apache Storm with a short word count walk-through example using a Redis Database.

Sam Hogarth

Evaluating Redux Saga Test Libraries

If you're a fan of Redux Saga then you will have noticed the abundance of libraries to assist testing your sagas. This post takes an in-depth look into the different approaches to testing sagas, describing where five popular testing libraries fit into these approaches.