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