Read all about it... 'engineering' related content

Fearless deployments with CodeDeploy

How using CodeDeploy for deployments reduced deployment time by 12x, downtime during deployments by 36x and enabled automatic rollbacks on...

24 July 2024

Managing complexity with Cynefin

How do you manage complexity in a project? Is it with the same set of tried-and-tested tools that have (mostly)...

26 April 2024

Writing a Custom ESLint Rule in TypeScript

Have you ever found a small (yet annoying), recurring issue in your PR reviews that is super formulaic and could...

12 March 2024

Key takeaways from The State Of DevOps Report 2023

The DevOps Research and Assessment (DORA) research program has had a significant impact on the software industry over the last...

5 December 2023

From TDD to PBT via Kotest

In this post we see how to integrate PBT into your Kotlin tests.

26 October 2021

Principled Autonomy

High performance teams consistently outperform other teams by a significant factor. But why is this - what is the secret...

30 August 2021

TypeScript 4.4 - Be on your guard

In this post, in celebration of the release of TypeScript 4.4, I explore Type Unions in TypeScript and how the...

27 August 2021

TypeScript 4.3 - I object your honour!

In celebration of TypeScript 4.3 I take a look TypeScript's Object Oriented features and look at the new features this...

26 May 2021

Using TypeScript const assertions for fun and profit

How can we utilise the const assertion in TypeScript to flip the script and define types from immutable data?

29 April 2021

Crazy, Powerful TypeScript Tuple Types

In celebration of TypeScript 4.2 and the language's continued evolution, let's take a look at tuple types and some advanced...

23 March 2021

OODA Considered Harmful

Thoughts on why the OODA loop as applied to agile delivery is flawed or should even be considered harmful.

5 February 2021

The Truth of the 10X Developer

If you thought the 10X Developer concept was just a myth, think again. In this article Garth Gilmour convinces you...

13 January 2021

Crazy, Powerful TypeScript 4.1 Features

In this article I'll take a look at some new features in TypeScript 4.1 - namely Template Literal Types, Key...

19 November 2020

TypeScript Testing Tips - Mocking Functions with Jest

In this, the second of a series of posts on practical applications of TypeScript, we continue on the topic of...

28 October 2020

TypeScript Testing Tips - Creating Dummies

This is the first post in a series on using TypeScript in practical applications. It shows a simple TypeScript pattern...

21 October 2020

The Debt We Owe Java

On its 25th birthday, it's probably time we said a word of thanks to Java, for no matter what you...

23 May 2020

The Delusions Of Developers

Lessons from the Dot-com Bust we need to relearn

10 May 2020

A Kotlin DSL for Everyone

Typically, we use Domain Specific Languages (DSLs) in configuration scenarios (think Gradle). But we can also use them internally to...

23 January 2020

Using Koin for Dependency Injection

Koin provides a modern DI framework which supports Kotlin idioms and is usable across conventional, mobile and Cloud based applications.

29 November 2019

Code Generation With KotlinPoet

KotlinPoet provides a simple API for generating Kotlin source files. It allows you to automate what would otherwise be tedious...

28 November 2019

Static Types vs Dynamic Types. Stop fighting and make my life easier already

A look at how both statically and dynamically typed languages have pros and cons and how we should identify the...

17 October 2019

Why Strong Static Typing Is Your Friend

Last week my dear colleague Ryan wrote a blog post in praise of dynamic types. I would ask you not...

9 October 2019

Static types won't save us from bad code

Modern programming languages can be categorised in many ways, but the most common approach is to slice them by how...

3 October 2019

One Principle To Rule Them All?

The SOLID principles of software design provide guidelines on how we can make our code more readable, maintainable and extensible....

12 September 2019

Does Readability Have a Cost?

In software, there is a constant tension between sufficiency - the need to say something in as few words as...

5 September 2019

Programming in English

Science, Technology, Engineering and Maths (or a flavour thereof) are often touted as cornerstone subjects for a career in software...

4 December 2018

Kotlin Contracts

The Kotlin type system is fairly flexible but there are a few corner cases where the compiler enforces rules which...

27 September 2018

Kotlin Inline Class

How this will merge the power of custom types with the performance of primitives

21 September 2018

Kotlin Everywhere

Considering Kotlin? Here is why we made the switch from Java and why your developers will want to do the...

4 September 2018

Chaos and Order

A look at how ideas of order and chaos apply to software development

12 March 2018

Avoiding Defensive Checks

Defending against malicious use is a first order concern in all software. Any software that can be used or...

19 October 2017

The Phantom Type Menace

Fourth article in a series of posts introducing Functional Programming concepts. In this post we introduce Phantom Types

2 July 2017

Monads For The Masses

The third in a series of three, introducing Functional Programming concepts.

25 June 2017

Curry On Regardless

The second in a series of posts introducing Functional Programming concepts. This post looks at the closely related concepts of...

14 June 2017

Over-Thunking It

With the increasing adoption of functional programming there are strange terms slowly moving their way from academic obscurity to mainstream...

9 June 2017

The Planning Fallacy (and How it Messes With Your Ability to Estimate)

How the psychological phenomenon of planning fallacy can bias your estimations in software

10 April 2017

Empowering ObservableCollection with Rx

An introduction to using ObservableCollection in Rx and C#

3 June 2016

Continuous Delivery Pipelines with Jenkins 2.0

How to create continuous delivery pipelines in Jenkins 2.0

28 April 2016

A Fresh Start with Ansible

A guide to using Ansible to automatically setup your OSX development environment

26 April 2016

Test Setup as a Sanity Check on your Design

The importance of listening to your tests as a sanity check on your design

15 April 2016

SIMD in Depth - Performance and Cost in C# and C++

SIMD in Depth - Performance and Cost in C# and C++ (Part 2 of 2)

7 April 2016

Parallelism on a Single Core - SIMD with C#

An introduction to SIMD and parallelism on a Single Core - SIMD with C# (Part 1 of 2)

21 March 2016

Working With Constraints

Strengthening our creative practice through a fresh perspective on our own limitations and those imposed by others

2 March 2016

Exploring Session Based Testing

An introduction to session-based testing, a refinement to exploratory testing

7 January 2016

Simplify Your Code With C# 6.0

An overview of the latest features in C# 6.0 and how they will simplify your code

16 December 2015

The 3 Instil Check-in Commandments

3 essential things to check before you commit and push your changes to version control

3 April 2015

Java Shark Jump Redux

Opinion piece on why Java 8's attempt to jump the shark is just that

6 June 2014

Java Jumps the Shark

Java 8 attempts to 'jump the shark' with the introduction of streams, lambdas and 'FP'

4 June 2014

An Intro To Option(al)

Introduction to the Option, Optional and Maybe Types in Scala, Java and C#

25 May 2014

The Philosophy of Agility

Opinion piece on the relevancy of philosophy in the world of agile software

23 May 2014

You Keep Using That Word

Opinion piece on the state of test driven development and unit testing

20 May 2014

Simplicity Rules

Why is simplicity such an elusive quality in many developers code

26 August 2012